diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/hir/deserialise.cpp | 1 | ||||
-rw-r--r-- | src/hir/hir.hpp | 1 | ||||
-rw-r--r-- | src/hir/serialise.cpp | 1 | ||||
-rw-r--r-- | src/main.cpp | 3 | ||||
-rw-r--r-- | src/trans/codegen_c.cpp | 11 |
5 files changed, 16 insertions, 1 deletions
diff --git a/src/hir/deserialise.cpp b/src/hir/deserialise.cpp index 1953828b..5bc83395 100644 --- a/src/hir/deserialise.cpp +++ b/src/hir/deserialise.cpp @@ -1152,6 +1152,7 @@ namespace { } rv.m_ext_libs = deserialise_vec< ::HIR::ExternLibrary>(); + rv.m_link_paths = deserialise_vec< ::std::string>(); return rv; } diff --git a/src/hir/hir.hpp b/src/hir/hir.hpp index b3322352..a1cc7c16 100644 --- a/src/hir/hir.hpp +++ b/src/hir/hir.hpp @@ -463,6 +463,7 @@ public: ::std::unordered_map< ::std::string, ExternCrate> m_ext_crates; ::std::vector<ExternLibrary> m_ext_libs; + ::std::vector<::std::string> m_link_paths; /// Method called to populate runtime state after deserialisation /// See hir/crate_post_load.cpp diff --git a/src/hir/serialise.cpp b/src/hir/serialise.cpp index d26e9a7c..f50aa5c1 100644 --- a/src/hir/serialise.cpp +++ b/src/hir/serialise.cpp @@ -263,6 +263,7 @@ namespace { for(const auto& ext : crate.m_ext_crates) m_out.write_string(ext.first); serialise_vec(crate.m_ext_libs); + serialise_vec(crate.m_link_paths); } void serialise(const ::HIR::ExternLibrary& lib) { diff --git a/src/main.cpp b/src/main.cpp index 2a5744c2..67a50421 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -501,7 +501,8 @@ int main(int argc, char *argv[]) TransOptions trans_opt; trans_opt.opt_level = params.opt_level; for(const char* libdir : params.lib_search_dirs ) { - trans_opt.library_search_dirs.push_back( libdir ); + // TODO: Store these paths for use in final linking. + hir_crate->m_link_paths.push_back( libdir ); } for(const char* libname : params.libraries ) { //trans_opt.libraries.push_back( libname ); diff --git a/src/trans/codegen_c.cpp b/src/trans/codegen_c.cpp index b7c3806a..c57c4d5a 100644 --- a/src/trans/codegen_c.cpp +++ b/src/trans/codegen_c.cpp @@ -480,6 +480,9 @@ namespace { } for( const auto& crate : m_crate.m_ext_crates ) { + for(const auto& path : crate.second.m_data->m_link_paths ) { + args.push_back("-L"); args.push_back(path.c_str()); + } for(const auto& lib : crate.second.m_data->m_ext_libs) { ASSERT_BUG(Span(), lib.name != "", "Empty lib from " << crate.first); args.push_back("-l"); args.push_back(lib.name.c_str()); @@ -4213,7 +4216,11 @@ namespace { if( ' ' <= v && v < 0x7F && v != '"' && v != '\\' ) m_of << v; else + { m_of << "\\" << ((unsigned int)v & 0xFF); + if( isdigit( *(&v+1) ) ) + m_of << "\"\""; + } } m_of << "\"" << ::std::dec; ), @@ -4223,7 +4230,11 @@ namespace { if( ' ' <= v && v < 0x7F && v != '"' && v != '\\' ) m_of << v; else + { m_of << "\\" << ((unsigned int)v & 0xFF); + if( isdigit( *(&v+1) ) ) + m_of << "\"\""; + } } m_of << "\", " << ::std::dec << c.size() << ")"; ), |