summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-09-03 20:49:22 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-09-03 20:49:22 +0000
commit866d2824095a5bc78307c103347695b52f3d49f0 (patch)
treebb0d91c85f7f9fe62ca44d500698f799a62f99e2
parent172e105cf58333a1a55468095c51d22868296a68 (diff)
Support building for a single target architecture.
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@80943 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--Makefile15
-rw-r--r--make/config.mk30
-rw-r--r--make/subdir.mk5
3 files changed, 44 insertions, 6 deletions
diff --git a/Makefile b/Makefile
index 16ee1a460..4f6a2e087 100644
--- a/Makefile
+++ b/Makefile
@@ -44,19 +44,24 @@ $(call Set,ActiveLibGen,$(ActiveObjPath)/libcompiler_rt.Generic.a)
$(call Set,ActiveLibOpt,$(ActiveObjPath)/libcompiler_rt.Optimized.a)
# The sublibraries to use for a generic version.
-$(call Set,GenericInputs,$(foreach arch,$(Archs),$(ActiveObjPath)/$(arch)/libcompiler_rt.Generic.a))
+$(call Set,GenericInputs,$(foreach arch,$(TargetArchs),$(ActiveObjPath)/$(arch)/libcompiler_rt.Generic.a))
# The sublibraries to use for an optimized version.
-$(call Set,OptimizedInputs,$(foreach arch,$(Archs),$(ActiveObjPath)/$(arch)/libcompiler_rt.Optimized.a))
+$(call Set,OptimizedInputs,$(foreach arch,$(TargetArchs),$(ActiveObjPath)/$(arch)/libcompiler_rt.Optimized.a))
-# Provide top-level fat archive targets.
+# Provide top-level fat archive targets. We make sure to not try to lipo if only
+# building one target arch.
$(ActiveLibGen): $(GenericInputs) $(ActiveObjPath)/.dir
$(Summary) " UNIVERSAL: $(ActiveConfig): $$@"
-$(Verb) $(RM) $$@
- $(Verb) $(Lipo) -create -output $$@ $(GenericInputs)
+ $(if $(TargetArch), \
+ $(Verb) $(CP) $(GenericInputs) $$@, \
+ $(Verb) $(Lipo) -create -output $$@ $(GenericInputs))
$(ActiveLibOpt): $(OptimizedInputs) $(ActiveObjPath)/.dir
$(Summary) " UNIVERSAL: $(ActiveConfig): $$@"
-$(Verb) $(RM) $$@
- $(Verb) $(Lipo) -create -output $$@ $(OptimizedInputs)
+ $(if $(TargetArch), \
+ $(Verb) $(CP) $(GenericInputs) $$@, \
+ $(Verb) $(Lipo) -create -output $$@ $(OptimizedInputs))
.PRECIOUS: $(ActiveObjPath)/.dir
# Add to target lists.
diff --git a/make/config.mk b/make/config.mk
index 726e8ba41..d2c614c9a 100644
--- a/make/config.mk
+++ b/make/config.mk
@@ -1,6 +1,8 @@
###
# Configuration variables.
+OS := $(shell uname)
+
# Assume make is always run from top-level of source directory. Note
# than an Apple style build overrides these variables later in the
# makefile.
@@ -8,8 +10,20 @@ ProjSrcRoot := $(shell pwd)
ProjObjRoot := $(ProjSrcRoot)
Configs := Debug Release Profile
+
+# The full list of architectures we support.
Archs := i386 ppc x86_64
+# If TargetArch is defined, only build for that architecture (and don't use
+# -arch).
+ifeq ($(OS), Darwin)
+ TargetArch :=
+ TargetArchs := $(Archs)
+else
+ TargetArch := i386
+ TargetArchs := $(TargetArch)
+endif
+
Common.CFLAGS := -Wall -Werror
# These names must match the configs, see GetArgs function.
@@ -17,10 +31,23 @@ Debug.CFLAGS := -g
Release.CFLAGS := -O3 -fomit-frame-pointer
Profile.CFLAGS := -pg -g
+# Function: GetArchArgs arch
+#
+# Return the compiler flags for the given arch.
+ifeq ($(OS), Darwin)
+ GetArchArgs = -arch $(1)
+else
+ # Check that we are only trying to build the target arch.
+ GetArchArgs = $(if $(subst $(TargetArch),,$(1)), \
+ $(error "Invalid configuration, no -arch support: $(1)"), \
+ )
+endif
+
# Function: GetArgs config arch
#
# Return the compiler flags for the given config & arch.
-GetArgs = $(if $($(1).CFLAGS),$(Common.CFLAGS) $($(1).CFLAGS) -arch $(2), \
+GetArgs = $(if $($(1).CFLAGS), \
+ $(Common.CFLAGS) $($(1).CFLAGS) $(call GetArchArgs,$(2)), \
$(error "Invalid configuration: $(1)"))
###
@@ -37,6 +64,7 @@ RANLIB := ranlib
# FIXME: Remove these pipes once ranlib errors are fixed.
RANLIB.Flags := 2> /dev/null
LIPO := lipo
+CP := cp
###
# Automatic and derived variables.
diff --git a/make/subdir.mk b/make/subdir.mk
index 3aea16c73..f3a9d52cb 100644
--- a/make/subdir.mk
+++ b/make/subdir.mk
@@ -23,6 +23,11 @@ else
ArchsToTraverse := $(OnlyArchs)
endif
+# If we are only targetting a single arch, only traverse that.
+ifneq ($(TargetArch),)
+ ArchsToTraverse := $(filter $(TargetArch), $(ArchsToTraverse))
+endif
+
$(foreach config,$(ConfigsToTraverse), \
$(foreach arch,$(ArchsToTraverse), \
$(eval $(call CNA_subdir_template,$(config),$(arch),$(Dir)))))