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