diff --git a/.hgignore b/.hgignore index 1addeede..e81a5a1c 100644 --- a/.hgignore +++ b/.hgignore @@ -5,6 +5,7 @@ tests/reference *.o *.s *.a +*.so *.orig obj/* tango @@ -19,6 +20,7 @@ llvmdc.make dmd/impcnvtab.c tests/runminitest tests/findregressions +tests/makewebstatistics tests/mini/obj/* # Mac OS X diff --git a/runtime/build-sharedlibs.sh b/runtime/build-sharedlibs.sh new file mode 100755 index 00000000..e1ee426c --- /dev/null +++ b/runtime/build-sharedlibs.sh @@ -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 diff --git a/runtime/build.sh b/runtime/build.sh index 4e8e281f..25ec41d2 100755 --- a/runtime/build.sh +++ b/runtime/build.sh @@ -12,7 +12,7 @@ cp import/llvmdc/* ../tango/llvmdc 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 diff --git a/runtime/internal/llvmdc.mak b/runtime/internal/llvmdc.mak index 148943f6..ba0b0c0b 100644 --- a/runtime/internal/llvmdc.mak +++ b/runtime/internal/llvmdc.mak @@ -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 @@ LIB_DEST=.. .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 @@ ALL_DOCS= 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 @@ $(LIB_TARGET_C_ONLY) : $(OBJ_C) $(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. diff --git a/runtime/lib/common/tango/llvmdc.mak b/runtime/lib/common/tango/llvmdc.mak index b4107f94..4d03900e 100644 --- a/runtime/lib/common/tango/llvmdc.mak +++ b/runtime/lib/common/tango/llvmdc.mak @@ -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 @@ DOC_DEST=../../../doc/tango $(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 @@ ALL_DOCS= 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 @@ $(LIB_TARGET_C_ONLY) : $(OBJ_STDC) $(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. diff --git a/runtime/lib/gc/basic/llvmdc.mak b/runtime/lib/gc/basic/llvmdc.mak index dfc8eb84..24d6d28d 100644 --- a/runtime/lib/gc/basic/llvmdc.mak +++ b/runtime/lib/gc/basic/llvmdc.mak @@ -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 @@ LIB_DEST=.. $(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 @@ ALL_DOCS= 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 @@ $(LIB_TARGET_NATIVE) : $(ALL_OBJS) $(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. diff --git a/runtime/lib/llvmdc-posix.mak b/runtime/lib/llvmdc-posix.mak index 99dee3a6..2ecd9fcf 100644 --- a/runtime/lib/llvmdc-posix.mak +++ b/runtime/lib/llvmdc-posix.mak @@ -37,8 +37,8 @@ ADD_CFLAGS= #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 @@ lib : $(ALL_OBJS) 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