Skip to content

Commit

Permalink
fix implementation of --zig-std-dir
Browse files Browse the repository at this point in the history
see #463
  • Loading branch information
andrewrk committed Oct 1, 2017
1 parent 0227bec commit 0975e37
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 23 deletions.
14 changes: 5 additions & 9 deletions src/codegen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,11 +55,14 @@ static PackageTableEntry *new_package(const char *root_src_dir, const char *root
return entry;
}

CodeGen *codegen_create(Buf *root_src_path, const ZigTarget *target, OutType out_type, BuildMode build_mode) {
CodeGen *codegen_create(Buf *root_src_path, const ZigTarget *target, OutType out_type, BuildMode build_mode,
Buf *zig_std_dir)
{
CodeGen *g = allocate<CodeGen>(1);

codegen_add_time_event(g, "Initialize");

g->zig_std_dir = zig_std_dir;
g->build_mode = build_mode;
g->out_type = out_type;
g->import_table.init(32);
Expand Down Expand Up @@ -87,12 +90,11 @@ CodeGen *codegen_create(Buf *root_src_path, const ZigTarget *target, OutType out
os_path_split(root_src_path, src_dir, src_basename);

g->root_package = new_package(buf_ptr(src_dir), buf_ptr(src_basename));
g->std_package = new_package(ZIG_STD_DIR, "index.zig");
g->std_package = new_package(buf_ptr(g->zig_std_dir), "index.zig");
g->root_package->package_table.put(buf_create_from_str("std"), g->std_package);
} else {
g->root_package = new_package(".", "");
}
g->zig_std_dir = buf_create_from_str(ZIG_STD_DIR);

g->zig_std_special_dir = buf_alloc();
os_path_join(g->zig_std_dir, buf_sprintf("special"), g->zig_std_special_dir);
Expand Down Expand Up @@ -215,12 +217,6 @@ void codegen_set_libc_include_dir(CodeGen *g, Buf *libc_include_dir) {
g->libc_include_dir = libc_include_dir;
}

void codegen_set_zig_std_dir(CodeGen *g, Buf *zig_std_dir) {
g->zig_std_dir = zig_std_dir;

g->std_package->root_src_dir = *zig_std_dir;
}

void codegen_set_dynamic_linker(CodeGen *g, Buf *dynamic_linker) {
g->dynamic_linker = dynamic_linker;
}
Expand Down
4 changes: 2 additions & 2 deletions src/codegen.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@

#include <stdio.h>

CodeGen *codegen_create(Buf *root_src_path, const ZigTarget *target, OutType out_type, BuildMode build_mode);
CodeGen *codegen_create(Buf *root_src_path, const ZigTarget *target, OutType out_type, BuildMode build_mode,
Buf *zig_std_dir);

void codegen_set_clang_argv(CodeGen *codegen, const char **args, size_t len);
void codegen_set_llvm_argv(CodeGen *codegen, const char **args, size_t len);
Expand All @@ -29,7 +30,6 @@ void codegen_set_out_name(CodeGen *codegen, Buf *out_name);
void codegen_set_libc_lib_dir(CodeGen *codegen, Buf *libc_lib_dir);
void codegen_set_libc_static_lib_dir(CodeGen *g, Buf *libc_static_lib_dir);
void codegen_set_libc_include_dir(CodeGen *codegen, Buf *libc_include_dir);
void codegen_set_zig_std_dir(CodeGen *codegen, Buf *zig_std_dir);
void codegen_set_dynamic_linker(CodeGen *g, Buf *dynamic_linker);
void codegen_set_windows_subsystem(CodeGen *g, bool mwindows, bool mconsole);
void codegen_set_windows_unicode(CodeGen *g, bool municode);
Expand Down
3 changes: 2 additions & 1 deletion src/link.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@ static const char *get_libc_static_file(CodeGen *g, const char *file) {

static Buf *build_o_raw(CodeGen *parent_gen, const char *oname, Buf *full_path) {
ZigTarget *child_target = parent_gen->is_native_target ? nullptr : &parent_gen->zig_target;
CodeGen *child_gen = codegen_create(full_path, child_target, OutTypeObj, parent_gen->build_mode);
CodeGen *child_gen = codegen_create(full_path, child_target, OutTypeObj, parent_gen->build_mode,
parent_gen->zig_std_dir);

child_gen->want_h_file = false;
child_gen->verbose_link = parent_gen->verbose_link;
Expand Down
35 changes: 24 additions & 11 deletions src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -232,13 +232,6 @@ int main(int argc, char **argv) {

init_all_targets();

Buf *zig_std_dir = buf_create_from_str(ZIG_STD_DIR);
Buf *special_dir = buf_alloc();
os_path_join(zig_std_dir, buf_sprintf("special"), special_dir);

Buf *build_runner_path = buf_alloc();
os_path_join(special_dir, buf_create_from_str("build_runner.zig"), build_runner_path);

ZigList<const char *> args = {0};
args.append(zig_exe_path);
args.append(NULL); // placeholder
Expand All @@ -255,12 +248,29 @@ int main(int argc, char **argv) {
} else if (i + 1 < argc && strcmp(argv[i], "--cache-dir") == 0) {
cache_dir = argv[i + 1];
i += 1;
} else if (i + 1 < argc && strcmp(argv[i], "--zig-std-dir") == 0) {
args.append(argv[i]);
i += 1;
zig_std_dir = argv[i];
args.append(zig_std_dir);
} else {
args.append(argv[i]);
}
}

CodeGen *g = codegen_create(build_runner_path, nullptr, OutTypeExe, BuildModeDebug);
if (zig_std_dir == nullptr) {
zig_std_dir = ZIG_STD_DIR;
}
Buf *zig_std_dir_buf = buf_create_from_str(zig_std_dir);

Buf *special_dir = buf_alloc();
os_path_join(zig_std_dir_buf, buf_sprintf("special"), special_dir);

Buf *build_runner_path = buf_alloc();
os_path_join(special_dir, buf_create_from_str("build_runner.zig"), build_runner_path);


CodeGen *g = codegen_create(build_runner_path, nullptr, OutTypeExe, BuildModeDebug, zig_std_dir_buf);
codegen_set_out_name(g, buf_create_from_str("build"));
codegen_set_verbose(g, verbose);

Expand Down Expand Up @@ -609,7 +619,12 @@ int main(int argc, char **argv) {
buf_create_from_str((cache_dir == nullptr) ? default_zig_cache_name : cache_dir),
full_cache_dir);

CodeGen *g = codegen_create(zig_root_source_file, target, out_type, build_mode);
if (zig_std_dir == nullptr) {
zig_std_dir = ZIG_STD_DIR;
}

CodeGen *g = codegen_create(zig_root_source_file, target, out_type, build_mode,
buf_create_from_str(zig_std_dir));
codegen_set_out_name(g, buf_out_name);
codegen_set_lib_version(g, ver_major, ver_minor, ver_patch);
codegen_set_is_test(g, cmd == CmdTest);
Expand All @@ -628,8 +643,6 @@ int main(int argc, char **argv) {
codegen_set_libc_static_lib_dir(g, buf_create_from_str(libc_static_lib_dir));
if (libc_include_dir)
codegen_set_libc_include_dir(g, buf_create_from_str(libc_include_dir));
if (zig_std_dir)
codegen_set_zig_std_dir(g, buf_create_from_str(zig_std_dir));
if (dynamic_linker)
codegen_set_dynamic_linker(g, buf_create_from_str(dynamic_linker));
codegen_set_verbose(g, verbose);
Expand Down

0 comments on commit 0975e37

Please sign in to comment.