diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-09-03 20:49:22 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-09-03 20:49:22 +0000 |
commit | 866d2824095a5bc78307c103347695b52f3d49f0 (patch) | |
tree | bb0d91c85f7f9fe62ca44d500698f799a62f99e2 | |
parent | 172e105cf58333a1a55468095c51d22868296a68 (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-- | Makefile | 15 | ||||
-rw-r--r-- | make/config.mk | 30 | ||||
-rw-r--r-- | make/subdir.mk | 5 |
3 files changed, 44 insertions, 6 deletions
@@ -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))))) |