X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fgnulinker.cpp;h=43fb373bf6f90236089d1bf4dd5997f79b5d218a;hb=632361796a7ddadf8a726526c937fab22281fb7b;hp=c59251efabe9dc8a1baa4caba18d36a08938c971;hpb=0b16c3de0f9dc01bd8a9708008f9435fe0252df1;p=builder.git diff --git a/source/gnulinker.cpp b/source/gnulinker.cpp index c59251e..43fb373 100644 --- a/source/gnulinker.cpp +++ b/source/gnulinker.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include "builder.h" #include "component.h" #include "executable.h" @@ -65,11 +66,12 @@ Task *GnuLinker::run(const Target &target) const vector argv; argv.push_back(command); - const Component &comp = bin.get_component(); + const Component &comp = *bin.get_component(); if(shlib) { argv.push_back("-shared"); + argv.push_back("-fPIC"); if(!shlib->get_soname().empty()) argv.push_back("-Wl,-soname,"+shlib->get_soname()); } @@ -77,10 +79,17 @@ Task *GnuLinker::run(const Target &target) const argv.push_back("-static"); const BuildInfo &binfo = comp.get_build_info(); - for(list::const_iterator i=binfo.ldflags.begin(); i!=binfo.ldflags.end(); ++i) - argv.push_back(*i); for(list::const_iterator i=binfo.libpath.begin(); i!=binfo.libpath.end(); ++i) argv.push_back("-L"+*i); + if(binfo.strip) + argv.push_back("-s"); + if(binfo.threads) + argv.push_back("-pthread"); + + const Architecture &arch = builder.get_current_arch(); + const Architecture &native_arch = builder.get_native_arch(); + if(arch.get_bits()!=native_arch.get_bits()) + argv.push_back(format("-m%d", arch.get_bits())); FS::Path work_dir = comp.get_package().get_source();