Mercurial > projects > ldc
changeset 579:20c065c46b38
Basic support for runtime in shared library.
Needs to be built with runtime/build-sharedlibs.sh and activated manually by
providing -defaultlib=llvmdc-runtime-shared -defaultlib=tango-cc-tango-shared
-defaultlib=tango-gc-basic-shared on llvmdc call at the moment.
To support D shared libraries in non-D code, we need to remove the main() from
libllvmdc-runtime-shared.
author | Christian Kamm <kamm incasoftware de> |
---|---|
date | Fri, 05 Sep 2008 23:02:18 +0200 |
parents | 8caa9adce5ae |
children | 7824c21a58e3 |
files | .hgignore runtime/build-sharedlibs.sh runtime/build.sh runtime/internal/llvmdc.mak runtime/lib/common/tango/llvmdc.mak runtime/lib/gc/basic/llvmdc.mak runtime/lib/llvmdc-posix.mak |
diffstat | 7 files changed, 77 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgignore Thu Sep 04 20:58:25 2008 +0200 +++ b/.hgignore Fri Sep 05 23:02:18 2008 +0200 @@ -5,6 +5,7 @@ *.o *.s *.a +*.so *.orig obj/* tango @@ -19,6 +20,7 @@ dmd/impcnvtab.c tests/runminitest tests/findregressions +tests/makewebstatistics tests/mini/obj/* # Mac OS X
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/build-sharedlibs.sh Fri Sep 05 23:02:18 2008 +0200 @@ -0,0 +1,24 @@ +#!/bin/bash + +# I'm no good bash scripter ... + +# copy imports +mkdir -p ../tango/llvmdc +cp internal/llvmdc/bitmanip.d ../tango/llvmdc/bitmanip.di +cp internal/llvmdc/vararg.d ../tango/llvmdc/vararg.di +cp import/llvmdc/* ../tango/llvmdc + +# make the runtime +cp -R lib ../tango +cd ../tango/lib +make -f llvmdc-posix.mak clean +make -f llvmdc-posix.mak sharedlib +cd ../.. + +# install the runtime +rm -f lib/libllvmdc-runtime-shared.so +cp runtime/internal/libllvmdc-runtime-shared.so lib +rm -f lib/libtango-gc-basic-shared.so +cp tango/lib/gc/basic/libtango-gc-basic-shared.so lib +rm -f lib/libtango-cc-tango-shared.so +cp tango/lib/common/tango/libtango-cc-tango-shared.so lib
--- a/runtime/build.sh Thu Sep 04 20:58:25 2008 +0200 +++ b/runtime/build.sh Fri Sep 05 23:02:18 2008 +0200 @@ -12,7 +12,7 @@ cp -R lib ../tango cd ../tango/lib make -f llvmdc-posix.mak clean -make -f llvmdc-posix.mak +make -f llvmdc-posix.mak lib cd ../.. # install the runtime
--- a/runtime/internal/llvmdc.mak Thu Sep 04 20:58:25 2008 +0200 +++ b/runtime/internal/llvmdc.mak Fri Sep 05 23:02:18 2008 +0200 @@ -13,7 +13,8 @@ LIB_TARGET_FULL=libllvmdc-runtime.a LIB_TARGET_BC_ONLY=libllvmdc-runtime-bc-only.a LIB_TARGET_C_ONLY=libllvmdc-runtime-c-only.a -LIB_MASK=libllvmdc-runtime*.a +LIB_TARGET_SHARED=libllvmdc-runtime-shared.so +LIB_MASK=libllvmdc-runtime*.* CP=cp -f @@ -61,9 +62,10 @@ .d.html: $(DC) -c -o- $(DOCFLAGS) -Df$*.html llvmdc.ddoc $< -targets : lib doc -all : lib doc +targets : lib sharedlib doc +all : lib sharedlib doc lib : llvmdc.lib llvmdc.bclib llvmdc.clib +sharedlib : llvmdc.sharedlib doc : llvmdc.doc ###################################################### @@ -149,6 +151,7 @@ llvmdc.bclib : $(LIB_TARGET_BC_ONLY) llvmdc.clib : $(LIB_TARGET_C_ONLY) llvmdc.lib : $(LIB_TARGET_FULL) +llvmdc.sharedlib : $(LIB_TARGET_SHARED) $(LIB_TARGET_BC_ONLY) : $(ALL_OBJS) $(RM) $@ @@ -167,6 +170,15 @@ $(RM) $@ $(CLC) $@ $(OBJ_C) + +$(LIB_TARGET_SHARED) : $(ALL_OBJS) $(OBJ_C) + $(RM) $@ $@.bc $@.s $@.o + $(LLINK) -o=$@.bc $(ALL_OBJS) + $(LCC) -relocation-model=pic -o=$@.s $@.bc + $(CC) -c -o $@.o $@.s + $(CC) -shared -o $@ $@.o $(OBJ_C) + + llvmdc.doc : $(ALL_DOCS) echo No documentation available.
--- a/runtime/lib/common/tango/llvmdc.mak Thu Sep 04 20:58:25 2008 +0200 +++ b/runtime/lib/common/tango/llvmdc.mak Fri Sep 05 23:02:18 2008 +0200 @@ -13,7 +13,8 @@ LIB_TARGET_FULL=libtango-cc-tango.a LIB_TARGET_BC_ONLY=libtango-cc-tango-bc-only.a LIB_TARGET_C_ONLY=libtango-cc-tango-c-only.a -LIB_MASK=libtango-cc-tango*.a +LIB_TARGET_SHARED=libtango-cc-tango-shared.so +LIB_MASK=libtango-cc-tango*.* CP=cp -f RM=rm -f @@ -70,10 +71,11 @@ $(DC) -c -o- $(DOCFLAGS) -Df$*.html $< # $(DC) -c -o- $(DOCFLAGS) -Df$*.html tango.ddoc $< -targets : lib doc -all : lib doc +targets : lib sharedlib doc +all : lib sharedlib doc tango : lib lib : tango.lib tango.bclib tango.clib +sharedlib : tango.sharedlib doc : tango.doc ###################################################### @@ -115,6 +117,7 @@ tango.bclib : $(LIB_TARGET_BC_ONLY) tango.lib : $(LIB_TARGET_FULL) tango.clib : $(LIB_TARGET_C_ONLY) +tango.sharedlib : $(LIB_TARGET_SHARED) $(LIB_TARGET_BC_ONLY) : $(ALL_OBJS) $(RM) $@ @@ -134,6 +137,14 @@ $(CLC) $@ $(OBJ_STDC) +$(LIB_TARGET_SHARED) : $(ALL_OBJS) $(OBJ_STDC) + $(RM) $@ $@.bc $@.s $@.o + $(LLINK) -o=$@.bc $(ALL_OBJS) + $(LCC) -relocation-model=pic -o=$@.s $@.bc + $(CC) -c -o $@.o $@.s + $(CC) -shared -o $@ $@.o $(OBJ_STDC) + + tango.doc : $(ALL_DOCS) echo Documentation generated.
--- a/runtime/lib/gc/basic/llvmdc.mak Thu Sep 04 20:58:25 2008 +0200 +++ b/runtime/lib/gc/basic/llvmdc.mak Fri Sep 05 23:02:18 2008 +0200 @@ -12,7 +12,8 @@ LIB_TARGET_BC=libtango-gc-basic-bc.a LIB_TARGET_NATIVE=libtango-gc-basic.a -LIB_MASK=libtango-gc-basic*.a +LIB_TARGET_SHARED=libtango-gc-basic-shared.so +LIB_MASK=libtango-gc-basic*.* CP=cp -f RM=rm -f @@ -63,9 +64,10 @@ $(DC) -c -o- $(DOCFLAGS) -Df$*.html $< # $(DC) -c -o- $(DOCFLAGS) -Df$*.html dmd.ddoc $< -targets : lib doc -all : lib doc +targets : lib sharedlib doc +all : lib sharedlib doc lib : basic.lib basic.nlib +sharedlib : basic.sharedlib doc : basic.doc ###################################################### @@ -85,6 +87,7 @@ basic.lib : $(LIB_TARGET_BC) basic.nlib : $(LIB_TARGET_NATIVE) +basic.sharedlib : $(LIB_TARGET_SHARED) $(LIB_TARGET_BC) : $(ALL_OBJS) $(RM) $@ @@ -98,6 +101,13 @@ $(CC) -c -o $@.o $@.s $(CLC) $@ $@.o + +$(LIB_TARGET_SHARED) : $(ALL_OBJS) + $(RM) $@ $@.bc $@.s $@.o + $(LLINK) -o=$@.bc $(ALL_OBJS) + $(LCC) -relocation-model=pic -o=$@.s $@.bc + $(CC) -shared -o $@ $@.s + basic.doc : $(ALL_DOCS) echo No documentation available.
--- a/runtime/lib/llvmdc-posix.mak Thu Sep 04 20:58:25 2008 +0200 +++ b/runtime/lib/llvmdc-posix.mak Fri Sep 05 23:02:18 2008 +0200 @@ -37,8 +37,8 @@ #ADD_DFLAGS= ADD_DFLAGS=-I`pwd`/common/ -targets : lib doc -all : lib doc +targets : lib sharedlib doc +all : lib sharedlib doc ###################################################### @@ -56,6 +56,12 @@ make -C $(DIR_GC) -fllvmdc.mak lib DC=$(DC) ADD_DFLAGS="$(ADD_DFLAGS)" ADD_CFLAGS="$(ADD_CFLAGS)" # could link the three parts into one here, but why should we +sharedlib : $(ALL_OBJS) + make -C $(DIR_CC) -fllvmdc.mak sharedlib DC=$(DC) ADD_DFLAGS="$(ADD_DFLAGS)" ADD_CFLAGS="$(ADD_CFLAGS)" + make -C $(DIR_RT) -fllvmdc.mak sharedlib + make -C $(DIR_GC) -fllvmdc.mak sharedlib DC=$(DC) ADD_DFLAGS="$(ADD_DFLAGS)" ADD_CFLAGS="$(ADD_CFLAGS)" + # could link the three parts into one here, but why should we + doc : $(ALL_DOCS) make -C $(DIR_CC) -fllvmdc.mak doc make -C $(DIR_RT) -fllvmdc.mak doc