authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-02-28 02:00:20-05:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-02-28 14:51:56-05:00
logd45ea4d89d7232fc4bcf56a5e088d7d6b5004ebb
tree9111983824c5bb0bf2eb6481b3dcdfc52a632271
parent3683ba87ac5e5dfb6ea65c21c9fb714ed0582124
signaturelock-open Commit is signed but in an unrecognized format.

stage1: make get_native_target go through self-hosted


6 files changed, 110 insertions(+), 105 deletions(-)

lib/std/special/init-exe/src/main.zig+1-1
...@@ -1,5 +1,5 @@...@@ -1,5 +1,5 @@
1const std = @import("std");1const std = @import("std");
22
3pub fn main() anyerror!void {3pub fn main() anyerror!void {
4 std.debug.warn("All your base are belong to us.\n", .{});4 std.debug.warn("All your codebase are belong to us.\n", .{});
5}5}
lib/std/target.zig+1-1
...@@ -1215,8 +1215,8 @@ pub const Target = struct {...@@ -1215,8 +1215,8 @@ pub const Target = struct {
1215 .uefi,1215 .uefi,
1216 .windows,1216 .windows,
1217 .emscripten,1217 .emscripten,
1218 .other,
1219 .wasi,1218 .wasi,
1219 .other,
1220 => return null,1220 => return null,
12211221
1222 // TODO go over each item in this list and either move it to the above list, or1222 // TODO go over each item in this list and either move it to the above list, or
src/main.cpp+8-2
...@@ -500,7 +500,10 @@ static int main0(int argc, char **argv) {...@@ -500,7 +500,10 @@ static int main0(int argc, char **argv) {
500 os_path_join(get_zig_special_dir(zig_lib_dir), buf_create_from_str("build_runner.zig"), build_runner_path);500 os_path_join(get_zig_special_dir(zig_lib_dir), buf_create_from_str("build_runner.zig"), build_runner_path);
501501
502 ZigTarget target;502 ZigTarget target;
503 get_native_target(&target);503 if ((err = target_parse_triple(&target, "native", nullptr))) {
504 fprintf(stderr, "Unable to get native target: %s\n", err_str(err));
505 return EXIT_FAILURE;
506 }
504507
505 Buf *build_file_buf = buf_create_from_str((build_file != nullptr) ? build_file : "build.zig");508 Buf *build_file_buf = buf_create_from_str((build_file != nullptr) ? build_file : "build.zig");
506 Buf build_file_abs = os_path_resolve(&build_file_buf, 1);509 Buf build_file_abs = os_path_resolve(&build_file_buf, 1);
...@@ -1337,7 +1340,10 @@ static int main0(int argc, char **argv) {...@@ -1337,7 +1340,10 @@ static int main0(int argc, char **argv) {
1337 return main_exit(root_progress_node, EXIT_SUCCESS);1340 return main_exit(root_progress_node, EXIT_SUCCESS);
1338 } else if (cmd == CmdTest) {1341 } else if (cmd == CmdTest) {
1339 ZigTarget native;1342 ZigTarget native;
1340 get_native_target(&native);1343 if ((err = target_parse_triple(&native, "native", nullptr))) {
1344 fprintf(stderr, "Unable to get native target: %s\n", err_str(err));
1345 return EXIT_FAILURE;
1346 }
13411347
1342 g->enable_cache = get_cache_opt(enable_cache, output_dir == nullptr);1348 g->enable_cache = get_cache_opt(enable_cache, output_dir == nullptr);
1343 codegen_build_and_link(g);1349 codegen_build_and_link(g);
src/stage2.cpp+100
...@@ -91,6 +91,106 @@ void stage2_progress_complete_one(Stage2ProgressNode *node) {}...@@ -91,6 +91,106 @@ void stage2_progress_complete_one(Stage2ProgressNode *node) {}
91void stage2_progress_disable_tty(Stage2Progress *progress) {}91void stage2_progress_disable_tty(Stage2Progress *progress) {}
92void stage2_progress_update_node(Stage2ProgressNode *node, size_t completed_count, size_t estimated_total_items){}92void stage2_progress_update_node(Stage2ProgressNode *node, size_t completed_count, size_t estimated_total_items){}
9393
94static Os get_zig_os_type(ZigLLVM_OSType os_type) {
95 switch (os_type) {
96 case ZigLLVM_UnknownOS:
97 return OsFreestanding;
98 case ZigLLVM_Ananas:
99 return OsAnanas;
100 case ZigLLVM_CloudABI:
101 return OsCloudABI;
102 case ZigLLVM_DragonFly:
103 return OsDragonFly;
104 case ZigLLVM_FreeBSD:
105 return OsFreeBSD;
106 case ZigLLVM_Fuchsia:
107 return OsFuchsia;
108 case ZigLLVM_IOS:
109 return OsIOS;
110 case ZigLLVM_KFreeBSD:
111 return OsKFreeBSD;
112 case ZigLLVM_Linux:
113 return OsLinux;
114 case ZigLLVM_Lv2:
115 return OsLv2;
116 case ZigLLVM_Darwin:
117 case ZigLLVM_MacOSX:
118 return OsMacOSX;
119 case ZigLLVM_NetBSD:
120 return OsNetBSD;
121 case ZigLLVM_OpenBSD:
122 return OsOpenBSD;
123 case ZigLLVM_Solaris:
124 return OsSolaris;
125 case ZigLLVM_Win32:
126 return OsWindows;
127 case ZigLLVM_Haiku:
128 return OsHaiku;
129 case ZigLLVM_Minix:
130 return OsMinix;
131 case ZigLLVM_RTEMS:
132 return OsRTEMS;
133 case ZigLLVM_NaCl:
134 return OsNaCl;
135 case ZigLLVM_CNK:
136 return OsCNK;
137 case ZigLLVM_AIX:
138 return OsAIX;
139 case ZigLLVM_CUDA:
140 return OsCUDA;
141 case ZigLLVM_NVCL:
142 return OsNVCL;
143 case ZigLLVM_AMDHSA:
144 return OsAMDHSA;
145 case ZigLLVM_PS4:
146 return OsPS4;
147 case ZigLLVM_ELFIAMCU:
148 return OsELFIAMCU;
149 case ZigLLVM_TvOS:
150 return OsTvOS;
151 case ZigLLVM_WatchOS:
152 return OsWatchOS;
153 case ZigLLVM_Mesa3D:
154 return OsMesa3D;
155 case ZigLLVM_Contiki:
156 return OsContiki;
157 case ZigLLVM_AMDPAL:
158 return OsAMDPAL;
159 case ZigLLVM_HermitCore:
160 return OsHermitCore;
161 case ZigLLVM_Hurd:
162 return OsHurd;
163 case ZigLLVM_WASI:
164 return OsWASI;
165 case ZigLLVM_Emscripten:
166 return OsEmscripten;
167 }
168 zig_unreachable();
169}
170
171static void get_native_target(ZigTarget *target) {
172 // first zero initialize
173 *target = {};
174
175 ZigLLVM_OSType os_type;
176 ZigLLVM_ObjectFormatType oformat; // ignored; based on arch/os
177 ZigLLVMGetNativeTarget(
178 &target->arch,
179 &target->vendor,
180 &os_type,
181 &target->abi,
182 &oformat);
183 target->os = get_zig_os_type(os_type);
184 target->is_native = true;
185 if (target->abi == ZigLLVM_UnknownEnvironment) {
186 target->abi = target_default_abi(target->arch, target->os);
187 }
188 if (target_is_glibc(target)) {
189 target->glibc_version = heap::c_allocator.create<ZigGLibCVersion>();
190 target_init_default_glibc_version(target);
191 }
192}
193
94Error stage2_target_parse(struct ZigTarget *target, const char *zig_triple, const char *mcpu) {194Error stage2_target_parse(struct ZigTarget *target, const char *zig_triple, const char *mcpu) {
95 Error err;195 Error err;
96196
src/target.cpp-100
...@@ -287,83 +287,6 @@ ZigLLVM_OSType get_llvm_os_type(Os os_type) {...@@ -287,83 +287,6 @@ ZigLLVM_OSType get_llvm_os_type(Os os_type) {
287 zig_unreachable();287 zig_unreachable();
288}288}
289289
290static Os get_zig_os_type(ZigLLVM_OSType os_type) {
291 switch (os_type) {
292 case ZigLLVM_UnknownOS:
293 return OsFreestanding;
294 case ZigLLVM_Ananas:
295 return OsAnanas;
296 case ZigLLVM_CloudABI:
297 return OsCloudABI;
298 case ZigLLVM_DragonFly:
299 return OsDragonFly;
300 case ZigLLVM_FreeBSD:
301 return OsFreeBSD;
302 case ZigLLVM_Fuchsia:
303 return OsFuchsia;
304 case ZigLLVM_IOS:
305 return OsIOS;
306 case ZigLLVM_KFreeBSD:
307 return OsKFreeBSD;
308 case ZigLLVM_Linux:
309 return OsLinux;
310 case ZigLLVM_Lv2:
311 return OsLv2;
312 case ZigLLVM_Darwin:
313 case ZigLLVM_MacOSX:
314 return OsMacOSX;
315 case ZigLLVM_NetBSD:
316 return OsNetBSD;
317 case ZigLLVM_OpenBSD:
318 return OsOpenBSD;
319 case ZigLLVM_Solaris:
320 return OsSolaris;
321 case ZigLLVM_Win32:
322 return OsWindows;
323 case ZigLLVM_Haiku:
324 return OsHaiku;
325 case ZigLLVM_Minix:
326 return OsMinix;
327 case ZigLLVM_RTEMS:
328 return OsRTEMS;
329 case ZigLLVM_NaCl:
330 return OsNaCl;
331 case ZigLLVM_CNK:
332 return OsCNK;
333 case ZigLLVM_AIX:
334 return OsAIX;
335 case ZigLLVM_CUDA:
336 return OsCUDA;
337 case ZigLLVM_NVCL:
338 return OsNVCL;
339 case ZigLLVM_AMDHSA:
340 return OsAMDHSA;
341 case ZigLLVM_PS4:
342 return OsPS4;
343 case ZigLLVM_ELFIAMCU:
344 return OsELFIAMCU;
345 case ZigLLVM_TvOS:
346 return OsTvOS;
347 case ZigLLVM_WatchOS:
348 return OsWatchOS;
349 case ZigLLVM_Mesa3D:
350 return OsMesa3D;
351 case ZigLLVM_Contiki:
352 return OsContiki;
353 case ZigLLVM_AMDPAL:
354 return OsAMDPAL;
355 case ZigLLVM_HermitCore:
356 return OsHermitCore;
357 case ZigLLVM_Hurd:
358 return OsHurd;
359 case ZigLLVM_WASI:
360 return OsWASI;
361 case ZigLLVM_Emscripten:
362 return OsEmscripten;
363 }
364 zig_unreachable();
365}
366
367const char *target_os_name(Os os_type) {290const char *target_os_name(Os os_type) {
368 switch (os_type) {291 switch (os_type) {
369 case OsFreestanding:292 case OsFreestanding:
...@@ -447,29 +370,6 @@ Error target_parse_glibc_version(ZigGLibCVersion *glibc_ver, const char *text) {...@@ -447,29 +370,6 @@ Error target_parse_glibc_version(ZigGLibCVersion *glibc_ver, const char *text) {
447 return ErrorNone;370 return ErrorNone;
448}371}
449372
450void get_native_target(ZigTarget *target) {
451 // first zero initialize
452 *target = {};
453
454 ZigLLVM_OSType os_type;
455 ZigLLVM_ObjectFormatType oformat; // ignored; based on arch/os
456 ZigLLVMGetNativeTarget(
457 &target->arch,
458 &target->vendor,
459 &os_type,
460 &target->abi,
461 &oformat);
462 target->os = get_zig_os_type(os_type);
463 target->is_native = true;
464 if (target->abi == ZigLLVM_UnknownEnvironment) {
465 target->abi = target_default_abi(target->arch, target->os);
466 }
467 if (target_is_glibc(target)) {
468 target->glibc_version = heap::c_allocator.create<ZigGLibCVersion>();
469 target_init_default_glibc_version(target);
470 }
471}
472
473void target_init_default_glibc_version(ZigTarget *target) {373void target_init_default_glibc_version(ZigTarget *target) {
474 *target->glibc_version = {2, 17, 0};374 *target->glibc_version = {2, 17, 0};
475}375}
src/target.hpp-1
...@@ -73,7 +73,6 @@ ZigLLVM_ObjectFormatType target_oformat_enum(size_t index);...@@ -73,7 +73,6 @@ ZigLLVM_ObjectFormatType target_oformat_enum(size_t index);
73const char *target_oformat_name(ZigLLVM_ObjectFormatType oformat);73const char *target_oformat_name(ZigLLVM_ObjectFormatType oformat);
74ZigLLVM_ObjectFormatType target_object_format(const ZigTarget *target);74ZigLLVM_ObjectFormatType target_object_format(const ZigTarget *target);
7575
76void get_native_target(ZigTarget *target);
77void target_triple_llvm(Buf *triple, const ZigTarget *target);76void target_triple_llvm(Buf *triple, const ZigTarget *target);
78void target_triple_zig(Buf *triple, const ZigTarget *target);77void target_triple_zig(Buf *triple, const ZigTarget *target);
7978