| author | |
| committer | |
| log | ef24f2dd93729493531c427aaac54444597f6e66 |
| tree | e78381294ccbf2d54c4f9c144f939e6d70a9039d |
| parent | d45ea4d89d7232fc4bcf56a5e088d7d6b5004ebb |
| signature |
now it is integrated with zig's target OS range.15 files changed, 95 insertions(+), 228 deletions(-)
lib/std/target.zig+18-3| ... | @@ -147,7 +147,6 @@ pub const Target = struct { | ... | @@ -147,7 +147,6 @@ pub const Target = struct { |
| 147 | .cloudabi, | 147 | .cloudabi, |
| 148 | .dragonfly, | 148 | .dragonfly, |
| 149 | .fuchsia, | 149 | .fuchsia, |
| 150 | .ios, | ||
| 151 | .kfreebsd, | 150 | .kfreebsd, |
| 152 | .lv2, | 151 | .lv2, |
| 153 | .solaris, | 152 | .solaris, |
| ... | @@ -162,8 +161,6 @@ pub const Target = struct { | ... | @@ -162,8 +161,6 @@ pub const Target = struct { |
| 162 | .amdhsa, | 161 | .amdhsa, |
| 163 | .ps4, | 162 | .ps4, |
| 164 | .elfiamcu, | 163 | .elfiamcu, |
| 165 | .tvos, | ||
| 166 | .watchos, | ||
| 167 | .mesa3d, | 164 | .mesa3d, |
| 168 | .contiki, | 165 | .contiki, |
| 169 | .amdpal, | 166 | .amdpal, |
| ... | @@ -187,6 +184,24 @@ pub const Target = struct { | ... | @@ -187,6 +184,24 @@ pub const Target = struct { |
| 187 | .max = .{ .major = 10, .minor = 15, .patch = 3 }, | 184 | .max = .{ .major = 10, .minor = 15, .patch = 3 }, |
| 188 | }, | 185 | }, |
| 189 | }, | 186 | }, |
| 187 | .ios => return .{ | ||
| 188 | .semver = .{ | ||
| 189 | .min = .{ .major = 12, .minor = 0 }, | ||
| 190 | .max = .{ .major = 13, .minor = 4, .patch = 0 }, | ||
| 191 | }, | ||
| 192 | }, | ||
| 193 | .watchos => return .{ | ||
| 194 | .semver = .{ | ||
| 195 | .min = .{ .major = 6, .minor = 0 }, | ||
| 196 | .max = .{ .major = 6, .minor = 2, .patch = 0 }, | ||
| 197 | }, | ||
| 198 | }, | ||
| 199 | .tvos => return .{ | ||
| 200 | .semver = .{ | ||
| 201 | .min = .{ .major = 13, .minor = 0 }, | ||
| 202 | .max = .{ .major = 13, .minor = 4, .patch = 0 }, | ||
| 203 | }, | ||
| 204 | }, | ||
| 190 | .netbsd => return .{ | 205 | .netbsd => return .{ |
| 191 | .semver = .{ | 206 | .semver = .{ |
| 192 | .min = .{ .major = 8, .minor = 0 }, | 207 | .min = .{ .major = 8, .minor = 0 }, |
lib/std/zig/cross_target.zig+3-3| ... | @@ -88,7 +88,6 @@ pub const CrossTarget = struct { | ... | @@ -88,7 +88,6 @@ pub const CrossTarget = struct { |
| 88 | .cloudabi, | 88 | .cloudabi, |
| 89 | .dragonfly, | 89 | .dragonfly, |
| 90 | .fuchsia, | 90 | .fuchsia, |
| 91 | .ios, | ||
| 92 | .kfreebsd, | 91 | .kfreebsd, |
| 93 | .lv2, | 92 | .lv2, |
| 94 | .solaris, | 93 | .solaris, |
| ... | @@ -103,8 +102,6 @@ pub const CrossTarget = struct { | ... | @@ -103,8 +102,6 @@ pub const CrossTarget = struct { |
| 103 | .amdhsa, | 102 | .amdhsa, |
| 104 | .ps4, | 103 | .ps4, |
| 105 | .elfiamcu, | 104 | .elfiamcu, |
| 106 | .tvos, | ||
| 107 | .watchos, | ||
| 108 | .mesa3d, | 105 | .mesa3d, |
| 109 | .contiki, | 106 | .contiki, |
| 110 | .amdpal, | 107 | .amdpal, |
| ... | @@ -121,8 +118,11 @@ pub const CrossTarget = struct { | ... | @@ -121,8 +118,11 @@ pub const CrossTarget = struct { |
| 121 | 118 | ||
| 122 | .freebsd, | 119 | .freebsd, |
| 123 | .macosx, | 120 | .macosx, |
| 121 | .ios, | ||
| 124 | .netbsd, | 122 | .netbsd, |
| 125 | .openbsd, | 123 | .openbsd, |
| 124 | .tvos, | ||
| 125 | .watchos, | ||
| 126 | => { | 126 | => { |
| 127 | self.os_version_min = .{ .semver = os.version_range.semver.min }; | 127 | self.os_version_min = .{ .semver = os.version_range.semver.min }; |
| 128 | self.os_version_max = .{ .semver = os.version_range.semver.max }; | 128 | self.os_version_max = .{ .semver = os.version_range.semver.max }; |
src-self-hosted/stage2.zig+26-13| ... | @@ -892,7 +892,7 @@ const Stage2Target = extern struct { | ... | @@ -892,7 +892,7 @@ const Stage2Target = extern struct { |
| 892 | 892 | ||
| 893 | is_native: bool, | 893 | is_native: bool, |
| 894 | 894 | ||
| 895 | glibc_version: ?*Stage2GLibCVersion, // null means default | 895 | glibc_or_darwin_version: ?*Stage2SemVer, |
| 896 | 896 | ||
| 897 | llvm_cpu_name: ?[*:0]const u8, | 897 | llvm_cpu_name: ?[*:0]const u8, |
| 898 | llvm_cpu_features: ?[*:0]const u8, | 898 | llvm_cpu_features: ?[*:0]const u8, |
| ... | @@ -1103,16 +1103,29 @@ const Stage2Target = extern struct { | ... | @@ -1103,16 +1103,29 @@ const Stage2Target = extern struct { |
| 1103 | os_builtin_str_buffer.toSlice()[os_builtin_str_ver_start_index..os_builtin_str_buffer.len()], | 1103 | os_builtin_str_buffer.toSlice()[os_builtin_str_ver_start_index..os_builtin_str_buffer.len()], |
| 1104 | ); | 1104 | ); |
| 1105 | 1105 | ||
| 1106 | const glibc_version = if (target.isGnuLibC()) blk: { | 1106 | const glibc_or_darwin_version = blk: { |
| 1107 | const stage1_glibc = try std.heap.c_allocator.create(Stage2GLibCVersion); | 1107 | if (target.isGnuLibC()) { |
| 1108 | const stage2_glibc = target.os.version_range.linux.glibc; | 1108 | const stage1_glibc = try std.heap.c_allocator.create(Stage2SemVer); |
| 1109 | stage1_glibc.* = .{ | 1109 | const stage2_glibc = target.os.version_range.linux.glibc; |
| 1110 | .major = stage2_glibc.major, | 1110 | stage1_glibc.* = .{ |
| 1111 | .minor = stage2_glibc.minor, | 1111 | .major = stage2_glibc.major, |
| 1112 | .patch = stage2_glibc.patch, | 1112 | .minor = stage2_glibc.minor, |
| 1113 | }; | 1113 | .patch = stage2_glibc.patch, |
| 1114 | break :blk stage1_glibc; | 1114 | }; |
| 1115 | } else null; | 1115 | break :blk stage1_glibc; |
| 1116 | } else if (target.isDarwin()) { | ||
| 1117 | const stage1_semver = try std.heap.c_allocator.create(Stage2SemVer); | ||
| 1118 | const stage2_semver = target.os.version_range.semver.min; | ||
| 1119 | stage1_semver.* = .{ | ||
| 1120 | .major = stage2_semver.major, | ||
| 1121 | .minor = stage2_semver.minor, | ||
| 1122 | .patch = stage2_semver.patch, | ||
| 1123 | }; | ||
| 1124 | break :blk stage1_semver; | ||
| 1125 | } else { | ||
| 1126 | break :blk null; | ||
| 1127 | } | ||
| 1128 | }; | ||
| 1116 | 1129 | ||
| 1117 | self.* = .{ | 1130 | self.* = .{ |
| 1118 | .arch = @enumToInt(target.cpu.arch) + 1, // skip over ZigLLVM_UnknownArch | 1131 | .arch = @enumToInt(target.cpu.arch) + 1, // skip over ZigLLVM_UnknownArch |
| ... | @@ -1125,7 +1138,7 @@ const Stage2Target = extern struct { | ... | @@ -1125,7 +1138,7 @@ const Stage2Target = extern struct { |
| 1125 | .os_builtin_str = os_builtin_str_buffer.toOwnedSlice().ptr, | 1138 | .os_builtin_str = os_builtin_str_buffer.toOwnedSlice().ptr, |
| 1126 | .cache_hash = cache_hash.toOwnedSlice().ptr, | 1139 | .cache_hash = cache_hash.toOwnedSlice().ptr, |
| 1127 | .is_native = cross_target.isNative(), | 1140 | .is_native = cross_target.isNative(), |
| 1128 | .glibc_version = glibc_version, | 1141 | .glibc_or_darwin_version = glibc_or_darwin_version, |
| 1129 | .dynamic_linker = dynamic_linker, | 1142 | .dynamic_linker = dynamic_linker, |
| 1130 | }; | 1143 | }; |
| 1131 | } | 1144 | } |
| ... | @@ -1179,7 +1192,7 @@ fn crossTargetToTarget(cross_target: CrossTarget, dynamic_linker_ptr: *?[*:0]u8) | ... | @@ -1179,7 +1192,7 @@ fn crossTargetToTarget(cross_target: CrossTarget, dynamic_linker_ptr: *?[*:0]u8) |
| 1179 | } | 1192 | } |
| 1180 | 1193 | ||
| 1181 | // ABI warning | 1194 | // ABI warning |
| 1182 | const Stage2GLibCVersion = extern struct { | 1195 | const Stage2SemVer = extern struct { |
| 1183 | major: u32, | 1196 | major: u32, |
| 1184 | minor: u32, | 1197 | minor: u32, |
| 1185 | patch: u32, | 1198 | patch: u32, |
src/all_types.hpp-2| ... | @@ -2250,8 +2250,6 @@ struct CodeGen { | ... | @@ -2250,8 +2250,6 @@ struct CodeGen { |
| 2250 | bool test_is_evented; | 2250 | bool test_is_evented; |
| 2251 | CodeModel code_model; | 2251 | CodeModel code_model; |
| 2252 | 2252 | ||
| 2253 | Buf *mmacosx_version_min; | ||
| 2254 | Buf *mios_version_min; | ||
| 2255 | Buf *root_out_name; | 2253 | Buf *root_out_name; |
| 2256 | Buf *test_filter; | 2254 | Buf *test_filter; |
| 2257 | Buf *test_name_prefix; | 2255 | Buf *test_name_prefix; |
src/codegen.cpp+8-51| ... | @@ -32,31 +32,6 @@ enum ResumeId { | ... | @@ -32,31 +32,6 @@ enum ResumeId { |
| 32 | ResumeIdCall, | 32 | ResumeIdCall, |
| 33 | }; | 33 | }; |
| 34 | 34 | ||
| 35 | static void init_darwin_native(CodeGen *g) { | ||
| 36 | char *osx_target = getenv("MACOSX_DEPLOYMENT_TARGET"); | ||
| 37 | char *ios_target = getenv("IPHONEOS_DEPLOYMENT_TARGET"); | ||
| 38 | |||
| 39 | // Allow conflicts among OSX and iOS, but choose the default platform. | ||
| 40 | if (osx_target && ios_target) { | ||
| 41 | if (g->zig_target->arch == ZigLLVM_arm || | ||
| 42 | g->zig_target->arch == ZigLLVM_aarch64 || | ||
| 43 | g->zig_target->arch == ZigLLVM_thumb) | ||
| 44 | { | ||
| 45 | osx_target = nullptr; | ||
| 46 | } else { | ||
| 47 | ios_target = nullptr; | ||
| 48 | } | ||
| 49 | } | ||
| 50 | |||
| 51 | if (osx_target) { | ||
| 52 | g->mmacosx_version_min = buf_create_from_str(osx_target); | ||
| 53 | } else if (ios_target) { | ||
| 54 | g->mios_version_min = buf_create_from_str(ios_target); | ||
| 55 | } else if (g->zig_target->os != OsIOS) { | ||
| 56 | g->mmacosx_version_min = buf_create_from_str("10.14"); | ||
| 57 | } | ||
| 58 | } | ||
| 59 | |||
| 60 | static ZigPackage *new_package(const char *root_src_dir, const char *root_src_path, const char *pkg_path) { | 35 | static ZigPackage *new_package(const char *root_src_dir, const char *root_src_path, const char *pkg_path) { |
| 61 | ZigPackage *entry = heap::c_allocator.create<ZigPackage>(); | 36 | ZigPackage *entry = heap::c_allocator.create<ZigPackage>(); |
| 62 | entry->package_table.init(4); | 37 | entry->package_table.init(4); |
| ... | @@ -160,14 +135,6 @@ void codegen_add_framework(CodeGen *g, const char *framework) { | ... | @@ -160,14 +135,6 @@ void codegen_add_framework(CodeGen *g, const char *framework) { |
| 160 | g->darwin_frameworks.append(buf_create_from_str(framework)); | 135 | g->darwin_frameworks.append(buf_create_from_str(framework)); |
| 161 | } | 136 | } |
| 162 | 137 | ||
| 163 | void codegen_set_mmacosx_version_min(CodeGen *g, Buf *mmacosx_version_min) { | ||
| 164 | g->mmacosx_version_min = mmacosx_version_min; | ||
| 165 | } | ||
| 166 | |||
| 167 | void codegen_set_mios_version_min(CodeGen *g, Buf *mios_version_min) { | ||
| 168 | g->mios_version_min = mios_version_min; | ||
| 169 | } | ||
| 170 | |||
| 171 | void codegen_set_rdynamic(CodeGen *g, bool rdynamic) { | 138 | void codegen_set_rdynamic(CodeGen *g, bool rdynamic) { |
| 172 | g->linker_rdynamic = rdynamic; | 139 | g->linker_rdynamic = rdynamic; |
| 173 | } | 140 | } |
| ... | @@ -8655,10 +8622,10 @@ static Error define_builtin_compile_vars(CodeGen *g) { | ... | @@ -8655,10 +8622,10 @@ static Error define_builtin_compile_vars(CodeGen *g) { |
| 8655 | if (g->zig_target->cache_hash != nullptr) { | 8622 | if (g->zig_target->cache_hash != nullptr) { |
| 8656 | cache_str(&cache_hash, g->zig_target->cache_hash); | 8623 | cache_str(&cache_hash, g->zig_target->cache_hash); |
| 8657 | } | 8624 | } |
| 8658 | if (g->zig_target->glibc_version != nullptr) { | 8625 | if (g->zig_target->glibc_or_darwin_version != nullptr) { |
| 8659 | cache_int(&cache_hash, g->zig_target->glibc_version->major); | 8626 | cache_int(&cache_hash, g->zig_target->glibc_or_darwin_version->major); |
| 8660 | cache_int(&cache_hash, g->zig_target->glibc_version->minor); | 8627 | cache_int(&cache_hash, g->zig_target->glibc_or_darwin_version->minor); |
| 8661 | cache_int(&cache_hash, g->zig_target->glibc_version->patch); | 8628 | cache_int(&cache_hash, g->zig_target->glibc_or_darwin_version->patch); |
| 8662 | } | 8629 | } |
| 8663 | cache_bool(&cache_hash, g->have_err_ret_tracing); | 8630 | cache_bool(&cache_hash, g->have_err_ret_tracing); |
| 8664 | cache_bool(&cache_hash, g->libc_link_lib != nullptr); | 8631 | cache_bool(&cache_hash, g->libc_link_lib != nullptr); |
| ... | @@ -10313,10 +10280,10 @@ static Error check_cache(CodeGen *g, Buf *manifest_dir, Buf *digest) { | ... | @@ -10313,10 +10280,10 @@ static Error check_cache(CodeGen *g, Buf *manifest_dir, Buf *digest) { |
| 10313 | if (g->zig_target->cache_hash != nullptr) { | 10280 | if (g->zig_target->cache_hash != nullptr) { |
| 10314 | cache_str(ch, g->zig_target->cache_hash); | 10281 | cache_str(ch, g->zig_target->cache_hash); |
| 10315 | } | 10282 | } |
| 10316 | if (g->zig_target->glibc_version != nullptr) { | 10283 | if (g->zig_target->glibc_or_darwin_version != nullptr) { |
| 10317 | cache_int(ch, g->zig_target->glibc_version->major); | 10284 | cache_int(ch, g->zig_target->glibc_or_darwin_version->major); |
| 10318 | cache_int(ch, g->zig_target->glibc_version->minor); | 10285 | cache_int(ch, g->zig_target->glibc_or_darwin_version->minor); |
| 10319 | cache_int(ch, g->zig_target->glibc_version->patch); | 10286 | cache_int(ch, g->zig_target->glibc_or_darwin_version->patch); |
| 10320 | } | 10287 | } |
| 10321 | cache_int(ch, detect_subsystem(g)); | 10288 | cache_int(ch, detect_subsystem(g)); |
| 10322 | cache_bool(ch, g->strip_debug_symbols); | 10289 | cache_bool(ch, g->strip_debug_symbols); |
| ... | @@ -10344,8 +10311,6 @@ static Error check_cache(CodeGen *g, Buf *manifest_dir, Buf *digest) { | ... | @@ -10344,8 +10311,6 @@ static Error check_cache(CodeGen *g, Buf *manifest_dir, Buf *digest) { |
| 10344 | cache_bool(ch, g->emit_bin); | 10311 | cache_bool(ch, g->emit_bin); |
| 10345 | cache_bool(ch, g->emit_llvm_ir); | 10312 | cache_bool(ch, g->emit_llvm_ir); |
| 10346 | cache_bool(ch, g->emit_asm); | 10313 | cache_bool(ch, g->emit_asm); |
| 10347 | cache_buf_opt(ch, g->mmacosx_version_min); | ||
| 10348 | cache_buf_opt(ch, g->mios_version_min); | ||
| 10349 | cache_usize(ch, g->version_major); | 10314 | cache_usize(ch, g->version_major); |
| 10350 | cache_usize(ch, g->version_minor); | 10315 | cache_usize(ch, g->version_minor); |
| 10351 | cache_usize(ch, g->version_patch); | 10316 | cache_usize(ch, g->version_patch); |
| ... | @@ -10662,9 +10627,6 @@ CodeGen *create_child_codegen(CodeGen *parent_gen, Buf *root_src_path, OutType o | ... | @@ -10662,9 +10627,6 @@ CodeGen *create_child_codegen(CodeGen *parent_gen, Buf *root_src_path, OutType o |
| 10662 | 10627 | ||
| 10663 | codegen_set_errmsg_color(child_gen, parent_gen->err_color); | 10628 | codegen_set_errmsg_color(child_gen, parent_gen->err_color); |
| 10664 | 10629 | ||
| 10665 | codegen_set_mmacosx_version_min(child_gen, parent_gen->mmacosx_version_min); | ||
| 10666 | codegen_set_mios_version_min(child_gen, parent_gen->mios_version_min); | ||
| 10667 | |||
| 10668 | child_gen->enable_cache = true; | 10630 | child_gen->enable_cache = true; |
| 10669 | 10631 | ||
| 10670 | return child_gen; | 10632 | return child_gen; |
| ... | @@ -10772,11 +10734,6 @@ CodeGen *codegen_create(Buf *main_pkg_path, Buf *root_src_path, const ZigTarget | ... | @@ -10772,11 +10734,6 @@ CodeGen *codegen_create(Buf *main_pkg_path, Buf *root_src_path, const ZigTarget |
| 10772 | g->each_lib_rpath = false; | 10734 | g->each_lib_rpath = false; |
| 10773 | } else { | 10735 | } else { |
| 10774 | g->each_lib_rpath = true; | 10736 | g->each_lib_rpath = true; |
| 10775 | |||
| 10776 | if (target_os_is_darwin(g->zig_target->os)) { | ||
| 10777 | init_darwin_native(g); | ||
| 10778 | } | ||
| 10779 | |||
| 10780 | } | 10737 | } |
| 10781 | 10738 | ||
| 10782 | if (target_os_requires_libc(g->zig_target->os)) { | 10739 | if (target_os_requires_libc(g->zig_target->os)) { |
src/codegen.hpp-2| ... | @@ -35,8 +35,6 @@ LinkLib *codegen_add_link_lib(CodeGen *codegen, Buf *lib); | ... | @@ -35,8 +35,6 @@ LinkLib *codegen_add_link_lib(CodeGen *codegen, Buf *lib); |
| 35 | void codegen_add_framework(CodeGen *codegen, const char *name); | 35 | void codegen_add_framework(CodeGen *codegen, const char *name); |
| 36 | void codegen_add_rpath(CodeGen *codegen, const char *name); | 36 | void codegen_add_rpath(CodeGen *codegen, const char *name); |
| 37 | void codegen_set_rdynamic(CodeGen *g, bool rdynamic); | 37 | void codegen_set_rdynamic(CodeGen *g, bool rdynamic); |
| 38 | void codegen_set_mmacosx_version_min(CodeGen *g, Buf *mmacosx_version_min); | ||
| 39 | void codegen_set_mios_version_min(CodeGen *g, Buf *mios_version_min); | ||
| 40 | void codegen_set_linker_script(CodeGen *g, const char *linker_script); | 38 | void codegen_set_linker_script(CodeGen *g, const char *linker_script); |
| 41 | void codegen_set_test_filter(CodeGen *g, Buf *filter); | 39 | void codegen_set_test_filter(CodeGen *g, Buf *filter); |
| 42 | void codegen_set_test_name_prefix(CodeGen *g, Buf *prefix); | 40 | void codegen_set_test_name_prefix(CodeGen *g, Buf *prefix); |
src/glibc.cpp+13-13| ... | @@ -55,7 +55,7 @@ Error glibc_load_metadata(ZigGLibCAbi **out_result, Buf *zig_lib_dir, bool verbo | ... | @@ -55,7 +55,7 @@ Error glibc_load_metadata(ZigGLibCAbi **out_result, Buf *zig_lib_dir, bool verbo |
| 55 | Optional<Slice<uint8_t>> opt_component = SplitIterator_next(&it); | 55 | Optional<Slice<uint8_t>> opt_component = SplitIterator_next(&it); |
| 56 | if (!opt_component.is_some) break; | 56 | if (!opt_component.is_some) break; |
| 57 | Buf *ver_buf = buf_create_from_slice(opt_component.value); | 57 | Buf *ver_buf = buf_create_from_slice(opt_component.value); |
| 58 | ZigGLibCVersion *this_ver = glibc_abi->all_versions.add_one(); | 58 | Stage2SemVer *this_ver = glibc_abi->all_versions.add_one(); |
| 59 | if ((err = target_parse_glibc_version(this_ver, buf_ptr(ver_buf)))) { | 59 | if ((err = target_parse_glibc_version(this_ver, buf_ptr(ver_buf)))) { |
| 60 | if (verbose) { | 60 | if (verbose) { |
| 61 | fprintf(stderr, "Unable to parse glibc version '%s': %s\n", buf_ptr(ver_buf), err_str(err)); | 61 | fprintf(stderr, "Unable to parse glibc version '%s': %s\n", buf_ptr(ver_buf), err_str(err)); |
| ... | @@ -186,9 +186,9 @@ Error glibc_build_dummies_and_maps(CodeGen *g, const ZigGLibCAbi *glibc_abi, con | ... | @@ -186,9 +186,9 @@ Error glibc_build_dummies_and_maps(CodeGen *g, const ZigGLibCAbi *glibc_abi, con |
| 186 | cache_buf(cache_hash, compiler_id); | 186 | cache_buf(cache_hash, compiler_id); |
| 187 | cache_int(cache_hash, target->arch); | 187 | cache_int(cache_hash, target->arch); |
| 188 | cache_int(cache_hash, target->abi); | 188 | cache_int(cache_hash, target->abi); |
| 189 | cache_int(cache_hash, target->glibc_version->major); | 189 | cache_int(cache_hash, target->glibc_or_darwin_version->major); |
| 190 | cache_int(cache_hash, target->glibc_version->minor); | 190 | cache_int(cache_hash, target->glibc_or_darwin_version->minor); |
| 191 | cache_int(cache_hash, target->glibc_version->patch); | 191 | cache_int(cache_hash, target->glibc_or_darwin_version->patch); |
| 192 | 192 | ||
| 193 | Buf digest = BUF_INIT; | 193 | Buf digest = BUF_INIT; |
| 194 | buf_resize(&digest, 0); | 194 | buf_resize(&digest, 0); |
| ... | @@ -224,10 +224,10 @@ Error glibc_build_dummies_and_maps(CodeGen *g, const ZigGLibCAbi *glibc_abi, con | ... | @@ -224,10 +224,10 @@ Error glibc_build_dummies_and_maps(CodeGen *g, const ZigGLibCAbi *glibc_abi, con |
| 224 | 224 | ||
| 225 | uint8_t target_ver_index = 0; | 225 | uint8_t target_ver_index = 0; |
| 226 | for (;target_ver_index < glibc_abi->all_versions.length; target_ver_index += 1) { | 226 | for (;target_ver_index < glibc_abi->all_versions.length; target_ver_index += 1) { |
| 227 | const ZigGLibCVersion *this_ver = &glibc_abi->all_versions.at(target_ver_index); | 227 | const Stage2SemVer *this_ver = &glibc_abi->all_versions.at(target_ver_index); |
| 228 | if (this_ver->major == target->glibc_version->major && | 228 | if (this_ver->major == target->glibc_or_darwin_version->major && |
| 229 | this_ver->minor == target->glibc_version->minor && | 229 | this_ver->minor == target->glibc_or_darwin_version->minor && |
| 230 | this_ver->patch == target->glibc_version->patch) | 230 | this_ver->patch == target->glibc_or_darwin_version->patch) |
| 231 | { | 231 | { |
| 232 | break; | 232 | break; |
| 233 | } | 233 | } |
| ... | @@ -235,9 +235,9 @@ Error glibc_build_dummies_and_maps(CodeGen *g, const ZigGLibCAbi *glibc_abi, con | ... | @@ -235,9 +235,9 @@ Error glibc_build_dummies_and_maps(CodeGen *g, const ZigGLibCAbi *glibc_abi, con |
| 235 | if (target_ver_index == glibc_abi->all_versions.length) { | 235 | if (target_ver_index == glibc_abi->all_versions.length) { |
| 236 | if (verbose) { | 236 | if (verbose) { |
| 237 | fprintf(stderr, "Unrecognized glibc version: %d.%d.%d\n", | 237 | fprintf(stderr, "Unrecognized glibc version: %d.%d.%d\n", |
| 238 | target->glibc_version->major, | 238 | target->glibc_or_darwin_version->major, |
| 239 | target->glibc_version->minor, | 239 | target->glibc_or_darwin_version->minor, |
| 240 | target->glibc_version->patch); | 240 | target->glibc_or_darwin_version->patch); |
| 241 | } | 241 | } |
| 242 | return ErrorUnknownABI; | 242 | return ErrorUnknownABI; |
| 243 | } | 243 | } |
| ... | @@ -246,7 +246,7 @@ Error glibc_build_dummies_and_maps(CodeGen *g, const ZigGLibCAbi *glibc_abi, con | ... | @@ -246,7 +246,7 @@ Error glibc_build_dummies_and_maps(CodeGen *g, const ZigGLibCAbi *glibc_abi, con |
| 246 | Buf *map_contents = buf_alloc(); | 246 | Buf *map_contents = buf_alloc(); |
| 247 | 247 | ||
| 248 | for (uint8_t ver_i = 0; ver_i < glibc_abi->all_versions.length; ver_i += 1) { | 248 | for (uint8_t ver_i = 0; ver_i < glibc_abi->all_versions.length; ver_i += 1) { |
| 249 | const ZigGLibCVersion *ver = &glibc_abi->all_versions.at(ver_i); | 249 | const Stage2SemVer *ver = &glibc_abi->all_versions.at(ver_i); |
| 250 | if (ver->patch == 0) { | 250 | if (ver->patch == 0) { |
| 251 | buf_appendf(map_contents, "GLIBC_%d.%d { };\n", ver->major, ver->minor); | 251 | buf_appendf(map_contents, "GLIBC_%d.%d { };\n", ver->major, ver->minor); |
| 252 | } else { | 252 | } else { |
| ... | @@ -294,7 +294,7 @@ Error glibc_build_dummies_and_maps(CodeGen *g, const ZigGLibCAbi *glibc_abi, con | ... | @@ -294,7 +294,7 @@ Error glibc_build_dummies_and_maps(CodeGen *g, const ZigGLibCAbi *glibc_abi, con |
| 294 | uint8_t ver_index = ver_list->versions[ver_i]; | 294 | uint8_t ver_index = ver_list->versions[ver_i]; |
| 295 | 295 | ||
| 296 | Buf *stub_name; | 296 | Buf *stub_name; |
| 297 | const ZigGLibCVersion *ver = &glibc_abi->all_versions.at(ver_index); | 297 | const Stage2SemVer *ver = &glibc_abi->all_versions.at(ver_index); |
| 298 | const char *sym_name = buf_ptr(libc_fn->name); | 298 | const char *sym_name = buf_ptr(libc_fn->name); |
| 299 | if (ver->patch == 0) { | 299 | if (ver->patch == 0) { |
| 300 | stub_name = buf_sprintf("%s_%d_%d", sym_name, ver->major, ver->minor); | 300 | stub_name = buf_sprintf("%s_%d_%d", sym_name, ver->major, ver->minor); |
src/glibc.hpp+1-1| ... | @@ -32,7 +32,7 @@ struct ZigGLibCAbi { | ... | @@ -32,7 +32,7 @@ struct ZigGLibCAbi { |
| 32 | Buf *abi_txt_path; | 32 | Buf *abi_txt_path; |
| 33 | Buf *vers_txt_path; | 33 | Buf *vers_txt_path; |
| 34 | Buf *fns_txt_path; | 34 | Buf *fns_txt_path; |
| 35 | ZigList<ZigGLibCVersion> all_versions; | 35 | ZigList<Stage2SemVer> all_versions; |
| 36 | ZigList<ZigGLibCFn> all_functions; | 36 | ZigList<ZigGLibCFn> all_functions; |
| 37 | // The value is a pointer to all_functions.length items and each item is an index | 37 | // The value is a pointer to all_functions.length items and each item is an index |
| 38 | // into all_functions. | 38 | // into all_functions. |
src/link.cpp+17-110| ... | @@ -2371,99 +2371,6 @@ static void construct_linker_job_coff(LinkJob *lj) { | ... | @@ -2371,99 +2371,6 @@ static void construct_linker_job_coff(LinkJob *lj) { |
| 2371 | } | 2371 | } |
| 2372 | } | 2372 | } |
| 2373 | 2373 | ||
| 2374 | |||
| 2375 | // Parse (([0-9]+)(.([0-9]+)(.([0-9]+)?))?)? and return the | ||
| 2376 | // grouped values as integers. Numbers which are not provided are set to 0. | ||
| 2377 | // return true if the entire string was parsed (9.2), or all groups were | ||
| 2378 | // parsed (10.3.5extrastuff). | ||
| 2379 | static bool darwin_get_release_version(const char *str, int *major, int *minor, int *micro, bool *had_extra) { | ||
| 2380 | *had_extra = false; | ||
| 2381 | |||
| 2382 | *major = 0; | ||
| 2383 | *minor = 0; | ||
| 2384 | *micro = 0; | ||
| 2385 | |||
| 2386 | if (*str == '\0') | ||
| 2387 | return false; | ||
| 2388 | |||
| 2389 | char *end; | ||
| 2390 | *major = (int)strtol(str, &end, 10); | ||
| 2391 | if (*str != '\0' && *end == '\0') | ||
| 2392 | return true; | ||
| 2393 | if (*end != '.') | ||
| 2394 | return false; | ||
| 2395 | |||
| 2396 | str = end + 1; | ||
| 2397 | *minor = (int)strtol(str, &end, 10); | ||
| 2398 | if (*str != '\0' && *end == '\0') | ||
| 2399 | return true; | ||
| 2400 | if (*end != '.') | ||
| 2401 | return false; | ||
| 2402 | |||
| 2403 | str = end + 1; | ||
| 2404 | *micro = (int)strtol(str, &end, 10); | ||
| 2405 | if (*str != '\0' && *end == '\0') | ||
| 2406 | return true; | ||
| 2407 | if (str == end) | ||
| 2408 | return false; | ||
| 2409 | *had_extra = true; | ||
| 2410 | return true; | ||
| 2411 | } | ||
| 2412 | |||
| 2413 | enum DarwinPlatformKind { | ||
| 2414 | MacOS, | ||
| 2415 | IPhoneOS, | ||
| 2416 | IPhoneOSSimulator, | ||
| 2417 | }; | ||
| 2418 | |||
| 2419 | struct DarwinPlatform { | ||
| 2420 | DarwinPlatformKind kind; | ||
| 2421 | int major; | ||
| 2422 | int minor; | ||
| 2423 | int micro; | ||
| 2424 | }; | ||
| 2425 | |||
| 2426 | static void get_darwin_platform(LinkJob *lj, DarwinPlatform *platform) { | ||
| 2427 | CodeGen *g = lj->codegen; | ||
| 2428 | |||
| 2429 | if (g->mmacosx_version_min) { | ||
| 2430 | platform->kind = MacOS; | ||
| 2431 | } else if (g->mios_version_min) { | ||
| 2432 | platform->kind = IPhoneOS; | ||
| 2433 | } else if (g->zig_target->os == OsMacOSX) { | ||
| 2434 | platform->kind = MacOS; | ||
| 2435 | g->mmacosx_version_min = buf_create_from_str("10.14"); | ||
| 2436 | } else { | ||
| 2437 | zig_panic("unable to infer -mmacosx-version-min or -mios-version-min"); | ||
| 2438 | } | ||
| 2439 | |||
| 2440 | bool had_extra; | ||
| 2441 | if (platform->kind == MacOS) { | ||
| 2442 | if (!darwin_get_release_version(buf_ptr(g->mmacosx_version_min), | ||
| 2443 | &platform->major, &platform->minor, &platform->micro, &had_extra) || | ||
| 2444 | had_extra || platform->major != 10 || platform->minor >= 100 || platform->micro >= 100) | ||
| 2445 | { | ||
| 2446 | zig_panic("invalid -mmacosx-version-min"); | ||
| 2447 | } | ||
| 2448 | } else if (platform->kind == IPhoneOS) { | ||
| 2449 | if (!darwin_get_release_version(buf_ptr(g->mios_version_min), | ||
| 2450 | &platform->major, &platform->minor, &platform->micro, &had_extra) || | ||
| 2451 | had_extra || platform->major >= 10 || platform->minor >= 100 || platform->micro >= 100) | ||
| 2452 | { | ||
| 2453 | zig_panic("invalid -mios-version-min"); | ||
| 2454 | } | ||
| 2455 | } else { | ||
| 2456 | zig_unreachable(); | ||
| 2457 | } | ||
| 2458 | |||
| 2459 | if (platform->kind == IPhoneOS && | ||
| 2460 | (g->zig_target->arch == ZigLLVM_x86 || | ||
| 2461 | g->zig_target->arch == ZigLLVM_x86_64)) | ||
| 2462 | { | ||
| 2463 | platform->kind = IPhoneOSSimulator; | ||
| 2464 | } | ||
| 2465 | } | ||
| 2466 | |||
| 2467 | static void construct_linker_job_macho(LinkJob *lj) { | 2374 | static void construct_linker_job_macho(LinkJob *lj) { |
| 2468 | CodeGen *g = lj->codegen; | 2375 | CodeGen *g = lj->codegen; |
| 2469 | 2376 | ||
| ... | @@ -2507,25 +2414,25 @@ static void construct_linker_job_macho(LinkJob *lj) { | ... | @@ -2507,25 +2414,25 @@ static void construct_linker_job_macho(LinkJob *lj) { |
| 2507 | lj->args.append("-arch"); | 2414 | lj->args.append("-arch"); |
| 2508 | lj->args.append(get_darwin_arch_string(g->zig_target)); | 2415 | lj->args.append(get_darwin_arch_string(g->zig_target)); |
| 2509 | 2416 | ||
| 2510 | DarwinPlatform platform; | 2417 | if (g->zig_target->glibc_or_darwin_version != nullptr) { |
| 2511 | get_darwin_platform(lj, &platform); | 2418 | if (g->zig_target->os == OsMacOSX) { |
| 2512 | switch (platform.kind) { | ||
| 2513 | case MacOS: | ||
| 2514 | lj->args.append("-macosx_version_min"); | 2419 | lj->args.append("-macosx_version_min"); |
| 2515 | break; | 2420 | } else if (g->zig_target->os == OsIOS) { |
| 2516 | case IPhoneOS: | 2421 | if (g->zig_target->arch == ZigLLVM_x86 || g->zig_target->arch == ZigLLVM_x86_64) { |
| 2517 | lj->args.append("-iphoneos_version_min"); | 2422 | lj->args.append("-ios_simulator_version_min"); |
| 2518 | break; | 2423 | } else { |
| 2519 | case IPhoneOSSimulator: | 2424 | lj->args.append("-iphoneos_version_min"); |
| 2520 | lj->args.append("-ios_simulator_version_min"); | 2425 | } |
| 2521 | break; | 2426 | } |
| 2522 | } | 2427 | Buf *version_string = buf_sprintf("%d.%d.%d", |
| 2523 | Buf *version_string = buf_sprintf("%d.%d.%d", platform.major, platform.minor, platform.micro); | 2428 | g->zig_target->glibc_or_darwin_version->major, |
| 2524 | lj->args.append(buf_ptr(version_string)); | 2429 | g->zig_target->glibc_or_darwin_version->minor, |
| 2525 | 2430 | g->zig_target->glibc_or_darwin_version->patch); | |
| 2526 | lj->args.append("-sdk_version"); | 2431 | lj->args.append(buf_ptr(version_string)); |
| 2527 | lj->args.append(buf_ptr(version_string)); | ||
| 2528 | 2432 | ||
| 2433 | lj->args.append("-sdk_version"); | ||
| 2434 | lj->args.append(buf_ptr(version_string)); | ||
| 2435 | } | ||
| 2529 | 2436 | ||
| 2530 | if (g->out_type == OutTypeExe) { | 2437 | if (g->out_type == OutTypeExe) { |
| 2531 | lj->args.append("-pie"); | 2438 | lj->args.append("-pie"); |
src/main.cpp-20| ... | @@ -127,8 +127,6 @@ static int print_full_usage(const char *arg0, FILE *file, int return_code) { | ... | @@ -127,8 +127,6 @@ static int print_full_usage(const char *arg0, FILE *file, int return_code) { |
| 127 | " --subsystem [subsystem] (windows) /SUBSYSTEM:<subsystem> to the linker\n" | 127 | " --subsystem [subsystem] (windows) /SUBSYSTEM:<subsystem> to the linker\n" |
| 128 | " -F[dir] (darwin) add search path for frameworks\n" | 128 | " -F[dir] (darwin) add search path for frameworks\n" |
| 129 | " -framework [name] (darwin) link against framework\n" | 129 | " -framework [name] (darwin) link against framework\n" |
| 130 | " -mios-version-min [ver] (darwin) set iOS deployment target\n" | ||
| 131 | " -mmacosx-version-min [ver] (darwin) set Mac OS X deployment target\n" | ||
| 132 | " --ver-major [ver] dynamic library semver major version\n" | 130 | " --ver-major [ver] dynamic library semver major version\n" |
| 133 | " --ver-minor [ver] dynamic library semver minor version\n" | 131 | " --ver-minor [ver] dynamic library semver minor version\n" |
| 134 | " --ver-patch [ver] dynamic library semver patch version\n" | 132 | " --ver-patch [ver] dynamic library semver patch version\n" |
| ... | @@ -414,8 +412,6 @@ static int main0(int argc, char **argv) { | ... | @@ -414,8 +412,6 @@ static int main0(int argc, char **argv) { |
| 414 | bool have_libc = false; | 412 | bool have_libc = false; |
| 415 | const char *target_string = nullptr; | 413 | const char *target_string = nullptr; |
| 416 | bool rdynamic = false; | 414 | bool rdynamic = false; |
| 417 | const char *mmacosx_version_min = nullptr; | ||
| 418 | const char *mios_version_min = nullptr; | ||
| 419 | const char *linker_script = nullptr; | 415 | const char *linker_script = nullptr; |
| 420 | Buf *version_script = nullptr; | 416 | Buf *version_script = nullptr; |
| 421 | ZigList<const char *> rpath_list = {0}; | 417 | ZigList<const char *> rpath_list = {0}; |
| ... | @@ -844,10 +840,6 @@ static int main0(int argc, char **argv) { | ... | @@ -844,10 +840,6 @@ static int main0(int argc, char **argv) { |
| 844 | cache_dir = argv[i]; | 840 | cache_dir = argv[i]; |
| 845 | } else if (strcmp(arg, "-target") == 0) { | 841 | } else if (strcmp(arg, "-target") == 0) { |
| 846 | target_string = argv[i]; | 842 | target_string = argv[i]; |
| 847 | } else if (strcmp(arg, "-mmacosx-version-min") == 0) { | ||
| 848 | mmacosx_version_min = argv[i]; | ||
| 849 | } else if (strcmp(arg, "-mios-version-min") == 0) { | ||
| 850 | mios_version_min = argv[i]; | ||
| 851 | } else if (strcmp(arg, "-framework") == 0) { | 843 | } else if (strcmp(arg, "-framework") == 0) { |
| 852 | frameworks.append(argv[i]); | 844 | frameworks.append(argv[i]); |
| 853 | } else if (strcmp(arg, "--linker-script") == 0) { | 845 | } else if (strcmp(arg, "--linker-script") == 0) { |
| ... | @@ -1240,18 +1232,6 @@ static int main0(int argc, char **argv) { | ... | @@ -1240,18 +1232,6 @@ static int main0(int argc, char **argv) { |
| 1240 | } | 1232 | } |
| 1241 | 1233 | ||
| 1242 | codegen_set_rdynamic(g, rdynamic); | 1234 | codegen_set_rdynamic(g, rdynamic); |
| 1243 | if (mmacosx_version_min && mios_version_min) { | ||
| 1244 | fprintf(stderr, "-mmacosx-version-min and -mios-version-min options not allowed together\n"); | ||
| 1245 | return main_exit(root_progress_node, EXIT_FAILURE); | ||
| 1246 | } | ||
| 1247 | |||
| 1248 | if (mmacosx_version_min) { | ||
| 1249 | codegen_set_mmacosx_version_min(g, buf_create_from_str(mmacosx_version_min)); | ||
| 1250 | } | ||
| 1251 | |||
| 1252 | if (mios_version_min) { | ||
| 1253 | codegen_set_mios_version_min(g, buf_create_from_str(mios_version_min)); | ||
| 1254 | } | ||
| 1255 | 1235 | ||
| 1256 | if (test_filter) { | 1236 | if (test_filter) { |
| 1257 | codegen_set_test_filter(g, buf_create_from_str(test_filter)); | 1237 | codegen_set_test_filter(g, buf_create_from_str(test_filter)); |
src/stage2.cpp+1-1| ... | @@ -186,7 +186,7 @@ static void get_native_target(ZigTarget *target) { | ... | @@ -186,7 +186,7 @@ static void get_native_target(ZigTarget *target) { |
| 186 | target->abi = target_default_abi(target->arch, target->os); | 186 | target->abi = target_default_abi(target->arch, target->os); |
| 187 | } | 187 | } |
| 188 | if (target_is_glibc(target)) { | 188 | if (target_is_glibc(target)) { |
| 189 | target->glibc_version = heap::c_allocator.create<ZigGLibCVersion>(); | 189 | target->glibc_or_darwin_version = heap::c_allocator.create<Stage2SemVer>(); |
| 190 | target_init_default_glibc_version(target); | 190 | target_init_default_glibc_version(target); |
| 191 | } | 191 | } |
| 192 | } | 192 | } |
src/stage2.h+4-5| ... | @@ -270,14 +270,12 @@ enum Os { | ... | @@ -270,14 +270,12 @@ enum Os { |
| 270 | }; | 270 | }; |
| 271 | 271 | ||
| 272 | // ABI warning | 272 | // ABI warning |
| 273 | struct ZigGLibCVersion { | 273 | struct Stage2SemVer { |
| 274 | uint32_t major; // always 2 | 274 | uint32_t major; |
| 275 | uint32_t minor; | 275 | uint32_t minor; |
| 276 | uint32_t patch; | 276 | uint32_t patch; |
| 277 | }; | 277 | }; |
| 278 | 278 | ||
| 279 | struct Stage2TargetData; | ||
| 280 | |||
| 281 | // ABI warning | 279 | // ABI warning |
| 282 | struct ZigTarget { | 280 | struct ZigTarget { |
| 283 | enum ZigLLVM_ArchType arch; | 281 | enum ZigLLVM_ArchType arch; |
| ... | @@ -288,7 +286,8 @@ struct ZigTarget { | ... | @@ -288,7 +286,8 @@ struct ZigTarget { |
| 288 | 286 | ||
| 289 | bool is_native; | 287 | bool is_native; |
| 290 | 288 | ||
| 291 | struct ZigGLibCVersion *glibc_version; // null means default | 289 | // null means default. this is double-purposed to be darwin min version |
| 290 | struct Stage2SemVer *glibc_or_darwin_version; | ||
| 292 | 291 | ||
| 293 | const char *llvm_cpu_name; | 292 | const char *llvm_cpu_name; |
| 294 | const char *llvm_cpu_features; | 293 | const char *llvm_cpu_features; |
src/target.cpp+2-2| ... | @@ -347,7 +347,7 @@ const char *target_abi_name(ZigLLVM_EnvironmentType abi) { | ... | @@ -347,7 +347,7 @@ const char *target_abi_name(ZigLLVM_EnvironmentType abi) { |
| 347 | return ZigLLVMGetEnvironmentTypeName(abi); | 347 | return ZigLLVMGetEnvironmentTypeName(abi); |
| 348 | } | 348 | } |
| 349 | 349 | ||
| 350 | Error target_parse_glibc_version(ZigGLibCVersion *glibc_ver, const char *text) { | 350 | Error target_parse_glibc_version(Stage2SemVer *glibc_ver, const char *text) { |
| 351 | glibc_ver->major = 2; | 351 | glibc_ver->major = 2; |
| 352 | glibc_ver->minor = 0; | 352 | glibc_ver->minor = 0; |
| 353 | glibc_ver->patch = 0; | 353 | glibc_ver->patch = 0; |
| ... | @@ -371,7 +371,7 @@ Error target_parse_glibc_version(ZigGLibCVersion *glibc_ver, const char *text) { | ... | @@ -371,7 +371,7 @@ Error target_parse_glibc_version(ZigGLibCVersion *glibc_ver, const char *text) { |
| 371 | } | 371 | } |
| 372 | 372 | ||
| 373 | void target_init_default_glibc_version(ZigTarget *target) { | 373 | void target_init_default_glibc_version(ZigTarget *target) { |
| 374 | *target->glibc_version = {2, 17, 0}; | 374 | *target->glibc_or_darwin_version = {2, 17, 0}; |
| 375 | } | 375 | } |
| 376 | 376 | ||
| 377 | Error target_parse_arch(ZigLLVM_ArchType *out_arch, const char *arch_ptr, size_t arch_len) { | 377 | Error target_parse_arch(ZigLLVM_ArchType *out_arch, const char *arch_ptr, size_t arch_len) { |
src/target.hpp+1-1| ... | @@ -46,7 +46,7 @@ Error target_parse_arch(ZigLLVM_ArchType *arch, const char *arch_ptr, size_t arc | ... | @@ -46,7 +46,7 @@ Error target_parse_arch(ZigLLVM_ArchType *arch, const char *arch_ptr, size_t arc |
| 46 | Error target_parse_os(Os *os, const char *os_ptr, size_t os_len); | 46 | Error target_parse_os(Os *os, const char *os_ptr, size_t os_len); |
| 47 | Error target_parse_abi(ZigLLVM_EnvironmentType *abi, const char *abi_ptr, size_t abi_len); | 47 | Error target_parse_abi(ZigLLVM_EnvironmentType *abi, const char *abi_ptr, size_t abi_len); |
| 48 | 48 | ||
| 49 | Error target_parse_glibc_version(ZigGLibCVersion *out, const char *text); | 49 | Error target_parse_glibc_version(Stage2SemVer *out, const char *text); |
| 50 | void target_init_default_glibc_version(ZigTarget *target); | 50 | void target_init_default_glibc_version(ZigTarget *target); |
| 51 | 51 | ||
| 52 | size_t target_arch_count(void); | 52 | size_t target_arch_count(void); |
test/cli.zig+1-1| ... | @@ -92,7 +92,7 @@ fn testZigInitLib(zig_exe: []const u8, dir_path: []const u8) !void { | ... | @@ -92,7 +92,7 @@ fn testZigInitLib(zig_exe: []const u8, dir_path: []const u8) !void { |
| 92 | fn testZigInitExe(zig_exe: []const u8, dir_path: []const u8) !void { | 92 | fn testZigInitExe(zig_exe: []const u8, dir_path: []const u8) !void { |
| 93 | _ = try exec(dir_path, &[_][]const u8{ zig_exe, "init-exe" }); | 93 | _ = try exec(dir_path, &[_][]const u8{ zig_exe, "init-exe" }); |
| 94 | const run_result = try exec(dir_path, &[_][]const u8{ zig_exe, "build", "run" }); | 94 | const run_result = try exec(dir_path, &[_][]const u8{ zig_exe, "build", "run" }); |
| 95 | testing.expect(std.mem.eql(u8, run_result.stderr, "All your base are belong to us.\n")); | 95 | testing.expect(std.mem.eql(u8, run_result.stderr, "All your codebase are belong to us.\n")); |
| 96 | } | 96 | } |
| 97 | 97 | ||
| 98 | fn testGodboltApi(zig_exe: []const u8, dir_path: []const u8) anyerror!void { | 98 | fn testGodboltApi(zig_exe: []const u8, dir_path: []const u8) anyerror!void { |