authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-09-18 21:28:06-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-09-18 21:28:06-04:00
log4c0259b107236b39f7b1e8f423d2bf9f48e89b54
tree84905cc38d0908fb28c43b9a18295db4e6cbc72c
parentb738cbdc768796b59b19a07a29a95892937d6f11

ability to specify -framework linker args for MacOS


5 files changed, 19 insertions(+), 0 deletions(-)

src/all_types.hpp+2
......@@ -1195,6 +1195,8 @@ struct CodeGen {
11951195 ZigLLVMDICompileUnit *compile_unit;
11961196
11971197 ZigList<Buf *> link_libs; // non-libc link libs
1198 // add -framework [name] args to linker
1199 ZigList<Buf *> darwin_frameworks;
11981200
11991201 // reminder: hash tables must be initialized before use
12001202 HashMap<Buf *, ImportTableEntry *, buf_hash, buf_eql_buf> import_table;
src/codegen.cpp+4
......@@ -193,6 +193,10 @@ void codegen_add_link_lib(CodeGen *g, const char *lib) {
193193 }
194194}
195195
196void codegen_add_framework(CodeGen *g, const char *framework) {
197 g->darwin_frameworks.append(buf_create_from_str(framework));
198}
199
196200void codegen_set_windows_subsystem(CodeGen *g, bool mwindows, bool mconsole) {
197201 g->windows_subsystem_windows = mwindows;
198202 g->windows_subsystem_console = mconsole;
src/codegen.hpp+1
......@@ -38,6 +38,7 @@ void codegen_set_windows_subsystem(CodeGen *g, bool mwindows, bool mconsole);
3838void codegen_set_windows_unicode(CodeGen *g, bool municode);
3939void codegen_add_lib_dir(CodeGen *codegen, const char *dir);
4040void codegen_add_link_lib(CodeGen *codegen, const char *lib);
41void codegen_add_framework(CodeGen *codegen, const char *name);
4142void codegen_set_mlinker_version(CodeGen *g, Buf *darwin_linker_version);
4243void codegen_set_rdynamic(CodeGen *g, bool rdynamic);
4344void codegen_set_mmacosx_version_min(CodeGen *g, Buf *mmacosx_version_min);
src/link.cpp+5
......@@ -671,6 +671,11 @@ static void construct_linker_job_darwin(LinkJob *lj) {
671671 zig_panic("TODO");
672672 }
673673
674 for (int i = 0; i < g->darwin_frameworks.length; i += 1) {
675 lj->args.append("-framework");
676 lj->args.append(buf_ptr(g->darwin_frameworks.at(i)));
677 }
678
674679}
675680
676681static void construct_linker_job(LinkJob *lj) {
src/main.cpp+7
......@@ -53,6 +53,7 @@ static int usage(const char *arg0) {
5353 " -rdynamic add all symbols to the dynamic symbol table\n"
5454 " -mmacosx-version-min [ver] (darwin only) set Mac OS X deployment target\n"
5555 " -mios-version-min [ver] (darwin only) set iOS deployment target\n"
56 " -framework [name] (darwin only) link against framework\n"
5657 " --check-unused perform semantic analysis on unused declarations\n"
5758 , arg0);
5859 return EXIT_FAILURE;
......@@ -125,6 +126,7 @@ int main(int argc, char **argv) {
125126 ZigList<const char *> clang_argv = {0};
126127 ZigList<const char *> lib_dirs = {0};
127128 ZigList<const char *> link_libs = {0};
129 ZigList<const char *> frameworks = {0};
128130 int err;
129131 const char *target_arch = nullptr;
130132 const char *target_os = nullptr;
......@@ -226,6 +228,8 @@ int main(int argc, char **argv) {
226228 mmacosx_version_min = argv[i];
227229 } else if (strcmp(arg, "-mios-version-min") == 0) {
228230 mios_version_min = argv[i];
231 } else if (strcmp(arg, "-framework") == 0) {
232 frameworks.append(argv[i]);
229233 } else {
230234 fprintf(stderr, "Invalid argument: %s\n", arg);
231235 return usage(arg0);
......@@ -377,6 +381,9 @@ int main(int argc, char **argv) {
377381 for (int i = 0; i < link_libs.length; i += 1) {
378382 codegen_add_link_lib(g, link_libs.at(i));
379383 }
384 for (int i = 0; i < frameworks.length; i += 1) {
385 codegen_add_framework(g, frameworks.at(i));
386 }
380387
381388 codegen_set_windows_subsystem(g, mwindows, mconsole);
382389 codegen_set_windows_unicode(g, municode);