$(UserTargets)::
+#------------------------------------------------------------------------
+# LLVMBuild Integration
+#------------------------------------------------------------------------
+#
+# We use llvm-build to generate all the data required by the Makefile based
+# build system in one swoop:
+#
+# - We generate a file (a Makefile fragment) in the object root which contains
+# all the definitions that are required by Makefiles across the entire
+# project.
+#
+# - We generate the library table used by llvm-config.
+#
+# - We generate the dependencies for the Makefile fragment, so that we will
+# automatically reconfigure outselves.
+
+# The path to the llvm-build tool itself.
+LLVMBuildTool := $(PROJ_SRC_ROOT)/utils/llvm-build/llvm-build
+
+# The files we are going to generate using llvm-build.
+LLVMBuildMakeFrag := $(PROJ_OBJ_ROOT)/Makefile.llvmbuild
+LLVMConfigLibraryDependenciesInc := \
+ $(PROJ_OBJ_ROOT)/tools/llvm-config-2/LibraryDependencies.inc
+
+# The rule to create the LLVMBuild Makefile fragment as well as the llvm-config
+# library table.
+#
+# Note that this target gets its real dependencies generated for us by
+# llvm-build.
+#
+# We include a dependency on this Makefile to ensure that changes to the
+# generation command get picked up.
+$(LLVMBuildMakeFrag): $(PROJ_SRC_ROOT)/Makefile.rules
+ $(Echo) Constructing LLVMBuild project information.
+ $(Verb) $(LLVMBuildTool) \
+ --native-target "$(ARCH)" \
+ --enable-targets "$(TARGETS_TO_BUILD)" \
+ --write-library-table $(LLVMConfigLibraryDependenciesInc) \
+ --write-make-fragment $(LLVMBuildMakeFrag)
+
+# For completeness, let Make know how the extra files are generated.
+$(LLVMConfigLibraryDependenciesInc): $(LLVMBuildMakeFrag)
+
+# Include the generated Makefile fragment.
+#
+# We currently only include the dependencies for the fragment itself if we are
+# at the top-level. Otherwise, recursive invocations would ends up doing
+# substantially more redundant stat'ing.
+#
+# This means that we won't properly regenerate things for developers used to
+# building from a subdirectory, but that is always somewhat unreliable.
+ifeq ($(LEVEL),.)
+LLVMBUILD_INCLUDE_DEPENDENCIES := 1
+endif
+-include $(LLVMBuildMakeFrag)
+
################################################################################
# PRECONDITIONS: that which must be built/checked first
################################################################################
endif
endif
+#CXX.Flags += -stdlib=libc++
+#LD.Flags += -stdlib=libc++
+
ifeq ($(ENABLE_PROFILING),1)
BuildMode := $(BuildMode)+Profile
CXX.Flags := $(filter-out -fomit-frame-pointer,$(CXX.Flags)) -pg -g
LLVM_TBLGEN := $(LLVMToolDir)/llvm-tblgen$(EXEEXT)
endif
endif
-LLVM_CONFIG := $(LLVMToolDir)/llvm-config
+LLVM_CONFIG := $(LLVMToolDir)/llvm-config-2$(EXEEXT)
ifndef LLVMLD
LLVMLD := $(LLVMToolDir)/llvm-ld$(EXEEXT)
endif
$(LLVM_OBJ_ROOT) $(LLVM_SRC_ROOT))) \
$(CPP.BaseFlags)
+ifeq ($(INCLUDE_BUILD_DIR),1)
+ CPP.Flags += -I$(ObjDir)
+endif
+
# SHOW_DIAGNOSTICS support.
ifeq ($(SHOW_DIAGNOSTICS),1)
Compile.Wrapper := env CC_LOG_DIAGNOSTICS=1 \
ifneq ($(strip $(ObjRootDir)),)
-$(Verb) $(RM) -rf $(ObjRootDir)
endif
- -$(Verb) $(RM) -f core core.[0-9][0-9]* *.o *.d *~ *.flc
ifneq ($(strip $(SHLIBEXT)),) # Extra paranoia - make real sure SHLIBEXT is set
-$(Verb) $(RM) -f *$(SHLIBEXT)
endif