From e493be82bb9824a9bd1332cb7aeee1f3cf9e57d3 Mon Sep 17 00:00:00 2001 From: John Hodge Date: Sat, 11 Feb 2017 14:39:12 +0800 Subject: Trans - Allow passing library directories from command line --- src/trans/codegen_c.cpp | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) (limited to 'src/trans/codegen_c.cpp') diff --git a/src/trans/codegen_c.cpp b/src/trans/codegen_c.cpp index cbb3de1d..56607e8c 100644 --- a/src/trans/codegen_c.cpp +++ b/src/trans/codegen_c.cpp @@ -103,7 +103,7 @@ namespace { ~CodeGenerator_C() {} - void finalise(bool is_executable) override + void finalise(bool is_executable, const TransOptions& opt) override { // Emit box drop glue after everything else to avoid definition ordering issues for(auto& e : m_box_glue_todo) @@ -135,8 +135,20 @@ namespace { ::std::vector args; args.push_back( getenv("CC") ? getenv("CC") : "gcc" ); args.push_back("-pthread"); - args.push_back("-O2"); - args.push_back("-g"); + switch(opt.opt_level) + { + case 0: break; + case 1: + args.push_back("-O1"); + break; + case 2: + args.push_back("-O2"); + break; + } + if( opt.emit_debug_info ) + { + args.push_back("-g"); + } args.push_back("-o"); args.push_back(m_outfile_path.c_str()); args.push_back(m_outfile_path_c.c_str()); @@ -147,6 +159,10 @@ namespace { tmp.push_back(crate.second.m_filename + ".o"); args.push_back(tmp.back().c_str()); } + for(const auto& path : opt.library_search_dirs ) + { + args.push_back("-L"); args.push_back(path.c_str()); + } for(const auto& lib : m_crate.m_ext_libs) { ASSERT_BUG(Span(), lib.name != "", ""); args.push_back("-l"); args.push_back(lib.name.c_str()); @@ -158,6 +174,10 @@ namespace { args.push_back("-l"); args.push_back(lib.name.c_str()); } } + for(const auto& path : opt.libraries ) + { + args.push_back("-l"); args.push_back(path.c_str()); + } args.push_back("-z"); args.push_back("muldefs"); args.push_back("-Wl,--gc-sections"); } -- cgit v1.2.3