Makefile revision e33218a3ceb3a36e4d8163cf04df0c0cae530b27
1f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek##===- clang/runtime/compiler-rt/Makefile ------------------*- Makefile -*-===## 2f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek# 3f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek# The LLVM Compiler Infrastructure 4f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek# 5f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek# This file is distributed under the University of Illinois Open Source 6f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek# License. See LICENSE.TXT for details. 7f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek# 8f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek##===----------------------------------------------------------------------===## 9f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek# 10f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek# This file defines support for building the Clang runtime libraries (which are 11f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek# implemented by compiler-rt) and placing them in the proper locations in the 12f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek# Clang resources directory (i.e., where the driver expects them). 13f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek# 14e6348c336fecc8da9288ea367375a1b1cd2358d2Argyrios Kyrtzidis##===----------------------------------------------------------------------===## 15f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek 16f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted KremenekCLANG_LEVEL := ../.. 17802be99a6817aba6edb166b93c133da4358aa783Zhongxing Xuinclude $(CLANG_LEVEL)/Makefile 18f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek 19efceabd2380f49306bc0229583458e93b062094bDaniel DunbarCLANG_VERSION := $(word 3,$(shell grep "CLANG_VERSION " \ 20efceabd2380f49306bc0229583458e93b062094bDaniel Dunbar $(PROJ_OBJ_DIR)/$(CLANG_LEVEL)/include/clang/Basic/Version.inc)) 2127af04bcca46f8a3374586be1301477f9123f5e1Argyrios Kyrtzidis 2243dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios KyrtzidisResourceDir := $(PROJ_OBJ_ROOT)/$(BuildMode)/lib/clang/$(CLANG_VERSION) 2321142581d55918beed544a757e4af3bb865b1812Ted KremenekPROJ_resources := $(DESTDIR)$(PROJ_prefix)/lib/clang/$(CLANG_VERSION) 249b663716449b618ba0390b1dbebc54fa8e971124Ted Kremenek 259b663716449b618ba0390b1dbebc54fa8e971124Ted KremenekResourceLibDir := $(ResourceDir)/lib 269b663716449b618ba0390b1dbebc54fa8e971124Ted KremenekPROJ_resources_lib := $(PROJ_resources)/lib 279b663716449b618ba0390b1dbebc54fa8e971124Ted Kremenek 289b663716449b618ba0390b1dbebc54fa8e971124Ted Kremenek# Expect compiler-rt to be in llvm/projects/compiler-rt 299b663716449b618ba0390b1dbebc54fa8e971124Ted KremenekCOMPILERRT_SRC_ROOT := $(LLVM_SRC_ROOT)/projects/compiler-rt 30a7af5ea88a6c5bdf87497cca6c20831e8c546751Argyrios Kyrtzidis 31efceabd2380f49306bc0229583458e93b062094bDaniel Dunbar# Additional flags to pass to Clang. 32efceabd2380f49306bc0229583458e93b062094bDaniel DunbarCLANG_CCFLAGS := -no-integrated-as 339b414d3e2d0cb84512b55a3275a98490b090162aDaniel Dunbar 34efceabd2380f49306bc0229583458e93b062094bDaniel Dunbar# We don't currently support building runtime libraries when we are 35f8ce6991f41d55b6e8526b7a7919771428e2b181Ted Kremenek# cross-compiling. The issue is that we really want to be set up so that the 3603013fa9a0bf1ef4b907f5fec006c8f4000fdd21Michael J. Spencer# available compiler targets are independent of the current build. 3703013fa9a0bf1ef4b907f5fec006c8f4000fdd21Michael J. Spencer# 386cb7c1a43b0c8f739d1f54b7fdae5ede86033496Benjamin Kramer# Since we have to build the runtime libraries for the target, it requires we 39db09a4dee28a4515438af60f2d2b4a83e4965c31Ted Kremenek# have a cross compiler from the build machine to the target. Although in the 40f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek# case where for the current build (host == target), we do have such a cross 419ef6537a894c33003359b1f9b9676e9178e028b7Ted Kremenek# compiler, but not defined in a way that is easy for us to reuse. Regardless, 42f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek# that also wouldn't help for other possible compiler configurations. 43c5619d901a68dc27a9e310a6a831f03efebcd950Zhongxing Xu# 44ff944a8c481d6c0f1ad2633e4be9bf8b1dd2a09fZhongxing Xu# Thus, the simple set up we currently use is to assume that we will be using 45be1fe1eb12a1cb91c8e3a9fcc2db4dfe989def6cTed Kremenek# the just built Clang to compile the compiler-rt libraries. As we grow better 46f75560670bcdd59b051149bdece3eac14e313853Ted Kremenek# cross compilation support inside Clang and tool support in LLVM, this makes it 47f75560670bcdd59b051149bdece3eac14e313853Ted Kremenek# easier for us to achieve the goal of having the compiler targets be easily 48f75560670bcdd59b051149bdece3eac14e313853Ted Kremenek# selected at configure time. However, this design does currently preclude the 49f75560670bcdd59b051149bdece3eac14e313853Ted Kremenek# building of compiler-rt libraries when the Clang itself is being cross 50f928dca56542cf8f981a684f090d2c79bdcb2a10Argyrios Kyrtzidis# compiled. 51efceabd2380f49306bc0229583458e93b062094bDaniel Dunbar# 52d5b08bee799d4f77f1a25fa5977ca77b983ab031Michael J. Spencer# There are three possible solutions: 53d5b08bee799d4f77f1a25fa5977ca77b983ab031Michael J. Spencer# 1. Require building a build-target version of Clang when cross compiling. This 54f928dca56542cf8f981a684f090d2c79bdcb2a10Argyrios Kyrtzidis# is simplest, but als greatly increases the build time of cross builds. 55f75560670bcdd59b051149bdece3eac14e313853Ted Kremenek# 56f75560670bcdd59b051149bdece3eac14e313853Ted Kremenek# 2. Require cross builds have a build-target version of Clang available for 57f75560670bcdd59b051149bdece3eac14e313853Ted Kremenek# use. This is a reasonable compromise on #1, as the compiler-rt libraries 58f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek# are simple enough that there is not a strong desire to ensure they are 59f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek# built with the exact version of Clang being used. Similarly, as Clang 60f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek# becomes a better cross compiler it is also increasingly more likely that 61f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek# the cross compiler being used will already be a version of Clang. 62f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek# 63ed8afacb8118b71bcfa8017059e51da325e7691bZhongxing Xu# 3. Come up with an alternate mechanism to define all the toolchain 64ed8afacb8118b71bcfa8017059e51da325e7691bZhongxing Xu# information that compiler-rt would need to build libraries for all the 659c378f705405d37f49795d5e915989de774fe11fTed Kremenek# requested targets. This might be a simple short term solution, but is 661d9cbeb76cf4c36acf5545028e2b2ac207086442Ted Kremenek# likely to be unwieldly and irritating to maintain in the long term. 671d9cbeb76cf4c36acf5545028e2b2ac207086442Ted Kremenekifneq ($(LLVM_CROSS_COMPILING),1) 681d9cbeb76cf4c36acf5545028e2b2ac207086442Ted Kremenekifneq ($(CLANG_NO_RUNTIME),1) 69d07a0d0279c09d1017f8450fce575a94dc9703c0Zhongxing Xuifeq ($(shell test -d $(COMPILERRT_SRC_ROOT) && echo OK),OK) 701d9cbeb76cf4c36acf5545028e2b2ac207086442Ted Kremenek 711d9cbeb76cf4c36acf5545028e2b2ac207086442Ted Kremenek# Select the compiler-rt configuration to use, and install directory. 72d07a0d0279c09d1017f8450fce575a94dc9703c0Zhongxing Xu# 731d9cbeb76cf4c36acf5545028e2b2ac207086442Ted Kremenek# FIXME: Eventually, we want some kind of configure support for this. We want to 741d9cbeb76cf4c36acf5545028e2b2ac207086442Ted Kremenek# build/install runtime libraries for as many targets as clang was configured to 75f4381fddf152a63e1ac97185293c47ec0ac2f1a6Ted Kremenek# support. 7643dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios KyrtzidisRuntimeDirs := 771d9cbeb76cf4c36acf5545028e2b2ac207086442Ted Kremenekifeq ($(OS),Darwin) 78c471e7b44e63ff1b46b480e723c4130aeaef5a8aZhongxing XuRuntimeDirs += darwin 791d9cbeb76cf4c36acf5545028e2b2ac207086442Ted KremenekRuntimeLibrary.darwin.Configs := eprintf 10.4 osx ios cc_kext 801d9cbeb76cf4c36acf5545028e2b2ac207086442Ted Kremenek 811d9cbeb76cf4c36acf5545028e2b2ac207086442Ted Kremenek# On Darwin, fake Clang into using the iOS assembler (since compiler-rt wants to 821d9cbeb76cf4c36acf5545028e2b2ac207086442Ted Kremenek# build ARM bits). 83c4a1437c15da43eb8d2601cdce13161ef41a4389Ted Kremenekifeq ($(OS),Darwin) 841d9cbeb76cf4c36acf5545028e2b2ac207086442Ted KremenekCLANG_CCFLAGS += -ccc-install-dir \ 851d9cbeb76cf4c36acf5545028e2b2ac207086442Ted Kremenek /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/ 86fda7832b000ff8927386f093b52c067641679469Zhongxing Xuendif 871d9cbeb76cf4c36acf5545028e2b2ac207086442Ted Kremenekendif 881d9cbeb76cf4c36acf5545028e2b2ac207086442Ted Kremenek 891d9cbeb76cf4c36acf5545028e2b2ac207086442Ted Kremenek#### 901d9cbeb76cf4c36acf5545028e2b2ac207086442Ted Kremenek# The build rules below are designed to be generic and should only need to be 911d9cbeb76cf4c36acf5545028e2b2ac207086442Ted Kremenek# modified based on changes in the compiler-rt layout or build system. 92fda7832b000ff8927386f093b52c067641679469Zhongxing Xu#### 931d9cbeb76cf4c36acf5545028e2b2ac207086442Ted Kremenek 94fda7832b000ff8927386f093b52c067641679469Zhongxing Xu# Rule to build the compiler-rt libraries we need. 95fda7832b000ff8927386f093b52c067641679469Zhongxing Xu# 96a599ae8826b01c0160a519b0fc5a4871f599bf04Argyrios Kyrtzidis# We build all the libraries in a single shot to avoid recursive make as much as 97a599ae8826b01c0160a519b0fc5a4871f599bf04Argyrios Kyrtzidis# possible. 98a599ae8826b01c0160a519b0fc5a4871f599bf04Argyrios KyrtzidisBuildRuntimeLibraries: 99a599ae8826b01c0160a519b0fc5a4871f599bf04Argyrios Kyrtzidis $(Verb) $(MAKE) -C $(COMPILERRT_SRC_ROOT) \ 1001d9cbeb76cf4c36acf5545028e2b2ac207086442Ted Kremenek ProjSrcRoot=$(COMPILERRT_SRC_ROOT) \ 101fda7832b000ff8927386f093b52c067641679469Zhongxing Xu ProjObjRoot=$(PROJ_OBJ_DIR) \ 1021d9cbeb76cf4c36acf5545028e2b2ac207086442Ted Kremenek CC="$(ToolDir)/clang $(CLANG_CCFLAGS)" \ 1035f83d6f36a7308eef21d87104fd70c421e854448Argyrios Kyrtzidis $(RuntimeDirs:%=clang_%) 1045f83d6f36a7308eef21d87104fd70c421e854448Argyrios Kyrtzidis.PHONY: BuildRuntimeLibraries 1055f83d6f36a7308eef21d87104fd70c421e854448Argyrios KyrtzidisCleanRuntimeLibraries: 106fda7832b000ff8927386f093b52c067641679469Zhongxing Xu $(Verb) $(MAKE) -C $(COMPILERRT_SRC_ROOT) \ 1075f83d6f36a7308eef21d87104fd70c421e854448Argyrios Kyrtzidis ProjSrcRoot=$(COMPILERRT_SRC_ROOT) \ 108fda7832b000ff8927386f093b52c067641679469Zhongxing Xu ProjObjRoot=$(PROJ_OBJ_DIR) \ 1091d9cbeb76cf4c36acf5545028e2b2ac207086442Ted Kremenek clean 1101eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump.PHONY: CleanRuntimeLibraries 1115f83d6f36a7308eef21d87104fd70c421e854448Argyrios Kyrtzidis 1125f83d6f36a7308eef21d87104fd70c421e854448Argyrios Kyrtzidis$(PROJ_resources_lib): 1135f83d6f36a7308eef21d87104fd70c421e854448Argyrios Kyrtzidis $(Verb) $(MKDIR) $@ 114fda7832b000ff8927386f093b52c067641679469Zhongxing Xu 1155f83d6f36a7308eef21d87104fd70c421e854448Argyrios Kyrtzidis# Expand rules for copying/installing each individual library. We can't use 116fda7832b000ff8927386f093b52c067641679469Zhongxing Xu# implicit rules here because we need to match against multiple things. 117fda7832b000ff8927386f093b52c067641679469Zhongxing Xudefine RuntimeLibraryTemplate 1181d9cbeb76cf4c36acf5545028e2b2ac207086442Ted Kremenek$(PROJ_OBJ_DIR)/clang_$1/%/libcompiler_rt.a: BuildRuntimeLibraries 119f6eafcca7734274d277afa121f2c4fb025a54218Ted Kremenek @true 1201d9cbeb76cf4c36acf5545028e2b2ac207086442Ted Kremenek.PRECIOUS: $(PROJ_OBJ_DIR)/clang_$1/%/libcompiler_rt.a 121c4a1437c15da43eb8d2601cdce13161ef41a4389Ted Kremenek 1221d9cbeb76cf4c36acf5545028e2b2ac207086442Ted Kremenek# Rule to copy the libraries to their resource directory location. 123f6eafcca7734274d277afa121f2c4fb025a54218Ted Kremenek$(ResourceLibDir)/$1/libclang_rt.%.a: \ 124fc576514d06c46a7cac49500169411d82f38d04bTed Kremenek $(PROJ_OBJ_DIR)/clang_$1/%/libcompiler_rt.a \ 125fc576514d06c46a7cac49500169411d82f38d04bTed Kremenek $(ResourceLibDir)/$1/.dir 126cb7b1e17b63967317ab5cc55682168cf0380519aDouglas Gregor $(Echo) Copying runtime library $1/$$* to build dir 127cb7b1e17b63967317ab5cc55682168cf0380519aDouglas Gregor $(Verb) cp $(PROJ_OBJ_DIR)/clang_$1/$$*/libcompiler_rt.a $$@ 128fc576514d06c46a7cac49500169411d82f38d04bTed KremenekRuntimeLibrary.$1: \ 129cb7b1e17b63967317ab5cc55682168cf0380519aDouglas Gregor $(RuntimeLibrary.$1.Configs:%=$(ResourceLibDir)/$1/libclang_rt.%.a) 130cb7b1e17b63967317ab5cc55682168cf0380519aDouglas Gregor.PHONY: RuntimeLibrary.$1 131cb7b1e17b63967317ab5cc55682168cf0380519aDouglas Gregor 132cb7b1e17b63967317ab5cc55682168cf0380519aDouglas Gregor$(PROJ_resources_lib)/$1: $(PROJ_resources_lib) 133cb7b1e17b63967317ab5cc55682168cf0380519aDouglas Gregor $(Verb) $(MKDIR) $$@ 134cb7b1e17b63967317ab5cc55682168cf0380519aDouglas Gregor 135cb7b1e17b63967317ab5cc55682168cf0380519aDouglas Gregor$(PROJ_resources_lib)/$1/libclang_rt.%.a: \ 136cb7b1e17b63967317ab5cc55682168cf0380519aDouglas Gregor $(ResourceLibDir)/$1/libclang_rt.%.a | $(PROJ_resources_lib)/$1 137cb7b1e17b63967317ab5cc55682168cf0380519aDouglas Gregor $(Echo) Installing compiler runtime library: $1/$$* 138cb7b1e17b63967317ab5cc55682168cf0380519aDouglas Gregor $(Verb) $(DataInstall) $$< $(PROJ_resources_lib)/$1 139cb7b1e17b63967317ab5cc55682168cf0380519aDouglas Gregor 140cb7b1e17b63967317ab5cc55682168cf0380519aDouglas Gregor# Rule to install runtime libraries. 14135fa76d0bb6fb8c86159a7506efd094a4fe376d2Ted KremenekRuntimeLibraryInstall.$1: \ 1421d9cbeb76cf4c36acf5545028e2b2ac207086442Ted Kremenek $(RuntimeLibrary.$1.Configs:%=$(PROJ_resources_lib)/$1/libclang_rt.%.a) 1431eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump.PHONY: RuntimeLibraryInstall.$1 1441d9cbeb76cf4c36acf5545028e2b2ac207086442Ted Kremenekendef 1451d9cbeb76cf4c36acf5545028e2b2ac207086442Ted Kremenek$(foreach lib,$(RuntimeDirs), $(eval $(call RuntimeLibraryTemplate,$(lib)))) 1462e471a3e476396be1ddca4ab8b9df721bcfc9437Argyrios Kyrtzidis 1472e471a3e476396be1ddca4ab8b9df721bcfc9437Argyrios Kyrtzidis# Hook into the standard Makefile rules. 1481d9cbeb76cf4c36acf5545028e2b2ac207086442Ted Kremenekall-local:: $(RuntimeDirs:%=RuntimeLibrary.%) 1491d9cbeb76cf4c36acf5545028e2b2ac207086442Ted Kremenekinstall-local:: $(RuntimeDirs:%=RuntimeLibraryInstall.%) 1501d9cbeb76cf4c36acf5545028e2b2ac207086442Ted Kremenekclean-local:: CleanRuntimeLibraries 15143dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis 152c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xuendif 1536362b893731ccf4480a96527db9e55e04b801503Zhongxing Xuendif 1541d9cbeb76cf4c36acf5545028e2b2ac207086442Ted Kremenekendif 1551d9cbeb76cf4c36acf5545028e2b2ac207086442Ted Kremenek