[cfe-dev] [PATCH 0/2] Introduce --with-clang-srcdir, to build out-of-tree clang
NAKAMURA Takumi
geek4civic at gmail.com
Fri Oct 14 18:34:02 PDT 2011
Eric,
Here is V2 patch. (squashed into one file).
- (OPTIONAL_)PARALLEL_DIRS can accept absolute path.
- tools/Makefile refers to $CLANG_SRC_ROOT
Yeah, I have to hold it till 3.0 branch. :S
...Takumi
-------------- next part --------------
diff --git a/Makefile.config.in b/Makefile.config.in
index fff482e..9755a5d 100644
--- a/Makefile.config.in
+++ b/Makefile.config.in
@@ -46,11 +46,19 @@ realpath = $(shell cd $(1); $(PWD))
PROJ_OBJ_DIR := $(call realpath, .)
PROJ_OBJ_ROOT := $(call realpath, $(PROJ_OBJ_DIR)/$(LEVEL))
+CLANG_SRC_ROOT := @CLANG_SRC_ROOT@
+
ifeq ($(PROJECT_NAME),llvm)
LLVM_SRC_ROOT := $(call realpath, @abs_top_srcdir@)
LLVM_OBJ_ROOT := $(call realpath, @abs_top_builddir@)
PROJ_SRC_ROOT := $(LLVM_SRC_ROOT)
-PROJ_SRC_DIR := $(call realpath, $(LLVM_SRC_ROOT)/$(patsubst $(PROJ_OBJ_ROOT)%,%,$(PROJ_OBJ_DIR)))
+PROJ_SRC_DIR := $(LLVM_SRC_ROOT)$(patsubst $(PROJ_OBJ_ROOT)%,%,$(PROJ_OBJ_DIR))
+
+ifneq ($(CLANG_SRC_ROOT),)
+ CLANG_SRC_ROOT:= $(call realpath, $(CLANG_SRC_ROOT))
+ PROJ_SRC_DIR := $(patsubst $(LLVM_SRC_ROOT)/tools/clang%,$(CLANG_SRC_ROOT)%,$(PROJ_SRC_DIR))
+endif
+
prefix := @prefix@
PROJ_prefix := $(prefix)
PROJ_VERSION := $(LLVMVersion)
diff --git a/Makefile.rules b/Makefile.rules
index d057f04..54c3780 100644
--- a/Makefile.rules
+++ b/Makefile.rules
@@ -806,7 +806,7 @@ endif
# Handle the OPTIONAL_PARALLEL_DIRS options for optional parallel construction
#-----------------------------------------------------------
ifdef OPTIONAL_PARALLEL_DIRS
- PARALLEL_DIRS += $(foreach T,$(OPTIONAL_PARALLEL_DIRS),$(shell test -d $(PROJ_SRC_DIR)/$(T) && echo "$(T)"))
+ PARALLEL_DIRS += $(foreach T,$(OPTIONAL_PARALLEL_DIRS),$(shell test -d $(PROJ_SRC_DIR)/$(T) -o -f $(T)/Makefile && echo "$(T)"))
endif
#-----------------------------------------------------------
@@ -828,13 +828,20 @@ unitcheck:: $(addsuffix /.makeunitcheck,$(PARALLEL_DIRS))
ParallelTargets := $(foreach T,$(RecursiveTargets),%/.make$(T))
$(ParallelTargets) :
- $(Verb) if ([ ! -f $(@D)/Makefile ] || \
- command test $(@D)/Makefile -ot \
- $(PROJ_SRC_DIR)/$(@D)/Makefile ); then \
- $(MKDIR) $(@D); \
- $(CP) $(PROJ_SRC_DIR)/$(@D)/Makefile $(@D)/Makefile; \
+ $(Verb) \
+ SD=$(PROJ_SRC_DIR)/$(@D); \
+ DD=$(@D); \
+ if [ ! -f $$SD/Makefile ]; then \
+ SD=$(@D); \
+ DD=$(notdir $(@D)); \
+ fi; \
+ if ([ ! -f $$DD/Makefile ] || \
+ command test $$DD/Makefile -ot \
+ $$SD/Makefile ); then \
+ $(MKDIR) $$DD; \
+ $(CP) $$SD/Makefile $$DD/Makefile; \
fi; \
- $(MAKE) -C $(@D) $(subst $(@D)/.make,,$@)
+ $(MAKE) -C $$DD $(subst $(@D)/.make,,$@)
endif
#---------------------------------------------------------
diff --git a/autoconf/configure.ac b/autoconf/configure.ac
index 85fe8d4..c28ff7f 100644
--- a/autoconf/configure.ac
+++ b/autoconf/configure.ac
@@ -795,6 +795,17 @@ case "$withval" in
*) AC_MSG_ERROR([Invalid path for --with-ocaml-libdir. Provide full path]) ;;
esac
+AC_ARG_WITH(clang-srcdir,
+ AS_HELP_STRING([--with-clang-srcdir],
+ [Directory to the out-of-tree Clang source]),,
+ withval="-")
+case "$withval" in
+ -) clang_src_root="" ;;
+ /* | [[A-Za-z]]:[[\\/]]*) clang_src_root="$withval" ;;
+ *) clang_src_root="$ac_pwd/$withval" ;;
+esac
+AC_SUBST(CLANG_SRC_ROOT,[$clang_src_root])
+
AC_ARG_WITH(clang-resource-dir,
AS_HELP_STRING([--with-clang-resource-dir],
[Relative directory from the Clang binary for resource files]),,
diff --git a/test/Makefile b/test/Makefile
index c0bc36c..b1550df 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -59,7 +59,7 @@ extra-lit-site-cfgs::
ifneq ($(strip $(filter check-local-all,$(MAKECMDGOALS))),)
ifndef TESTSUITE
-ifeq ($(shell test -d $(PROJ_SRC_DIR)/../tools/clang && echo OK), OK)
+ifeq ($(shell test -f $(PROJ_OBJ_DIR)/../tools/clang/Makefile && echo OK), OK)
LIT_ALL_TESTSUITES += $(PROJ_OBJ_DIR)/../tools/clang/test
# Force creation of Clang's lit.site.cfg.
diff --git a/tools/Makefile b/tools/Makefile
index 68ce314..2da3917 100644
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -9,8 +9,15 @@
LEVEL := ..
+include $(LEVEL)/Makefile.config
+
# Build clang if present.
-OPTIONAL_PARALLEL_DIRS := clang
+
+ifneq ($(CLANG_SRC_ROOT),)
+ OPTIONAL_PARALLEL_DIRS := $(CLANG_SRC_ROOT)
+else
+ OPTIONAL_PARALLEL_DIRS := clang
+endif
# Build LLDB if present. Note LLDB must be built last as it depends on the
# wider LLVM infrastructure (including Clang).
@@ -36,9 +43,6 @@ ifdef ONLY_TOOLS
PARALLEL_DIRS := $(filter-out lldb,$(ONLY_TOOLS))
endif
-include $(LEVEL)/Makefile.config
-
-
# These libraries build as dynamic libraries (.dylib /.so), they can only be
# built if ENABLE_PIC is set.
ifndef ONLY_TOOLS
More information about the cfe-dev
mailing list