authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-09-02 11:32:22-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-09-02 11:48:06-04:00
log0fe28855c5a32b16dc092ab1d70efde38ef89a7b
tree2fa44bb189ada171ff0666bb77fd609da4e584b0
parent0c4d47c6d5a7d27ce54e8584da84613751df7dac
signaturelock-open Commit is signed but in an unrecognized format.

add ability to specify darwin framework search dirs


5 files changed, 30 insertions(+), 2 deletions(-)

src/all_types.hpp+1
......@@ -2003,6 +2003,7 @@ struct CodeGen {
20032003 ZigList<Buf *> assembly_files;
20042004 ZigList<CFile *> c_source_files;
20052005 ZigList<const char *> lib_dirs;
2006 ZigList<const char *> framework_dirs;
20062007
20072008 ZigLibCInstallation *libc;
20082009
src/codegen.cpp+1
......@@ -9803,6 +9803,7 @@ static Error check_cache(CodeGen *g, Buf *manifest_dir, Buf *digest) {
98039803 cache_list_of_str(ch, g->llvm_argv, g->llvm_argv_len);
98049804 cache_list_of_str(ch, g->clang_argv, g->clang_argv_len);
98059805 cache_list_of_str(ch, g->lib_dirs.items, g->lib_dirs.length);
9806 cache_list_of_str(ch, g->framework_dirs.items, g->framework_dirs.length);
98069807 if (g->libc) {
98079808 cache_buf(ch, &g->libc->include_dir);
98089809 cache_buf(ch, &g->libc->sys_include_dir);
src/link.cpp+6
......@@ -2510,6 +2510,12 @@ static void construct_linker_job_macho(LinkJob *lj) {
25102510 lj->args.append("dynamic_lookup");
25112511 }
25122512
2513 for (size_t i = 0; i < g->framework_dirs.length; i += 1) {
2514 const char *framework_dir = g->framework_dirs.at(i);
2515 lj->args.append("-F");
2516 lj->args.append(framework_dir);
2517 }
2518
25132519 for (size_t i = 0; i < g->darwin_frameworks.length; i += 1) {
25142520 lj->args.append("-framework");
25152521 lj->args.append(buf_ptr(g->darwin_frameworks.at(i)));
src/main.cpp+9
......@@ -104,6 +104,7 @@ static int print_full_usage(const char *arg0, FILE *file, int return_code) {
104104 " -rdynamic add all symbols to the dynamic symbol table\n"
105105 " -rpath [path] add directory to the runtime library search path\n"
106106 " --subsystem [subsystem] (windows) /SUBSYSTEM:<subsystem> to the linker\n"
107 " -F[dir] (darwin) add search path for frameworks\n"
107108 " -framework [name] (darwin) link against framework\n"
108109 " -mios-version-min [ver] (darwin) set iOS deployment target\n"
109110 " -mmacosx-version-min [ver] (darwin) set Mac OS X deployment target\n"
......@@ -454,6 +455,7 @@ int main(int argc, char **argv) {
454455 ZigList<const char *> lib_dirs = {0};
455456 ZigList<const char *> link_libs = {0};
456457 ZigList<const char *> forbidden_link_libs = {0};
458 ZigList<const char *> framework_dirs = {0};
457459 ZigList<const char *> frameworks = {0};
458460 bool have_libc = false;
459461 const char *target_string = nullptr;
......@@ -686,6 +688,8 @@ int main(int argc, char **argv) {
686688 } else if (arg[1] == 'L' && arg[2] != 0) {
687689 // alias for --library-path
688690 lib_dirs.append(&arg[2]);
691 } else if (arg[1] == 'F' && arg[2] != 0) {
692 framework_dirs.append(&arg[2]);
689693 } else if (strcmp(arg, "--pkg-begin") == 0) {
690694 if (i + 2 >= argc) {
691695 fprintf(stderr, "Expected 2 arguments after --pkg-begin\n");
......@@ -772,6 +776,8 @@ int main(int argc, char **argv) {
772776 main_pkg_path = buf_create_from_str(argv[i]);
773777 } else if (strcmp(arg, "--library-path") == 0 || strcmp(arg, "-L") == 0) {
774778 lib_dirs.append(argv[i]);
779 } else if (strcmp(arg, "-F") == 0) {
780 framework_dirs.append(argv[i]);
775781 } else if (strcmp(arg, "--library") == 0) {
776782 if (strcmp(argv[i], "c") == 0)
777783 have_libc = true;
......@@ -1153,6 +1159,9 @@ int main(int argc, char **argv) {
11531159 for (size_t i = 0; i < lib_dirs.length; i += 1) {
11541160 codegen_add_lib_dir(g, lib_dirs.at(i));
11551161 }
1162 for (size_t i = 0; i < framework_dirs.length; i += 1) {
1163 g->framework_dirs.append(framework_dirs.at(i));
1164 }
11561165 for (size_t i = 0; i < link_libs.length; i += 1) {
11571166 LinkLib *link_lib = codegen_add_link_lib(g, buf_create_from_str(link_libs.at(i)));
11581167 link_lib->provided_explicitly = true;
std/build.zig+13-2
......@@ -1228,6 +1228,7 @@ pub const LibExeObjStep = struct {
12281228 name_only_filename: []const u8,
12291229 strip: bool,
12301230 lib_paths: ArrayList([]const u8),
1231 framework_dirs: ArrayList([]const u8),
12311232 frameworks: BufSet,
12321233 verbose_link: bool,
12331234 verbose_cc: bool,
......@@ -1341,6 +1342,7 @@ pub const LibExeObjStep = struct {
13411342 .include_dirs = ArrayList(IncludeDir).init(builder.allocator),
13421343 .link_objects = ArrayList(LinkObject).init(builder.allocator),
13431344 .lib_paths = ArrayList([]const u8).init(builder.allocator),
1345 .framework_dirs = ArrayList([]const u8).init(builder.allocator),
13441346 .object_src = undefined,
13451347 .build_options_contents = std.Buffer.initSize(builder.allocator, 0) catch unreachable,
13461348 .c_std = Builder.CStd.C99,
......@@ -1614,6 +1616,10 @@ pub const LibExeObjStep = struct {
16141616 self.lib_paths.append(path) catch unreachable;
16151617 }
16161618
1619 pub fn addFrameworkDir(self: *LibExeObjStep, dir_path: []const u8) void {
1620 self.framework_dirs.append(dir_path) catch unreachable;
1621 }
1622
16171623 pub fn addPackagePath(self: *LibExeObjStep, name: []const u8, pkg_index_path: []const u8) void {
16181624 self.packages.append(Pkg{
16191625 .name = name,
......@@ -1860,8 +1866,8 @@ pub const LibExeObjStep = struct {
18601866 }
18611867
18621868 for (self.lib_paths.toSliceConst()) |lib_path| {
1863 zig_args.append("--library-path") catch unreachable;
1864 zig_args.append(lib_path) catch unreachable;
1869 try zig_args.append("-L");
1870 try zig_args.append(lib_path);
18651871 }
18661872
18671873 if (self.need_system_paths and self.target == Target.Native) {
......@@ -1882,6 +1888,11 @@ pub const LibExeObjStep = struct {
18821888 }
18831889
18841890 if (self.target.isDarwin()) {
1891 for (self.framework_dirs.toSliceConst()) |dir| {
1892 try zig_args.append("-F");
1893 try zig_args.append(dir);
1894 }
1895
18851896 var it = self.frameworks.iterator();
18861897 while (it.next()) |entry| {
18871898 zig_args.append("-framework") catch unreachable;