mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-01-08 14:22:53 +00:00
This patch enables ENABLE_SHARED=1 to build DLL based LLVM toolchain on MingW & Cygwin.
Patch by Takumi Nakamura! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111268 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -15,6 +15,17 @@ NO_BUILD_ARCHIVE = 1
|
||||
LINK_LIBS_IN_SHARED = 1
|
||||
SHARED_LIBRARY = 1
|
||||
|
||||
include $(LEVEL)/Makefile.config
|
||||
|
||||
ifeq ($(HOST_OS), $(filter $(HOST_OS), Cygwin MingW))
|
||||
EXPORTED_SYMBOL_FILE = $(ObjDir)/$(LIBRARYNAME).exports
|
||||
|
||||
# It is needed to force static-stdc++.a linked.
|
||||
# FIXME: It should be omitted when configure detects system's stdc++.dll.
|
||||
SHLIB_FRAG_NAMES += stdc++.a.o
|
||||
|
||||
endif
|
||||
|
||||
include $(LEVEL)/Makefile.common
|
||||
|
||||
# Include all archives in libLLVM.(so|dylib) except the ones that have
|
||||
@@ -57,3 +68,44 @@ ifeq ($(HOST_OS), Linux)
|
||||
# Don't allow unresolved symbols.
|
||||
LLVMLibsOptions += -Wl,--no-undefined
|
||||
endif
|
||||
|
||||
ifeq ($(HOST_OS), $(filter $(HOST_OS), Cygwin MingW))
|
||||
|
||||
SHLIB_STUBS := $(addprefix $(ObjDir)/, $(SHLIB_FRAG_NAMES))
|
||||
SHLIB_FRAGS := $(patsubst %.a.o, $(ObjDir)/%.syms.txt, $(LIBRARYNAME).a.o $(SHLIB_FRAG_NAMES))
|
||||
LLVMLibsOptions := $(SHLIB_STUBS) $(LLVMLibsOptions)
|
||||
|
||||
$(LibName.SO): $(SHLIB_STUBS)
|
||||
|
||||
%.syms.txt: %.a.o
|
||||
$(Echo) Collecting global symbols of $(notdir $*)
|
||||
$(Verb) $(NM_PATH) -g $< > $@
|
||||
|
||||
$(ObjDir)/$(LIBRARYNAME).exports: $(SHLIB_FRAGS) $(ObjDir)/.dir
|
||||
$(Echo) Generating exports for $(LIBRARYNAME)
|
||||
$(Verb) ($(SED) -n \
|
||||
-e "s/^.* T _\([^.][^.]*\)$$/\1/p" \
|
||||
-e "s/^.* [BDR] _\([^.][^.]*\)$$/\1 DATA/p" \
|
||||
$(SHLIB_FRAGS) \
|
||||
| sort -u) > $@
|
||||
|
||||
$(ObjDir)/$(LIBRARYNAME).a.o: $(LLVMLibsPaths) $(ObjDir)/.dir
|
||||
$(Echo) Linking all LLVMLibs together for $(LIBRARYNAME)
|
||||
$(Verb) $(Link) -nostartfiles -Wl,-r -nodefaultlibs -o $@ \
|
||||
-Wl,--whole-archive $(LLVMLibsPaths) \
|
||||
-Wl,--no-whole-archive
|
||||
|
||||
$(ObjDir)/stdc++.a.o: $(ObjDir)/.dir
|
||||
$(Echo) Linking all libs together for static libstdc++.a
|
||||
$(Verb) $(Link) -nostartfiles -Wl,-r -nodefaultlibs -o $@ \
|
||||
-Wl,--whole-archive -lstdc++ \
|
||||
-Wl,--no-whole-archive
|
||||
# FIXME: workaround to invalidate -lstdc++
|
||||
$(Echo) Making dummy -lstdc++ to lib
|
||||
$(Verb) $(AR) rc $(ToolDir)/libstdc++.dll.a
|
||||
# FIXME: Is install-local needed?
|
||||
|
||||
clean-local::
|
||||
$(Verb) $(RM) -f $(ToolDir)/libstdc++.dll.a
|
||||
|
||||
endif
|
||||
|
||||
Reference in New Issue
Block a user