# HG changeset patch # User ChristianK # Date 1215711514 -7200 # Node ID 3c8c58c24aa84d07b38c4be12690b938f186d7b1 # Parent c542d12017e50b284800b220a543e472587fcfbe [svn r346] Fixed #55 - llvmdc can link as fast as dmd now! Made runtime to compile to native by default. Changed linker.cpp to link in native runtime library. This change requires a runtime rebuild as well as a new symbolic link in lib/ to tango/lib/libtango-base-llvmdc-native.a. diff -r c542d12017e5 -r 3c8c58c24aa8 gen/linker.cpp --- a/gen/linker.cpp Thu Jul 10 00:13:09 2008 +0200 +++ b/gen/linker.cpp Thu Jul 10 19:38:34 2008 +0200 @@ -150,7 +150,6 @@ } // default libs - args.push_back("-ltango-base-c-llvmdc"); args.push_back("-lpthread"); args.push_back("-ldl"); args.push_back("-lm"); @@ -167,7 +166,7 @@ std::string runtime_path(global.params.runtimePath); if (*runtime_path.rbegin() != '/') runtime_path.append("/"); - runtime_path.append("libtango-base-llvmdc.a"); + runtime_path.append("libtango-base-llvmdc-native.a"); args.push_back(runtime_path.c_str()); // print link command? diff -r c542d12017e5 -r 3c8c58c24aa8 tango/lib/llvmdc-posix.mak --- a/tango/lib/llvmdc-posix.mak Thu Jul 10 00:13:09 2008 +0200 +++ b/tango/lib/llvmdc-posix.mak Thu Jul 10 19:38:34 2008 +0200 @@ -14,6 +14,8 @@ LIB_MASK=libtango-base-llvmdc*.a LIB_TARGET_C=libtango-base-c-llvmdc.a LIB_MASK_C=libtango-base-c-llvmdc*.a +LIB_NAME_NATIVE=libtango-base-llvmdc-native +LIB_TARGET_NATIVE=$(LIB_NAME_NATIVE).a DIR_CC=./common/tango DIR_RT=./compiler/llvmdc @@ -28,12 +30,14 @@ LC=llvm-ar rsv CLC=ar rsv DC=llvmdc +LLVMLINK=llvm-link +LLC=llc ADD_CFLAGS= ADD_DFLAGS= -targets : lib doc -all : lib doc +targets : nativelib doc +all : nativelib lib doc ###################################################### @@ -56,6 +60,23 @@ $(CLC) $(LIB_TARGET_C) `find $(DIR_CC) -name "*.o" | xargs echo` $(CLC) $(LIB_TARGET_C) `find $(DIR_RT) -name "*.o" | xargs echo` +nativelib: $(ALL_OBJS) + make -C $(DIR_CC) -fllvmdc.mak lib DC=$(DC) ADD_DFLAGS="$(ADD_DFLAGS)" ADD_CFLAGS="$(ADD_CFLAGS)" + make -C $(DIR_RT) -fllvmdc.mak lib + make -C $(DIR_GC) -fllvmdc.mak lib DC=$(DC) ADD_DFLAGS="$(ADD_DFLAGS)" ADD_CFLAGS="$(ADD_CFLAGS)" + + $(RM) $(LIB_NAME_NATIVE)* + + # first link all bcs together to a single bitcode file + $(LLVMLINK) -o=$(LIB_NAME_NATIVE)-llvm.bc `find $(DIR_CC) $(DIR_RT) $(DIR_GC) -name "*.bc"` + # then compile to assembler + $(LLC) -o=$(LIB_NAME_NATIVE)-llvm.s $(LIB_NAME_NATIVE)-llvm.bc + # assemble native code + $(CC) -c -o $(LIB_NAME_NATIVE)-llvm.o $(LIB_NAME_NATIVE)-llvm.s + # make an archive containing it and the other native object files + $(CLC) $(LIB_TARGET_NATIVE) $(LIB_NAME_NATIVE)-llvm.o `find $(DIR_CC) $(DIR_RT) -name "*.o"` + + doc : $(ALL_DOCS) make -C $(DIR_CC) -fllvmdc.mak doc make -C $(DIR_RT) -fllvmdc.mak doc @@ -72,6 +93,7 @@ make -C $(DIR_GC) -fllvmdc.mak clean $(RM) $(LIB_MASK) $(RM) $(LIB_MASK_C) + $(RM) $(LIB_NAME_NATIVE)* install : make -C $(DIR_CC) -fllvmdc.mak install