X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=plugins%2Fmsvc%2Fmsvclinker.cpp;h=8f0ac94e11dbe0e8464b8cef171b07d9111bd5fe;hb=ccc68e3d1097f5e4f9fc17e84901986a77aa6cb2;hp=ca77a28edddfb14d6920f910fd85d57f5bb89c0e;hpb=1a4337301632aa31dbc028d1c4260b5ff3052570;p=builder.git diff --git a/plugins/msvc/msvclinker.cpp b/plugins/msvc/msvclinker.cpp index ca77a28..8f0ac94 100644 --- a/plugins/msvc/msvclinker.cpp +++ b/plugins/msvc/msvclinker.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include #include #include @@ -33,6 +34,20 @@ Target *MsvcLinker::create_target(const vector &sources, const string if(sources.empty()) throw invalid_argument("MsvcLinker::create_target"); + if(arg=="import") + { + if(sources.size()!=1) + throw invalid_argument("MsvcLinker::create_target"); + SharedLibrary &shlib = dynamic_cast(*sources.front()); + + ImportLibrary *imp = new ImportLibrary(builder, *shlib.get_component(), shlib); + for(ObjectFile *o: shlib.get_objects()) + imp->add_dependency(*o); + shlib.add_side_effect(*imp); + + return imp; + } + vector objs; objs.reserve(sources.size()); for(Target *s: sources) @@ -110,7 +125,12 @@ ExternalTask::Arguments MsvcLinker::_run(const Binary &bin, FS::Path &work_dir) if(binfo.strip) argv.push_back("/INCREMENTAL:NO"); else + { argv.push_back("/DEBUG:FULL"); + FS::Path temp_dir = bin.get_package()->get_temp_directory()/bin.get_component()->get_name(); + FS::Path ilk_path = temp_dir/(FS::basepart(FS::basename(bin.get_path()))+".ilk"); + argv.push_back("/ILK:"+relative(ilk_path, work_dir).str()); + } argv.push_back("/OUT:"+relative(bin.get_path(), work_dir).str()); if(!imp_fn.empty()) @@ -118,6 +138,8 @@ ExternalTask::Arguments MsvcLinker::_run(const Binary &bin, FS::Path &work_dir) else argv.push_back("/NOIMPLIB"); + argv.push_back("/NOEXP"); + for(Target *d: bin.get_dependencies()) { FileTarget *file = dynamic_cast(d);