authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-02-03 12:34:20-05:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-02-03 12:34:20-05:00
log3be4b6434c0d96f8f6975c13c1a84f06a9857ed8
tree45650fe319d274154285b28906a98a9f2650109c
parente00eec1c299ccc721f4272a506321939be7094f1

add ability to set linker script


5 files changed, 17 insertions(+), 1 deletions(-)

src/all_types.hpp+1
......@@ -1223,6 +1223,7 @@ struct CodeGen {
12231223 Buf *mmacosx_version_min;
12241224 Buf *mios_version_min;
12251225 bool linker_rdynamic;
1226 const char *linker_script;
12261227
12271228 // The function definitions this module includes. There must be a corresponding
12281229 // fn_protos entry.
src/codegen.cpp+5
......@@ -225,6 +225,11 @@ void codegen_set_rdynamic(CodeGen *g, bool rdynamic) {
225225 g->linker_rdynamic = rdynamic;
226226}
227227
228void codegen_set_linker_script(CodeGen *g, const char *linker_script) {
229 g->linker_script = linker_script;
230}
231
232
228233static void render_const_val(CodeGen *g, ConstExprValue *const_val);
229234static void render_const_val_global(CodeGen *g, ConstExprValue *const_val, bool is_export);
230235
src/codegen.hpp+1
......@@ -43,6 +43,7 @@ void codegen_set_mlinker_version(CodeGen *g, Buf *darwin_linker_version);
4343void codegen_set_rdynamic(CodeGen *g, bool rdynamic);
4444void codegen_set_mmacosx_version_min(CodeGen *g, Buf *mmacosx_version_min);
4545void codegen_set_mios_version_min(CodeGen *g, Buf *mios_version_min);
46void codegen_set_linker_script(CodeGen *g, const char *linker_script);
4647
4748void codegen_add_root_code(CodeGen *g, Buf *source_dir, Buf *source_basename, Buf *source_code);
4849
src/link.cpp+5
......@@ -154,6 +154,11 @@ static void construct_linker_job_linux(LinkJob *lj) {
154154 find_libc_lib_path(g);
155155 }
156156
157 if (g->linker_script) {
158 lj->args.append("-T");
159 lj->args.append(g->linker_script);
160 }
161
157162 lj->args.append("--gc-sections");
158163
159164 lj->args.append("-m");
src/main.cpp+5-1
......@@ -56,6 +56,7 @@ static int usage(const char *arg0) {
5656 " -mios-version-min [ver] (darwin only) set iOS deployment target\n"
5757 " -framework [name] (darwin only) link against framework\n"
5858 " --check-unused perform semantic analysis on unused declarations\n"
59 " --linker-script [path] use a custom linker script\n"
5960 , arg0);
6061 return EXIT_FAILURE;
6162}
......@@ -140,6 +141,7 @@ int main(int argc, char **argv) {
140141 const char *mmacosx_version_min = nullptr;
141142 const char *mios_version_min = nullptr;
142143 bool check_unused = false;
144 const char *linker_script = nullptr;
143145
144146 for (int i = 1; i < argc; i += 1) {
145147 char *arg = argv[i];
......@@ -231,6 +233,8 @@ int main(int argc, char **argv) {
231233 mios_version_min = argv[i];
232234 } else if (strcmp(arg, "-framework") == 0) {
233235 frameworks.append(argv[i]);
236 } else if (strcmp(arg, "--linker-script") == 0) {
237 linker_script = argv[i];
234238 } else {
235239 fprintf(stderr, "Invalid argument: %s\n", arg);
236240 return usage(arg0);
......@@ -343,7 +347,7 @@ int main(int argc, char **argv) {
343347 CodeGen *g = codegen_create(&root_source_dir, target);
344348 codegen_set_is_release(g, is_release_build);
345349 codegen_set_is_test(g, cmd == CmdTest);
346
350 codegen_set_linker_script(g, linker_script);
347351 codegen_set_check_unused(g, check_unused);
348352
349353 codegen_set_clang_argv(g, clang_argv.items, clang_argv.length);