diff options
Diffstat (limited to 'lib/std')
| -rw-r--r-- | lib/std/Build/Step/Compile.zig | 11 | ||||
| -rw-r--r-- | lib/std/target.zig | 104 |
2 files changed, 59 insertions, 56 deletions
diff --git a/lib/std/Build/Step/Compile.zig b/lib/std/Build/Step/Compile.zig index 8d6744062f..89cc2ecfd9 100644 --- a/lib/std/Build/Step/Compile.zig +++ b/lib/std/Build/Step/Compile.zig @@ -1072,17 +1072,20 @@ pub fn addConfigHeader(self: *Compile, config_header: *Step.ConfigHeader) void { } pub fn addLibraryPath(self: *Compile, directory_source: LazyPath) void { - self.lib_paths.append(directory_source) catch @panic("OOM"); + const b = self.step.owner; + self.lib_paths.append(directory_source.dupe(b)) catch @panic("OOM"); directory_source.addStepDependencies(&self.step); } pub fn addRPath(self: *Compile, directory_source: LazyPath) void { - self.rpaths.append(directory_source) catch @panic("OOM"); + const b = self.step.owner; + self.rpaths.append(directory_source.dupe(b)) catch @panic("OOM"); directory_source.addStepDependencies(&self.step); } pub fn addFrameworkPath(self: *Compile, directory_source: LazyPath) void { - self.framework_dirs.append(directory_source) catch @panic("OOM"); + const b = self.step.owner; + self.framework_dirs.append(directory_source.dupe(b)) catch @panic("OOM"); directory_source.addStepDependencies(&self.step); } @@ -1146,7 +1149,7 @@ pub fn addVcpkgPaths(self: *Compile, linkage: Compile.Linkage) !void { const include_path = b.pathJoin(&.{ root, "installed", triplet, "include" }); errdefer allocator.free(include_path); - try self.include_dirs.append(IncludeDir{ .raw_path = include_path }); + try self.include_dirs.append(IncludeDir{ .path = .{ .path = include_path } }); const lib_path = b.pathJoin(&.{ root, "installed", triplet, "lib" }); try self.lib_paths.append(.{ .path = lib_path }); diff --git a/lib/std/target.zig b/lib/std/target.zig index 0640316825..c3d12b2759 100644 --- a/lib/std/target.zig +++ b/lib/std/target.zig @@ -59,14 +59,14 @@ pub const Target = struct { plan9, other, - pub fn isDarwin(tag: Tag) bool { + pub inline fn isDarwin(tag: Tag) bool { return switch (tag) { .ios, .macos, .watchos, .tvos => true, else => false, }; } - pub fn isBSD(tag: Tag) bool { + pub inline fn isBSD(tag: Tag) bool { return tag.isDarwin() or switch (tag) { .kfreebsd, .freebsd, .openbsd, .netbsd, .dragonfly => true, else => false, @@ -135,7 +135,7 @@ pub const Target = struct { }; /// Returns whether the first version `self` is newer (greater) than or equal to the second version `ver`. - pub fn isAtLeast(self: WindowsVersion, ver: WindowsVersion) bool { + pub inline fn isAtLeast(self: WindowsVersion, ver: WindowsVersion) bool { return @intFromEnum(self) >= @intFromEnum(ver); } @@ -143,13 +143,13 @@ pub const Target = struct { min: WindowsVersion, max: WindowsVersion, - pub fn includesVersion(self: Range, ver: WindowsVersion) bool { + pub inline fn includesVersion(self: Range, ver: WindowsVersion) bool { return @intFromEnum(ver) >= @intFromEnum(self.min) and @intFromEnum(ver) <= @intFromEnum(self.max); } /// Checks if system is guaranteed to be at least `version` or older than `version`. /// Returns `null` if a runtime check is required. - pub fn isAtLeast(self: Range, ver: WindowsVersion) ?bool { + pub inline fn isAtLeast(self: Range, ver: WindowsVersion) ?bool { if (@intFromEnum(self.min) >= @intFromEnum(ver)) return true; if (@intFromEnum(self.max) < @intFromEnum(ver)) return false; return null; @@ -187,13 +187,13 @@ pub const Target = struct { range: Version.Range, glibc: Version, - pub fn includesVersion(self: LinuxVersionRange, ver: Version) bool { + pub inline fn includesVersion(self: LinuxVersionRange, ver: Version) bool { return self.range.includesVersion(ver); } /// Checks if system is guaranteed to be at least `version` or older than `version`. /// Returns `null` if a runtime check is required. - pub fn isAtLeast(self: LinuxVersionRange, ver: Version) ?bool { + pub inline fn isAtLeast(self: LinuxVersionRange, ver: Version) ?bool { return self.range.isAtLeast(ver); } }; @@ -360,7 +360,7 @@ pub const Target = struct { /// Provides a tagged union. `Target` does not store the tag because it is /// redundant with the OS tag; this function abstracts that part away. - pub fn getVersionRange(self: Os) TaggedVersionRange { + pub inline fn getVersionRange(self: Os) TaggedVersionRange { switch (self.tag) { .linux => return TaggedVersionRange{ .linux = self.version_range.linux }, .windows => return TaggedVersionRange{ .windows = self.version_range.windows }, @@ -382,7 +382,7 @@ pub const Target = struct { /// Checks if system is guaranteed to be at least `version` or older than `version`. /// Returns `null` if a runtime check is required. - pub fn isAtLeast(self: Os, comptime tag: Tag, version: anytype) ?bool { + pub inline fn isAtLeast(self: Os, comptime tag: Tag, version: anytype) ?bool { if (self.tag != tag) return false; return switch (tag) { @@ -395,7 +395,7 @@ pub const Target = struct { /// On Darwin, we always link libSystem which contains libc. /// Similarly on FreeBSD and NetBSD we always link system libc /// since this is the stable syscall interface. - pub fn requiresLibC(os: Os) bool { + pub inline fn requiresLibC(os: Os) bool { return switch (os.tag) { .freebsd, .netbsd, @@ -569,21 +569,21 @@ pub const Target = struct { } } - pub fn isGnu(abi: Abi) bool { + pub inline fn isGnu(abi: Abi) bool { return switch (abi) { .gnu, .gnuabin32, .gnuabi64, .gnueabi, .gnueabihf, .gnux32 => true, else => false, }; } - pub fn isMusl(abi: Abi) bool { + pub inline fn isMusl(abi: Abi) bool { return switch (abi) { .musl, .musleabi, .musleabihf => true, else => false, }; } - pub fn floatAbi(abi: Abi) FloatAbi { + pub inline fn floatAbi(abi: Abi) FloatAbi { return switch (abi) { .gnueabihf, .eabihf, @@ -871,95 +871,95 @@ pub const Target = struct { // map one-to-one with the ZigLLVM_ArchType enum. spu_2, - pub fn isX86(arch: Arch) bool { + pub inline fn isX86(arch: Arch) bool { return switch (arch) { .x86, .x86_64 => true, else => false, }; } - pub fn isARM(arch: Arch) bool { + pub inline fn isARM(arch: Arch) bool { return switch (arch) { .arm, .armeb => true, else => false, }; } - pub fn isAARCH64(arch: Arch) bool { + pub inline fn isAARCH64(arch: Arch) bool { return switch (arch) { .aarch64, .aarch64_be, .aarch64_32 => true, else => false, }; } - pub fn isThumb(arch: Arch) bool { + pub inline fn isThumb(arch: Arch) bool { return switch (arch) { .thumb, .thumbeb => true, else => false, }; } - pub fn isArmOrThumb(arch: Arch) bool { + pub inline fn isArmOrThumb(arch: Arch) bool { return arch.isARM() or arch.isThumb(); } - pub fn isWasm(arch: Arch) bool { + pub inline fn isWasm(arch: Arch) bool { return switch (arch) { .wasm32, .wasm64 => true, else => false, }; } - pub fn isRISCV(arch: Arch) bool { + pub inline fn isRISCV(arch: Arch) bool { return switch (arch) { .riscv32, .riscv64 => true, else => false, }; } - pub fn isMIPS(arch: Arch) bool { + pub inline fn isMIPS(arch: Arch) bool { return switch (arch) { .mips, .mipsel, .mips64, .mips64el => true, else => false, }; } - pub fn isPPC(arch: Arch) bool { + pub inline fn isPPC(arch: Arch) bool { return switch (arch) { .powerpc, .powerpcle => true, else => false, }; } - pub fn isPPC64(arch: Arch) bool { + pub inline fn isPPC64(arch: Arch) bool { return switch (arch) { .powerpc64, .powerpc64le => true, else => false, }; } - pub fn isSPARC(arch: Arch) bool { + pub inline fn isSPARC(arch: Arch) bool { return switch (arch) { .sparc, .sparcel, .sparc64 => true, else => false, }; } - pub fn isSpirV(arch: Arch) bool { + pub inline fn isSpirV(arch: Arch) bool { return switch (arch) { .spirv32, .spirv64 => true, else => false, }; } - pub fn isBpf(arch: Arch) bool { + pub inline fn isBpf(arch: Arch) bool { return switch (arch) { .bpfel, .bpfeb => true, else => false, }; } - pub fn isNvptx(arch: Arch) bool { + pub inline fn isNvptx(arch: Arch) bool { return switch (arch) { .nvptx, .nvptx64 => true, else => false, @@ -975,7 +975,7 @@ pub const Target = struct { return error.UnknownCpuModel; } - pub fn toElfMachine(arch: Arch) std.elf.EM { + pub inline fn toElfMachine(arch: Arch) std.elf.EM { return switch (arch) { .avr => .AVR, .msp430 => .MSP430, @@ -1040,7 +1040,7 @@ pub const Target = struct { }; } - pub fn toCoffMachine(arch: Arch) std.coff.MachineType { + pub inline fn toCoffMachine(arch: Arch) std.coff.MachineType { return switch (arch) { .avr => .Unknown, .msp430 => .Unknown, @@ -1105,7 +1105,7 @@ pub const Target = struct { }; } - pub fn endian(arch: Arch) std.builtin.Endian { + pub inline fn endian(arch: Arch) std.builtin.Endian { return switch (arch) { .avr, .arm, @@ -1176,7 +1176,7 @@ pub const Target = struct { } /// Returns whether this architecture supports the address space - pub fn supportsAddressSpace(arch: Arch, address_space: std.builtin.AddressSpace) bool { + pub inline fn supportsAddressSpace(arch: Arch, address_space: std.builtin.AddressSpace) bool { const is_nvptx = arch == .nvptx or arch == .nvptx64; const is_spirv = arch == .spirv32 or arch == .spirv64; const is_gpu = is_nvptx or is_spirv or arch == .amdgcn; @@ -1418,51 +1418,51 @@ pub const Target = struct { return libPrefix_os_abi(self.os.tag, self.abi); } - pub fn isMinGW(self: Target) bool { + pub inline fn isMinGW(self: Target) bool { return self.os.tag == .windows and self.isGnu(); } - pub fn isGnu(self: Target) bool { + pub inline fn isGnu(self: Target) bool { return self.abi.isGnu(); } - pub fn isMusl(self: Target) bool { + pub inline fn isMusl(self: Target) bool { return self.abi.isMusl(); } - pub fn isAndroid(self: Target) bool { + pub inline fn isAndroid(self: Target) bool { return self.abi == .android; } - pub fn isWasm(self: Target) bool { + pub inline fn isWasm(self: Target) bool { return self.cpu.arch.isWasm(); } - pub fn isDarwin(self: Target) bool { + pub inline fn isDarwin(self: Target) bool { return self.os.tag.isDarwin(); } - pub fn isBSD(self: Target) bool { + pub inline fn isBSD(self: Target) bool { return self.os.tag.isBSD(); } - pub fn isBpfFreestanding(self: Target) bool { + pub inline fn isBpfFreestanding(self: Target) bool { return self.cpu.arch.isBpf() and self.os.tag == .freestanding; } - pub fn isGnuLibC_os_tag_abi(os_tag: Os.Tag, abi: Abi) bool { + pub inline fn isGnuLibC_os_tag_abi(os_tag: Os.Tag, abi: Abi) bool { return os_tag == .linux and abi.isGnu(); } - pub fn isGnuLibC(self: Target) bool { + pub inline fn isGnuLibC(self: Target) bool { return isGnuLibC_os_tag_abi(self.os.tag, self.abi); } - pub fn supportsNewStackCall(self: Target) bool { + pub inline fn supportsNewStackCall(self: Target) bool { return !self.cpu.arch.isWasm(); } - pub fn isSpirV(self: Target) bool { + pub inline fn isSpirV(self: Target) bool { return self.cpu.arch.isSpirV(); } @@ -1472,11 +1472,11 @@ pub const Target = struct { soft_fp, }; - pub fn getFloatAbi(self: Target) FloatAbi { + pub inline fn getFloatAbi(self: Target) FloatAbi { return self.abi.floatAbi(); } - pub fn hasDynamicLinker(self: Target) bool { + pub inline fn hasDynamicLinker(self: Target) bool { if (self.cpu.arch.isWasm()) { return false; } @@ -1832,7 +1832,7 @@ pub const Target = struct { }; } - pub fn ptrBitWidth(target: Target) u16 { + pub inline fn ptrBitWidth(target: Target) u16 { switch (target.abi) { .gnux32, .muslx32, .gnuabin32, .gnuilp32 => return 32, .gnuabi64 => return 64, @@ -1909,7 +1909,7 @@ pub const Target = struct { } } - pub fn stackAlignment(target: Target) u16 { + pub inline fn stackAlignment(target: Target) u16 { return switch (target.cpu.arch) { .m68k => 2, .amdgcn => 4, @@ -1954,7 +1954,7 @@ pub const Target = struct { /// Default signedness of `char` for the native C compiler for this target /// Note that char signedness is implementation-defined and many compilers provide /// an option to override the default signedness e.g. GCC's -funsigned-char / -fsigned-char - pub fn charSignedness(target: Target) std.builtin.Signedness { + pub inline fn charSignedness(target: Target) std.builtin.Signedness { switch (target.cpu.arch) { .aarch64, .aarch64_32, @@ -1993,7 +1993,7 @@ pub const Target = struct { longdouble, }; - pub fn c_type_byte_size(t: Target, c_type: CType) u16 { + pub inline fn c_type_byte_size(t: Target, c_type: CType) u16 { return switch (c_type) { .char, .short, @@ -2019,7 +2019,7 @@ pub const Target = struct { }; } - pub fn c_type_bit_size(target: Target, c_type: CType) u16 { + pub inline fn c_type_bit_size(target: Target, c_type: CType) u16 { switch (target.os.tag) { .freestanding, .other => switch (target.cpu.arch) { .msp430 => switch (c_type) { @@ -2333,7 +2333,7 @@ pub const Target = struct { } } - pub fn c_type_alignment(target: Target, c_type: CType) u16 { + pub inline fn c_type_alignment(target: Target, c_type: CType) u16 { // Overrides for unusual alignments switch (target.cpu.arch) { .avr => return 1, @@ -2440,7 +2440,7 @@ pub const Target = struct { ); } - pub fn c_type_preferred_alignment(target: Target, c_type: CType) u16 { + pub inline fn c_type_preferred_alignment(target: Target, c_type: CType) u16 { // Overrides for unusual alignments switch (target.cpu.arch) { .arm, .armeb, .thumb, .thumbeb => switch (target.os.tag) { |
