[cfe-commits] r93910 - in /cfe/trunk/lib: Makefile Runtime/ Runtime/Makefile

Daniel Dunbar daniel at zuster.org
Tue Jan 19 13:12:58 PST 2010


Author: ddunbar
Date: Tue Jan 19 15:12:58 2010
New Revision: 93910

URL: http://llvm.org/viewvc/llvm-project?rev=93910&view=rev
Log:
Initial cut at integrating compiler-rt (on Darwin) w/ clang build.
 - compiler-rt should be checked out into $LLVM_SRC_ROOT/projects/compiler-rt.

 - On Darwin, this will automatically build the runtime libraries clang needs
   into $OBJROOT/lib/clang/<version>/darwin/...

 - The mechanism can easily support other platforms, and can eventually support
   multiple platforms once clang has some kind of configure process (for
   specifying the desired targets).

 - Feedback on the approach is welcome.

Added:
    cfe/trunk/lib/Runtime/
    cfe/trunk/lib/Runtime/Makefile
Modified:
    cfe/trunk/lib/Makefile

Modified: cfe/trunk/lib/Makefile
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Makefile?rev=93910&r1=93909&r2=93910&view=diff

==============================================================================
--- cfe/trunk/lib/Makefile (original)
+++ cfe/trunk/lib/Makefile Tue Jan 19 15:12:58 2010
@@ -8,8 +8,8 @@
 ##===----------------------------------------------------------------------===##
 LEVEL = ../../..
 
-PARALLEL_DIRS = Headers Basic Lex Parse AST Sema CodeGen Analysis Rewrite \
-	Frontend Index Driver
+PARALLEL_DIRS = Headers Runtime Basic Lex Parse AST Sema CodeGen Analysis \
+                Rewrite Frontend Index Driver
 
 include $(LEVEL)/Makefile.common
 

Added: cfe/trunk/lib/Runtime/Makefile
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Runtime/Makefile?rev=93910&view=auto

==============================================================================
--- cfe/trunk/lib/Runtime/Makefile (added)
+++ cfe/trunk/lib/Runtime/Makefile Tue Jan 19 15:12:58 2010
@@ -0,0 +1,99 @@
+##===- clang/lib/Runtime/Makefile --------------------------*- Makefile -*-===##
+#
+#                     The LLVM Compiler Infrastructure
+#
+# This file is distributed under the University of Illinois Open Source
+# License. See LICENSE.TXT for details.
+#
+##===----------------------------------------------------------------------===##
+#
+# This file defines support for building the Clang runtime libraries (which are
+# implemented by compiler-rt) and placing them in the proper locations in the
+# Clang resources directory (i.e., where the driver expects them).
+#
+##===----------------------------------------------------------------------===##
+
+LEVEL = ../../../..
+include $(LEVEL)/Makefile.common
+
+CLANG_VERSION := $(shell cat $(PROJ_SRC_DIR)/../../VER)
+ResourceDir := $(PROJ_OBJ_ROOT)/$(BuildMode)/lib/clang/$(CLANG_VERSION)
+PROJ_resources := $(DESTDIR)$(PROJ_prefix)/lib/clang/$(CLANG_VERSION)
+
+ResourceLibDir := $(ResourceDir)/lib
+PROJ_resources_lib := $(PROJ_resources)/lib
+
+# Expect compiler-rt to be in llvm/projects/compiler-rt
+COMPILERRT_SRC_ROOT := $(LLVM_SRC_ROOT)/projects/compiler-rt
+
+ifeq ($(shell test -d $(COMPILERRT_SRC_ROOT) && echo OK),OK)
+
+# Select the compiler-rt configuration to use, and install directory.
+#
+# FIXME: Eventually, we want some kind of configure support for this. We want to
+# build/install runtime libraries for as many targets as clang was configured to
+# support.
+RuntimeDirs :=
+ifeq ($(OS),Darwin)
+RuntimeDirs += darwin
+RuntimeLibrary.darwin.Configs = x86_10.4 armv6
+endif
+
+endif
+
+# Rule to build the compiler-rt libraries we need.
+#
+# We build all the libraries in a single shot to avoid recursive make as much as
+# possible.
+BuildRuntimeLibraries:
+	$(Verb) $(MAKE) -C $(COMPILERRT_SRC_ROOT) \
+	  ProjSrcRoot=$(COMPILERRT_SRC_ROOT) \
+	  ProjObjRoot=$(PROJ_OBJ_DIR) \
+	  $(RuntimeDirs:%=clang_%)
+.PHONY: BuildRuntimeLibraries
+CleanRuntimeLibraries:
+	$(Verb) $(MAKE) -C $(COMPILERRT_SRC_ROOT) \
+	  ProjSrcRoot=$(COMPILERRT_SRC_ROOT) \
+	  ProjObjRoot=$(PROJ_OBJ_DIR) \
+	  clean
+.PHONY: CleanRuntimeLibraries
+
+$(PROJ_resources_lib):
+	$(Verb) $(MKDIR) $@
+
+# Expand rules for copying/installing each individual library. We can't use
+# implicit rules here because we need to match against multiple things.
+define RuntimeLibraryTemplate
+$(PROJ_OBJ_DIR)/clang_$1/%/libcompiler_rt.a: BuildRuntimeLibraries
+	@true
+.PRECIOUS: $(PROJ_OBJ_DIR)/clang_$1/%/libcompiler_rt.a
+
+# Rule to copy the libraries to their resource directory location.
+$(ResourceLibDir)/$1/libclang_rt.%.a: \
+		$(PROJ_OBJ_DIR)/clang_$1/%/libcompiler_rt.a \
+		$(ResourceLibDir)/$1/.dir
+	$(Echo) Copying runtime library $1/$$* to build dir
+	$(Verb) cp $(PROJ_OBJ_DIR)/clang_$1/$$*/libcompiler_rt.a $$@
+RuntimeLibrary.$1: \
+		$(RuntimeLibrary.$1.Configs:%=$(ResourceLibDir)/$1/libclang_rt.%.a)
+.PHONY: RuntimeLibrary.$1
+
+$(PROJ_resources_lib)/$1: $(PROJ_resources_lib)
+	$(Verb) $(MKDIR) $$@
+
+$(PROJ_resources_lib)/$1/libclang_rt.%.a: \
+		$(ResourceLibDir)/$1/libclang_rt.%.a | $(PROJ_resources_lib)/$1
+	$(Echo) Installing compiler runtime library: $1/$$*
+	$(Verb) $(DataInstall) $$< $(PROJ_resources_lib)/$1
+
+# Rule to install runtime libraries.
+RuntimeLibraryInstall.$1: \
+		$(RuntimeLibrary.$1.Configs:%=$(PROJ_resources_lib)/$1/libclang_rt.%.a)
+.PHONY: RuntimeLibraryInstall.$1
+endef
+$(foreach lib,$(RuntimeDirs), $(eval $(call RuntimeLibraryTemplate,$(lib))))
+
+# Hook into the standard Makefile rules.
+all-local:: $(RuntimeDirs:%=RuntimeLibrary.%)
+install-local:: $(RuntimeDirs:%=RuntimeLibraryInstall.%)
+clean-local:: CleanRuntimeLibraries





More information about the cfe-commits mailing list