1c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey Yasskin##===- tools/shlib/Makefile --------------------------------*- Makefile -*-===## 2c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey Yasskin# 3c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey Yasskin# The LLVM Compiler Infrastructure 4c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey Yasskin# 5c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey Yasskin# This file is distributed under the University of Illinois Open Source 6c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey Yasskin# License. See LICENSE.TXT for details. 7c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey Yasskin# 8c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey Yasskin##===----------------------------------------------------------------------===## 9c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey Yasskin 108c39c9647da4f375e4f89bd417d86f5c3ff6dfa5Daniel DunbarLEVEL := ../.. 11c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey Yasskin 12dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen HinesLIBRARYNAME = LLVM-$(LLVM_VERSION_MAJOR).$(LLVM_VERSION_MINOR)$(LLVM_VERSION_SUFFIX) 13dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen HinesLIBRARYALIASNAME = LLVM-$(LLVMVersion) 14c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey Yasskin 158c39c9647da4f375e4f89bd417d86f5c3ff6dfa5Daniel DunbarNO_BUILD_ARCHIVE := 1 168c39c9647da4f375e4f89bd417d86f5c3ff6dfa5Daniel DunbarLINK_LIBS_IN_SHARED := 1 178c39c9647da4f375e4f89bd417d86f5c3ff6dfa5Daniel DunbarSHARED_LIBRARY := 1 1836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen HinesSHARED_ALIAS := 1 19c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey Yasskin 2059a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikovinclude $(LEVEL)/Makefile.config 2159a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov 2259a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikovifeq ($(HOST_OS), $(filter $(HOST_OS), Cygwin MingW)) 238eac88621626e196db2cb76492dc60c71c7c7fbbNAKAMURA Takumi EXPORTED_SYMBOL_FILE = $(ObjDir)/$(LIBRARYNAME).exports 2459a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov 258eac88621626e196db2cb76492dc60c71c7c7fbbNAKAMURA Takumi ifeq (1,$(ENABLE_EMBED_STDCXX)) 2659a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov # It is needed to force static-stdc++.a linked. 2759a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov SHLIB_FRAG_NAMES += stdc++.a.o 288eac88621626e196db2cb76492dc60c71c7c7fbbNAKAMURA Takumi endif 2959a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov 3059a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikovendif 3159a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov 32c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey Yasskininclude $(LEVEL)/Makefile.common 33c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey Yasskin 34c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey Yasskin# Include all archives in libLLVM.(so|dylib) except the ones that have 35e97552e8509992f85607a669913de883592a4181Peter Collingbourne# their own dynamic libraries and TableGen. 36c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey YasskinArchives := $(wildcard $(LibDir)/libLLVM*.a) 37c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey YasskinSharedLibraries := $(wildcard $(LibDir)/libLLVM*$(SHLIBEXT)) 38e97552e8509992f85607a669913de883592a4181Peter CollingbourneExcludeFromLibLlvm := $(basename $(SharedLibraries)).a %/libLLVMTableGen.a 39e97552e8509992f85607a669913de883592a4181Peter CollingbourneIncludeInLibLlvm := $(filter-out $(ExcludeFromLibLlvm), $(Archives)) 40c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey YasskinLLVMLibsOptions := $(IncludeInLibLlvm:$(LibDir)/lib%.a=-l%) 41c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey YasskinLLVMLibsPaths := $(IncludeInLibLlvm) 42c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey Yasskin 43c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey Yasskin$(LibName.SO): $(LLVMLibsPaths) 44c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey Yasskin 45c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey Yasskinifeq ($(HOST_OS),Darwin) 46c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey Yasskin # set dylib internal version number to llvmCore submission number 47c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey Yasskin ifdef LLVM_SUBMIT_VERSION 48c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey Yasskin LLVMLibsOptions := $(LLVMLibsOptions) -Wl,-current_version \ 49c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey Yasskin -Wl,$(LLVM_SUBMIT_VERSION).$(LLVM_SUBMIT_SUBVERSION) \ 50c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey Yasskin -Wl,-compatibility_version -Wl,1 51c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey Yasskin endif 52c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey Yasskin # Include everything from the .a's into the shared library. 53c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey Yasskin LLVMLibsOptions := $(LLVMLibsOptions) -all_load 54c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey Yasskinendif 55c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey Yasskin 5690f9b8a7bcd02b154a0c068c0589171b43ffba8dRafael Espindolaifeq ($(HOST_OS), $(filter $(HOST_OS), DragonFly Linux FreeBSD GNU/kFreeBSD OpenBSD GNU Bitrig)) 57c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey Yasskin # Include everything from the .a's into the shared library. 58c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey Yasskin LLVMLibsOptions := -Wl,--whole-archive $(LLVMLibsOptions) \ 59c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey Yasskin -Wl,--no-whole-archive 60fa1059fd9c134e2475a693a02289d15ebd47f66eChris Lattnerendif 61fa1059fd9c134e2475a693a02289d15ebd47f66eChris Lattner 6290f9b8a7bcd02b154a0c068c0589171b43ffba8dRafael Espindolaifeq ($(HOST_OS), $(filter $(HOST_OS), DragonFly Linux FreeBSD GNU/kFreeBSD GNU)) 631895fc90e01c9c3f48f40d99da6ead5ee09bcea4Anton Korobeynikov # Add soname to the library. 641895fc90e01c9c3f48f40d99da6ead5ee09bcea4Anton Korobeynikov LLVMLibsOptions += -Wl,--soname,lib$(LIBRARYNAME)$(SHLIBEXT) 651c48377421e2c266244fbc6275e897dc66e22bdaNAKAMURA Takumiendif 661c48377421e2c266244fbc6275e897dc66e22bdaNAKAMURA Takumi 67ba62f2f1bf267e0437d8ea62474632f2f1eae34dSylvestre Ledruifeq ($(HOST_OS), $(filter $(HOST_OS), Linux GNU GNU/kFreeBSD)) 68c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey Yasskin # Don't allow unresolved symbols. 69c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey Yasskin LLVMLibsOptions += -Wl,--no-undefined 70c90171961d020d93e4ce548016d8ccb8aab00c57Jeffrey Yasskinendif 7159a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov 72c55f58b1a6a3ed0c386353a88b2b04681407adbeChris Lattnerifeq ($(HOST_OS),SunOS) 73c55f58b1a6a3ed0c386353a88b2b04681407adbeChris Lattner # add -z allextract ahead of other libraries on Solaris 74c55f58b1a6a3ed0c386353a88b2b04681407adbeChris Lattner LLVMLibsOptions := -Wl,-z -Wl,allextract $(LLVMLibsOptions) 75c55f58b1a6a3ed0c386353a88b2b04681407adbeChris Lattnerendif 76c55f58b1a6a3ed0c386353a88b2b04681407adbeChris Lattner 7759a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikovifeq ($(HOST_OS), $(filter $(HOST_OS), Cygwin MingW)) 7859a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov 7959a430f68f962464f0564b51741e2aea148c617cAnton KorobeynikovSHLIB_STUBS := $(addprefix $(ObjDir)/, $(SHLIB_FRAG_NAMES)) 8059a430f68f962464f0564b51741e2aea148c617cAnton KorobeynikovSHLIB_FRAGS := $(patsubst %.a.o, $(ObjDir)/%.syms.txt, $(LIBRARYNAME).a.o $(SHLIB_FRAG_NAMES)) 8159a430f68f962464f0564b51741e2aea148c617cAnton KorobeynikovLLVMLibsOptions := $(SHLIB_STUBS) $(LLVMLibsOptions) 8259a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov 8359a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov$(LibName.SO): $(SHLIB_STUBS) 8459a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov 8559a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov%.syms.txt: %.a.o 8659a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov $(Echo) Collecting global symbols of $(notdir $*) 8759a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov $(Verb) $(NM_PATH) -g $< > $@ 8859a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov 8959a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov$(ObjDir)/$(LIBRARYNAME).exports: $(SHLIB_FRAGS) $(ObjDir)/.dir 9059a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov $(Echo) Generating exports for $(LIBRARYNAME) 9159a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov $(Verb) ($(SED) -n \ 9259a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov -e "s/^.* T _\([^.][^.]*\)$$/\1/p" \ 9359a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov -e "s/^.* [BDR] _\([^.][^.]*\)$$/\1 DATA/p" \ 9459a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov $(SHLIB_FRAGS) \ 9559a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov | sort -u) > $@ 9659a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov 9759a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov$(ObjDir)/$(LIBRARYNAME).a.o: $(LLVMLibsPaths) $(ObjDir)/.dir 9859a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov $(Echo) Linking all LLVMLibs together for $(LIBRARYNAME) 9959a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov $(Verb) $(Link) -nostartfiles -Wl,-r -nodefaultlibs -o $@ \ 10059a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov -Wl,--whole-archive $(LLVMLibsPaths) \ 10159a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov -Wl,--no-whole-archive 10259a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov 10359a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov$(ObjDir)/stdc++.a.o: $(ObjDir)/.dir 10459a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov $(Echo) Linking all libs together for static libstdc++.a 10559a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov $(Verb) $(Link) -nostartfiles -Wl,-r -nodefaultlibs -o $@ \ 10659a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov -Wl,--whole-archive -lstdc++ \ 10759a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov -Wl,--no-whole-archive 10859a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov# FIXME: workaround to invalidate -lstdc++ 10959a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov $(Echo) Making dummy -lstdc++ to lib 11059a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov $(Verb) $(AR) rc $(ToolDir)/libstdc++.dll.a 11159a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov# FIXME: Is install-local needed? 11259a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov 11359a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikovclean-local:: 11459a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov $(Verb) $(RM) -f $(ToolDir)/libstdc++.dll.a 11559a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikov 11659a430f68f962464f0564b51741e2aea148c617cAnton Korobeynikovendif 117