Skip to content

Commit 0975e37

Browse files
committed
fix implementation of --zig-std-dir
see #463
1 parent 0227bec commit 0975e37

File tree

4 files changed

+33
-23
lines changed

4 files changed

+33
-23
lines changed

src/codegen.cpp

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,14 @@ static PackageTableEntry *new_package(const char *root_src_dir, const char *root
5555
return entry;
5656
}
5757

58-
CodeGen *codegen_create(Buf *root_src_path, const ZigTarget *target, OutType out_type, BuildMode build_mode) {
58+
CodeGen *codegen_create(Buf *root_src_path, const ZigTarget *target, OutType out_type, BuildMode build_mode,
59+
Buf *zig_std_dir)
60+
{
5961
CodeGen *g = allocate<CodeGen>(1);
6062

6163
codegen_add_time_event(g, "Initialize");
6264

65+
g->zig_std_dir = zig_std_dir;
6366
g->build_mode = build_mode;
6467
g->out_type = out_type;
6568
g->import_table.init(32);
@@ -87,12 +90,11 @@ CodeGen *codegen_create(Buf *root_src_path, const ZigTarget *target, OutType out
8790
os_path_split(root_src_path, src_dir, src_basename);
8891

8992
g->root_package = new_package(buf_ptr(src_dir), buf_ptr(src_basename));
90-
g->std_package = new_package(ZIG_STD_DIR, "index.zig");
93+
g->std_package = new_package(buf_ptr(g->zig_std_dir), "index.zig");
9194
g->root_package->package_table.put(buf_create_from_str("std"), g->std_package);
9295
} else {
9396
g->root_package = new_package(".", "");
9497
}
95-
g->zig_std_dir = buf_create_from_str(ZIG_STD_DIR);
9698

9799
g->zig_std_special_dir = buf_alloc();
98100
os_path_join(g->zig_std_dir, buf_sprintf("special"), g->zig_std_special_dir);
@@ -215,12 +217,6 @@ void codegen_set_libc_include_dir(CodeGen *g, Buf *libc_include_dir) {
215217
g->libc_include_dir = libc_include_dir;
216218
}
217219

218-
void codegen_set_zig_std_dir(CodeGen *g, Buf *zig_std_dir) {
219-
g->zig_std_dir = zig_std_dir;
220-
221-
g->std_package->root_src_dir = *zig_std_dir;
222-
}
223-
224220
void codegen_set_dynamic_linker(CodeGen *g, Buf *dynamic_linker) {
225221
g->dynamic_linker = dynamic_linker;
226222
}

src/codegen.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@
1414

1515
#include <stdio.h>
1616

17-
CodeGen *codegen_create(Buf *root_src_path, const ZigTarget *target, OutType out_type, BuildMode build_mode);
17+
CodeGen *codegen_create(Buf *root_src_path, const ZigTarget *target, OutType out_type, BuildMode build_mode,
18+
Buf *zig_std_dir);
1819

1920
void codegen_set_clang_argv(CodeGen *codegen, const char **args, size_t len);
2021
void codegen_set_llvm_argv(CodeGen *codegen, const char **args, size_t len);
@@ -29,7 +30,6 @@ void codegen_set_out_name(CodeGen *codegen, Buf *out_name);
2930
void codegen_set_libc_lib_dir(CodeGen *codegen, Buf *libc_lib_dir);
3031
void codegen_set_libc_static_lib_dir(CodeGen *g, Buf *libc_static_lib_dir);
3132
void codegen_set_libc_include_dir(CodeGen *codegen, Buf *libc_include_dir);
32-
void codegen_set_zig_std_dir(CodeGen *codegen, Buf *zig_std_dir);
3333
void codegen_set_dynamic_linker(CodeGen *g, Buf *dynamic_linker);
3434
void codegen_set_windows_subsystem(CodeGen *g, bool mwindows, bool mconsole);
3535
void codegen_set_windows_unicode(CodeGen *g, bool municode);

src/link.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ static const char *get_libc_static_file(CodeGen *g, const char *file) {
3333

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

3839
child_gen->want_h_file = false;
3940
child_gen->verbose_link = parent_gen->verbose_link;

src/main.cpp

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -232,13 +232,6 @@ int main(int argc, char **argv) {
232232

233233
init_all_targets();
234234

235-
Buf *zig_std_dir = buf_create_from_str(ZIG_STD_DIR);
236-
Buf *special_dir = buf_alloc();
237-
os_path_join(zig_std_dir, buf_sprintf("special"), special_dir);
238-
239-
Buf *build_runner_path = buf_alloc();
240-
os_path_join(special_dir, buf_create_from_str("build_runner.zig"), build_runner_path);
241-
242235
ZigList<const char *> args = {0};
243236
args.append(zig_exe_path);
244237
args.append(NULL); // placeholder
@@ -255,12 +248,29 @@ int main(int argc, char **argv) {
255248
} else if (i + 1 < argc && strcmp(argv[i], "--cache-dir") == 0) {
256249
cache_dir = argv[i + 1];
257250
i += 1;
251+
} else if (i + 1 < argc && strcmp(argv[i], "--zig-std-dir") == 0) {
252+
args.append(argv[i]);
253+
i += 1;
254+
zig_std_dir = argv[i];
255+
args.append(zig_std_dir);
258256
} else {
259257
args.append(argv[i]);
260258
}
261259
}
262260

263-
CodeGen *g = codegen_create(build_runner_path, nullptr, OutTypeExe, BuildModeDebug);
261+
if (zig_std_dir == nullptr) {
262+
zig_std_dir = ZIG_STD_DIR;
263+
}
264+
Buf *zig_std_dir_buf = buf_create_from_str(zig_std_dir);
265+
266+
Buf *special_dir = buf_alloc();
267+
os_path_join(zig_std_dir_buf, buf_sprintf("special"), special_dir);
268+
269+
Buf *build_runner_path = buf_alloc();
270+
os_path_join(special_dir, buf_create_from_str("build_runner.zig"), build_runner_path);
271+
272+
273+
CodeGen *g = codegen_create(build_runner_path, nullptr, OutTypeExe, BuildModeDebug, zig_std_dir_buf);
264274
codegen_set_out_name(g, buf_create_from_str("build"));
265275
codegen_set_verbose(g, verbose);
266276

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

612-
CodeGen *g = codegen_create(zig_root_source_file, target, out_type, build_mode);
622+
if (zig_std_dir == nullptr) {
623+
zig_std_dir = ZIG_STD_DIR;
624+
}
625+
626+
CodeGen *g = codegen_create(zig_root_source_file, target, out_type, build_mode,
627+
buf_create_from_str(zig_std_dir));
613628
codegen_set_out_name(g, buf_out_name);
614629
codegen_set_lib_version(g, ver_major, ver_minor, ver_patch);
615630
codegen_set_is_test(g, cmd == CmdTest);
@@ -628,8 +643,6 @@ int main(int argc, char **argv) {
628643
codegen_set_libc_static_lib_dir(g, buf_create_from_str(libc_static_lib_dir));
629644
if (libc_include_dir)
630645
codegen_set_libc_include_dir(g, buf_create_from_str(libc_include_dir));
631-
if (zig_std_dir)
632-
codegen_set_zig_std_dir(g, buf_create_from_str(zig_std_dir));
633646
if (dynamic_linker)
634647
codegen_set_dynamic_linker(g, buf_create_from_str(dynamic_linker));
635648
codegen_set_verbose(g, verbose);

0 commit comments

Comments
 (0)