builder.get_build_graph().add_installed_target(*shlib->get_import_library());
else
{
- const Pattern &pattern = architecture->get_shared_library_patterns().front();
- string link_name = pattern.apply(shlib->get_libname());
+ string link_name = architecture->create_filename<SharedLibrary>(shlib->get_libname());
if(link_name!=FS::basename(inst_tgt->get_path()))
inst_tgt->set_symlink(link_name);
}
if(!sysroot.empty())
argv.push_back("--sysroot="+sysroot.str());
+ FS::Path lib_dir = builder.get_prefix()/"lib";
+ if(binfo.rpath_mode==BuildInfo::ABSOLUTE)
+ argv.push_back("-Wl,-rpath,"+lib_dir.str());
+ else
+ {
+ if(binfo.rpath_mode==BuildInfo::RELATIVE)
+ argv.push_back("-Wl,-rpath,$ORIGIN/../lib");
+ argv.push_back("-Wl,-rpath-link,"+lib_dir.str());
+ }
+
for(BuildInfo::PathList::const_iterator i=binfo.libpath.begin(); i!=binfo.libpath.end(); ++i)
argv.push_back("-L"+i->str());
if(binfo.strip)
bool static_link_ok = (binfo.libmode<=BuildInfo::STATIC);
- if(architecture->get_system()=="windows" && architecture->get_cross_prefix().find("mingw")!=string::npos)
- argv.push_back("-lmingw32");
-
const Target::Dependencies &depends = target.get_dependencies();
for(Target::Dependencies::const_iterator i=depends.begin(); i!=depends.end(); ++i)
{
if(static_link_ok)
argv.push_back("-static");
- else if(architecture->get_system()=="windows")
- argv.push_back("-Wl,--enable-auto-import");
+ else
+ {
+ if(compiler_tag=="CXX")
+ {
+ BuildInfo::LibModeMap::const_iterator i = binfo.libmodes.find("stdc++");
+ if(i!=binfo.libmodes.end() && i->second<=BuildInfo::STATIC)
+ argv.push_back("-static-libstdc++");
+ }
+
+ if(architecture->get_system()=="windows")
+ argv.push_back("-Wl,--enable-auto-import");
+ }
return new ExternalTask(argv, work_dir);
}