diff --git a/.gitignore b/.gitignore index 335ec95..f1e9e44 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ -*.tar.gz +/*-build +/zig-*.tar.xz +/zig-*.tar.xz.minisig diff --git a/0001-ignore-target-lib-dirs-when-invoked-with-feach-lib-r.patch b/0001-ignore-target-lib-dirs-when-invoked-with-feach-lib-r.patch deleted file mode 100644 index 80fab5d..0000000 --- a/0001-ignore-target-lib-dirs-when-invoked-with-feach-lib-r.patch +++ /dev/null @@ -1,28 +0,0 @@ -From d505ddbb7f46ba974b5d8458fd7134901930f033 Mon Sep 17 00:00:00 2001 -From: Jan200101 -Date: Thu, 17 Feb 2022 18:00:58 +0100 -Subject: [PATCH] ignore target lib dirs when invoked with -feach-lib-rpath - -Signed-off-by: Jan200101 ---- - src/main.zig | 4 ---- - 1 file changed, 4 deletions(-) - -diff --git a/src/main.zig b/src/main.zig -index 7f50a7de6..a6bcf69a8 100644 ---- a/src/main.zig -+++ b/src/main.zig -@@ -2077,10 +2077,6 @@ fn buildOutputType( - clang_argv.appendAssumeCapacity(framework_dir); - framework_dirs.appendAssumeCapacity(framework_dir); - } -- -- for (paths.lib_dirs.items) |lib_dir| { -- try lib_dirs.append(lib_dir); -- } - for (paths.rpaths.items) |rpath| { - try rpath_list.append(rpath); - } --- -2.35.1 - diff --git a/0001-remove-native-lib-directories-from-rpath.patch b/0001-remove-native-lib-directories-from-rpath.patch new file mode 100644 index 0000000..24db582 --- /dev/null +++ b/0001-remove-native-lib-directories-from-rpath.patch @@ -0,0 +1,33 @@ +From a865b3569ace118cc1c1cd8d5d130ec316b0307d Mon Sep 17 00:00:00 2001 +From: Jan200101 +Date: Tue, 14 Apr 2026 19:04:40 +0200 +Subject: [PATCH 1/2] remove native lib directories from rpath + +Signed-off-by: Jan200101 +--- + src/main.zig | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/src/main.zig b/src/main.zig +index 0395a21a5f..86b6d9f86b 100644 +--- a/src/main.zig ++++ b/src/main.zig +@@ -4102,6 +4102,15 @@ fn createModule( + + try create_module.lib_directories.ensureUnusedCapacity(arena, paths.lib_dirs.items.len); + for (paths.lib_dirs.items) |path| addLibDirectoryWarn2(io, &create_module.lib_directories, path, true); ++ ++ for (paths.lib_dirs.items) |native_lib_dir| { ++ for (0.., create_module.rpath_list.items) |i, rpath_dir| { ++ if (std.mem.eql(u8, native_lib_dir, rpath_dir)) { ++ _ = create_module.rpath_list.orderedRemove(i); ++ break; ++ } ++ } ++ } + } + + if (create_module.libc_paths_file) |paths_file| { +-- +2.53.0 + diff --git a/0002-Remove-unsupported-LLVM-targets-for-EPEL.patch b/0002-Remove-unsupported-LLVM-targets-for-EPEL.patch new file mode 100644 index 0000000..a8b942f --- /dev/null +++ b/0002-Remove-unsupported-LLVM-targets-for-EPEL.patch @@ -0,0 +1,254 @@ +From 803935baf6a4730426afbb746adfd00c0ffc0f39 Mon Sep 17 00:00:00 2001 +From: Jan200101 +Date: Tue, 14 Apr 2026 19:20:26 +0200 +Subject: [PATCH 2/2] Remove unsupported LLVM targets for RHEL + +LLVM for RHEL is only build with a subset of targets +this blocks zig at the configuration stage. +This commit simply swaps them out with the one from +https://src.fedoraproject.org/rpms/llvm/blob/rawhide/f/llvm.spec + +Signed-off-by: Jan200101 +--- + cmake/Findllvm.cmake | 2 +- + src/codegen/llvm.zig | 97 ++++++++++---------------------------------- + src/target.zig | 43 +++++++++++--------- + 3 files changed, 45 insertions(+), 97 deletions(-) + +diff --git a/cmake/Findllvm.cmake b/cmake/Findllvm.cmake +index 0c08d4f0ac..ed4da12044 100644 +--- a/cmake/Findllvm.cmake ++++ b/cmake/Findllvm.cmake +@@ -83,7 +83,7 @@ if(ZIG_USE_LLVM_CONFIG) + OUTPUT_STRIP_TRAILING_WHITESPACE) + string(REPLACE " " ";" LLVM_TARGETS_BUILT "${LLVM_TARGETS_BUILT_SPACES}") + +- set(ZIG_LLVM_REQUIRED_TARGETS "AArch64;AMDGPU;ARM;AVR;BPF;Hexagon;Lanai;LoongArch;Mips;MSP430;NVPTX;PowerPC;RISCV;SPIRV;Sparc;SystemZ;VE;WebAssembly;X86;XCore") ++ set(ZIG_LLVM_REQUIRED_TARGETS "X86;AMDGPU;PowerPC;NVPTX;SystemZ;AArch64;BPF;WebAssembly;RISCV") + + set(ZIG_LLVM_REQUIRED_TARGETS_ENABLED TRUE) + foreach(TARGET_NAME IN LISTS ZIG_LLVM_REQUIRED_TARGETS) +diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig +index 1ba3b272da..1ac1f6adc8 100644 +--- a/src/codegen/llvm.zig ++++ b/src/codegen/llvm.zig +@@ -4736,20 +4736,6 @@ pub fn initializeLLVMTarget(arch: std.Target.Cpu.Arch) void { + bindings.LLVMInitializeAMDGPUAsmPrinter(); + bindings.LLVMInitializeAMDGPUAsmParser(); + }, +- .thumb, .thumbeb, .arm, .armeb => { +- bindings.LLVMInitializeARMTarget(); +- bindings.LLVMInitializeARMTargetInfo(); +- bindings.LLVMInitializeARMTargetMC(); +- bindings.LLVMInitializeARMAsmPrinter(); +- bindings.LLVMInitializeARMAsmParser(); +- }, +- .avr => { +- bindings.LLVMInitializeAVRTarget(); +- bindings.LLVMInitializeAVRTargetInfo(); +- bindings.LLVMInitializeAVRTargetMC(); +- bindings.LLVMInitializeAVRAsmPrinter(); +- bindings.LLVMInitializeAVRAsmParser(); +- }, + .bpfel, .bpfeb => { + bindings.LLVMInitializeBPFTarget(); + bindings.LLVMInitializeBPFTargetInfo(); +@@ -4757,34 +4743,6 @@ pub fn initializeLLVMTarget(arch: std.Target.Cpu.Arch) void { + bindings.LLVMInitializeBPFAsmPrinter(); + bindings.LLVMInitializeBPFAsmParser(); + }, +- .hexagon => { +- bindings.LLVMInitializeHexagonTarget(); +- bindings.LLVMInitializeHexagonTargetInfo(); +- bindings.LLVMInitializeHexagonTargetMC(); +- bindings.LLVMInitializeHexagonAsmPrinter(); +- bindings.LLVMInitializeHexagonAsmParser(); +- }, +- .lanai => { +- bindings.LLVMInitializeLanaiTarget(); +- bindings.LLVMInitializeLanaiTargetInfo(); +- bindings.LLVMInitializeLanaiTargetMC(); +- bindings.LLVMInitializeLanaiAsmPrinter(); +- bindings.LLVMInitializeLanaiAsmParser(); +- }, +- .mips, .mipsel, .mips64, .mips64el => { +- bindings.LLVMInitializeMipsTarget(); +- bindings.LLVMInitializeMipsTargetInfo(); +- bindings.LLVMInitializeMipsTargetMC(); +- bindings.LLVMInitializeMipsAsmPrinter(); +- bindings.LLVMInitializeMipsAsmParser(); +- }, +- .msp430 => { +- bindings.LLVMInitializeMSP430Target(); +- bindings.LLVMInitializeMSP430TargetInfo(); +- bindings.LLVMInitializeMSP430TargetMC(); +- bindings.LLVMInitializeMSP430AsmPrinter(); +- bindings.LLVMInitializeMSP430AsmParser(); +- }, + .nvptx, .nvptx64 => { + bindings.LLVMInitializeNVPTXTarget(); + bindings.LLVMInitializeNVPTXTargetInfo(); +@@ -4806,13 +4764,6 @@ pub fn initializeLLVMTarget(arch: std.Target.Cpu.Arch) void { + bindings.LLVMInitializeRISCVAsmPrinter(); + bindings.LLVMInitializeRISCVAsmParser(); + }, +- .sparc, .sparc64 => { +- bindings.LLVMInitializeSparcTarget(); +- bindings.LLVMInitializeSparcTargetInfo(); +- bindings.LLVMInitializeSparcTargetMC(); +- bindings.LLVMInitializeSparcAsmPrinter(); +- bindings.LLVMInitializeSparcAsmParser(); +- }, + .s390x => { + bindings.LLVMInitializeSystemZTarget(); + bindings.LLVMInitializeSystemZTargetInfo(); +@@ -4843,13 +4794,6 @@ pub fn initializeLLVMTarget(arch: std.Target.Cpu.Arch) void { + bindings.LLVMInitializeXtensaAsmParser(); + } + }, +- .xcore => { +- bindings.LLVMInitializeXCoreTarget(); +- bindings.LLVMInitializeXCoreTargetInfo(); +- bindings.LLVMInitializeXCoreTargetMC(); +- bindings.LLVMInitializeXCoreAsmPrinter(); +- // There is no LLVMInitializeXCoreAsmParser function. +- }, + .m68k => { + if (build_options.llvm_has_m68k) { + bindings.LLVMInitializeM68kTarget(); +@@ -4868,13 +4812,6 @@ pub fn initializeLLVMTarget(arch: std.Target.Cpu.Arch) void { + bindings.LLVMInitializeCSKYAsmParser(); + } + }, +- .ve => { +- bindings.LLVMInitializeVETarget(); +- bindings.LLVMInitializeVETargetInfo(); +- bindings.LLVMInitializeVETargetMC(); +- bindings.LLVMInitializeVEAsmPrinter(); +- bindings.LLVMInitializeVEAsmParser(); +- }, + .arc => { + if (build_options.llvm_has_arc) { + bindings.LLVMInitializeARCTarget(); +@@ -4884,21 +4821,29 @@ pub fn initializeLLVMTarget(arch: std.Target.Cpu.Arch) void { + // There is no LLVMInitializeARCAsmParser function. + } + }, +- .loongarch32, .loongarch64 => { +- bindings.LLVMInitializeLoongArchTarget(); +- bindings.LLVMInitializeLoongArchTargetInfo(); +- bindings.LLVMInitializeLoongArchTargetMC(); +- bindings.LLVMInitializeLoongArchAsmPrinter(); +- bindings.LLVMInitializeLoongArchAsmParser(); +- }, ++ ++ // Disabled LLVM targets ++ .thumb, ++ .thumbeb, ++ .arm, ++ .armeb, ++ .avr, ++ .hexagon, ++ .lanai, ++ .mips, ++ .mipsel, ++ .mips64, ++ .mips64el, ++ .msp430, ++ .sparc, ++ .sparc64, ++ .xcore, ++ .ve, ++ .loongarch32, ++ .loongarch64, + .spirv32, + .spirv64, +- => { +- bindings.LLVMInitializeSPIRVTarget(); +- bindings.LLVMInitializeSPIRVTargetInfo(); +- bindings.LLVMInitializeSPIRVTargetMC(); +- bindings.LLVMInitializeSPIRVAsmPrinter(); +- }, ++ => unreachable, + + // LLVM does does not have a backend for these. + .alpha, +diff --git a/src/target.zig b/src/target.zig +index 3d04c06f5e..9e19836815 100644 +--- a/src/target.zig ++++ b/src/target.zig +@@ -185,23 +185,12 @@ pub fn hasLlvmSupport(target: *const std.Target, ofmt: std.Target.ObjectFormat) + } + + return switch (target.cpu.arch) { +- .arm, +- .armeb, + .aarch64, + .aarch64_be, + .arc, +- .avr, + .bpfel, + .bpfeb, +- .hexagon, +- .loongarch32, +- .loongarch64, + .m68k, +- .mips, +- .mipsel, +- .mips64, +- .mips64el, +- .msp430, + .powerpc, + .powerpcle, + .powerpc64, +@@ -211,24 +200,38 @@ pub fn hasLlvmSupport(target: *const std.Target, ofmt: std.Target.ObjectFormat) + .riscv32be, + .riscv64, + .riscv64be, +- .sparc, +- .sparc64, +- .spirv32, +- .spirv64, + .s390x, +- .thumb, +- .thumbeb, + .x86, + .x86_64, +- .xcore, + .nvptx, + .nvptx64, +- .lanai, + .wasm32, + .wasm64, +- .ve, + => true, + ++ // Disabled LLVM targets ++ .thumb, ++ .thumbeb, ++ .arm, ++ .armeb, ++ .avr, ++ .hexagon, ++ .lanai, ++ .mips, ++ .mipsel, ++ .mips64, ++ .mips64el, ++ .msp430, ++ .sparc, ++ .sparc64, ++ .xcore, ++ .ve, ++ .loongarch32, ++ .loongarch64, ++ .spirv32, ++ .spirv64, ++ => false, ++ + // LLVM backend exists but can produce neither assembly nor object files. + .csky, + .xtensa, +-- +2.53.0 + diff --git a/changelog b/changelog new file mode 100644 index 0000000..cc53a32 --- /dev/null +++ b/changelog @@ -0,0 +1,154 @@ +* Fri Jul 17 2026 Fedora Release Engineering - 0.16.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild + +* Wed Apr 15 2026 Jan200101 - 0.16.0-1 +- Update to 0.16.0 + +* Sat Jan 17 2026 Fedora Release Engineering - 0.15.2-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild + +* Sun Jan 04 2026 Jan200101 - 0.15.2-2 +- Rebuilt for EPEL + +* Sun Oct 12 2025 Jan200101 - 0.15.2-1 +- Update to 0.15.2 + +* Fri Jul 25 2025 Fedora Release Engineering - 0.14.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + +* Mon Jun 09 2025 Jan200101 - 0.14.1-1 +- Update to 0.14.1 + +* Tue May 27 2025 Jan200101 - 0.14.0-4 +- add patch to add library directories + +* Fri May 09 2025 Jan200101 - 0.14.0-3 +- add gcc to runtime dependencies + +* Thu Apr 24 2025 Jan200101 - 0.14.0-2 +- fix and re-enable documentation + +* Thu Mar 06 2025 Jan200101 - 0.14.0-1 +- Update to 0.14.0 + +* Mon Jan 27 2025 Jan200101 - 0.13.0-8 +- specify to build against local zig stdlib directory to ensure we are building against the newest stdlib +- use release fast instead of release safe to fix aarch64 builds from running out of memory +- enable position independent executable for the zig build + +* Mon Jan 27 2025 Jan200101 - 0.13.0-7 +- build stage 3 using zig build system +- add user provided options to the end of the build and install options + +* Thu Jan 23 2025 Jan200101 - 0.13.0-6 +- rebuild against fixed llvm + +* Sun Jan 19 2025 Fedora Release Engineering - 0.13.0-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + +* Sun Dec 29 2024 Jan200101 - 0.13.0-4 +- correct macro variables +- set llvm_compat for F41 +- update callaway licenses to follow SPDX + +* Wed Sep 04 2024 Miroslav Suchý - 0.13.0-3 +- convert license to SPDX + +* Sat Jul 20 2024 Fedora Release Engineering - 0.13.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Tue Jun 11 2024 Jan200101 - 0.13.0-1 +- Update to 0.13.0 + +* Sat Jun 08 2024 Jan200101 - 0.12.1-1 +- Update to 0.12.1 + +* Sat May 25 2024 Jan200101 - 0.12.0-1 +- Update to 0.12.0 + +* Wed Feb 21 2024 Jan Drögehoff - 0.11.0-2 +- Rebuilt for bootstrapping + +* Sat Jan 27 2024 Aleksei Bavshin - 0.11.0-1 +- Update to 0.11.0 + +* Sat Jan 27 2024 Aleksei Bavshin - 0.9.1-6 +- Fix build with `--without macro` +- Skip %%check and test dependencies when tests are disabled +- Drop %%_zig_version macro + +* Sat Jan 27 2024 Benson Muite - 0.9.1-6 +- Verify source signature + +* Sat Jan 27 2024 Fedora Release Engineering - 0.9.1-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Sat Jul 22 2023 Fedora Release Engineering - 0.9.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Sat Jan 21 2023 Fedora Release Engineering - 0.9.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Sat Jul 23 2022 Fedora Release Engineering - 0.9.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Fri Feb 18 2022 Jan Drögehoff - 0.9.1-1 +- Update to 0.9.1 + +* Thu Jan 27 2022 Jan Drögehoff - 0.9.0-3 +- Jan: add rpath patch +- Aleksei Bavshin: rpm macros: set default build flags + +* Sat Jan 22 2022 Fedora Release Engineering - 0.9.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Mon Dec 20 2021 Jan Drögehoff - 0.9.0-1 +- Update to 0.9.0 + +* Wed Nov 17 2021 Jan Drögehoff - 0.8.1-5 +- Enable documentation on Fedora 35 + +* Tue Nov 09 2021 Tom Stellard - 0.8.1-4 +- Rebuild for llvm-13.0.0 + +* Sat Oct 30 2021 Jan Drögehoff - 0.8.1-3 +- Update LLVM13 Patch + +* Thu Oct 07 2021 Tom Stellard - 0.8.1-2 +- Rebuild for llvm-13.0.0 + +* Sun Sep 12 2021 Jan Drögehoff - 0.8.1-1 +- Update to Zig 0.8.1, add LLVM 13 patch + +* Wed Aug 18 2021 Jan Drögehoff - 0.8.0-8 +- Rebuilt for lld soname bump + +* Fri Jul 23 2021 Fedora Release Engineering - 0.8.0-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Mon Jul 19 2021 Jan Drögehoff - 0.8.0-6 +- add native libc detection patch + +* Sun Jul 04 2021 Jan Drögehoff - 0.8.0-5 +- correct newline in macro that caused DESTDIR to be ignored + +* Mon Jun 28 2021 Jan Drögehoff - 0.8.0-4 +- correct macro once again to allow for proper packaging + +* Thu Jun 24 2021 Jan Drögehoff - 0.8.0-3 +- improve macro for using the zig binary + +* Thu Jun 24 2021 Jan Drögehoff - 0.8.0-2 +- Update patches, correct rpm macro + +* Sat Jun 05 2021 Jan Drögehoff - 0.8.0-1 +- Update to Zig 0.8.0 + +* Sun Dec 13 23:18:24 CET 2020 Jan Drögehoff - 0.7.1-1 +- Update to Zig 0.7.1 + +* Wed Nov 11 17:18:27 CET 2020 Jan Drögehoff - 0.7.0-1 +- Update to Zig 0.7.0 + +* Tue Aug 18 2020 Jan Drögehoff - 0.6.0-1 +- Initial zig spec diff --git a/macros.zig b/macros.zig index 4aacbc5..990eddc 100644 --- a/macros.zig +++ b/macros.zig @@ -1,42 +1,72 @@ %zig_arches x86_64 aarch64 riscv64 %{mips64} -%_zig_version @@ZIG_VERSION@@ -%zig /usr/bin/zig +%__zig %{_bindir}/zig + +%_zig_cache_dir %{_vpath_builddir}/zig-cache +%_zig_package_dir %{_zig_cache_dir}/p # expected features for each arch when targeting baseline -# found in https://github.com/ziglang/zig/tree/master/lib/std/target +# found in https://github.com/ziglang/zig/tree/master/lib/std/Target # # aarch64: -# ete, fuse_aes, neon, perfmon, use_postra_scheduler, +# enable_select_opt, ete, fuse_adrp_add, fuse_aes, neon, use_postra_scheduler, # # x86_64: -# cx8 idivq_to_divl macrofusion slow_3ops_lea slow_incdec vzeroupper x87 +# cmov, cx8, fxsr, idivq_to_divl, macrofusion, mmx, nopl, slow_3ops_lea, slow_incdec, sse2, vzeroupper, x87 # # riscv64: -# a, c, d, m +# a, c, d, i, m # # mips64: -# mips32 +# mips64r2 +# %_zig_cpu baseline %_zig_target native +%_zig_release_mode safe # seperated build options -%_zig_general_options --verbose -%_zig_project_options -Dtarget=%{_zig_target} -Dcpu=%{_zig_cpu} -Drelease-safe -%_zig_advanced_options --cache-dir zig-cache +%_zig_general_options --verbose --release=%{_zig_release_mode} --build-id=sha1 --summary all +%_zig_project_options -Dtarget=%{_zig_target} -Dcpu=%{_zig_cpu} +# 0.16.0 introduced packaging changes which install packages into this relative directory +# Will be ovewritable in 0.17.0 +# https://codeberg.org/ziglang/zig/pulls/31950 +%_zig_system_integration --system "zig-pkg" +%_zig_advanced_options -fallow-so-scripts --cache-dir "%{_zig_cache_dir}" --global-cache-dir "%{_zig_cache_dir}" -%_zig_build_options %{?_zig_general_options} %{?_zig_project_options} %{?_zig_advanced_options} -%_zig_install_options --prefix "%{_prefix}" --prefix-lib-dir "%{_libdir}" --prefix-exe-dir "%{_bindir}" --prefix-include-dir "%{_includedir}" +%_zig_build_options %{?_zig_general_options} %{?_zig_project_options} %{?_zig_system_integration} %{?_zig_advanced_options} %{?zig_build_options} +%_zig_install_options --prefix "%{_prefix}" --prefix-lib-dir "%{_libdir}" --prefix-exe-dir "%{_bindir}" --prefix-include-dir "%{_includedir}" %{?zig_install_options} +%_zig_fetch_options --global-cache-dir %{_zig_cache_dir} %{?zig_fetch_options} +%_zig_test_options %{?zig_test_options} -%zig_build %zig \\\ - build \\\ - %{?_zig_build_options} -%zig_install \ - DESTDIR="%{buildroot}" %zig_build \\\ - install \\\ - %{?_zig_install_options} +%zig_prep %{shrink: \ + mkdir -p \ + %{_zig_cache_dir} \ + %{_zig_package_dir} \ + "zig-pkg" \ +} -%zig_test \ - %zig_build \\\ - test +%zig_build %{shrink: \ + %__zig \ + build \ + %{?_zig_build_options} \ +} + +%zig_install %{shrink: \ + DESTDIR="%{buildroot}" \ + %zig_build \ + install \ + %{?_zig_install_options} \ +} + +%zig_fetch %{shrink: \ + %__zig \ + fetch \ + %{?_zig_fetch_options} \ +} + +%zig_test %{shrink: \ + %zig_build \ + test \ + %{?%_zig_test_options} \ +} diff --git a/sources b/sources index fb7f511..d07a209 100644 --- a/sources +++ b/sources @@ -1 +1,2 @@ -SHA512 (zig-0.9.1.tar.gz) = a9dc5fea25dde511122056832449658b00dbcf6d6bbfe658b375968a7bdb06c690abbdfe00c1afcfa481442392b051dcef5a5a5e81d4ceb23fa98a866b900f37 +SHA512 (zig-0.16.0.tar.xz) = 1404a939c6f233d5f328a4833543d7a2b2d9f0f5081babe6e3ad43daed25bbb0844b28c01c900f64b5bb63ac62b5586457c05380b10494dfefb56f49b58d4a0a +SHA512 (zig-0.16.0.tar.xz.minisig) = 44a2d57061cbe8bd4e9ad587c247883e2e9abefa148ab375617665fe51500a106f488ceaaeaf038c0ff5ce1a70f4eb3b519a44f3211769ea1ebae5ad49b2f1b9 diff --git a/zig.spec b/zig.spec index eca9f9f..6aea38e 100644 --- a/zig.spec +++ b/zig.spec @@ -1,54 +1,119 @@ -# https://ziglang.org/download/%{version}/release-notes.html#Support-Table -# 32 bit builds currently run out of memory https://github.com/ziglang/zig/issues/6485 -%global zig_arches x86_64 aarch64 riscv64 %{mips64} +# architecture and toolchain -# note here at which Fedora release we need to deal with LLVM and glibc differences -%global fedora_llvm 36 -# TODO check if this is still relevant -%global fedora_glibc 38 - -%global llvm_version 13.0.0 - -%if %{fedora} >= %{fedora_llvm} -%define llvm_compat 13 -%endif - -%if %{fedora} >= %{fedora_glibc} -# documentation and tests do not build due to an unsupported glibc version -%bcond_with test -%bcond_with docs +%if 0%{?rhel} +# Zig depends on a C compiler (gcc) during bootstrapping. +# Older versions of gcc fail to compile the transpiled source, so limit to x86_64. +%global zig_arches x86_64 %else -%bcond_without test -%bcond_without docs +# Supported architectures: https://ziglang.org/download/VERSION/release-notes.html#Support-Table +%global zig_arches x86_64 aarch64 riscv64 %{mips64} %endif -%bcond_without macro +# GCC < 16.0 miscompiles on RISC-V; use Clang instead on older Fedora versions +%ifarch riscv64 +%if 0%{?fedora} < 44 +%bcond toolchain_clang 1 +%endif +%endif +%if %{with toolchain_clang} +%global toolchain clang +%endif + +# minisign public key for source verification (from https://ziglang.org/download/) +%global public_key RWSGOq2NVecA2UPNdBUZykf1CCb147pkmdtYxgb3Ti+JO/wCYvhbAb/U + + +# dependency versions and cache + +# Compatible LLVM/Clang version definitions +%if 0%{?fedora} >= 44 || 0%{?rhel} >= 11 +%global llvm_compat 21 +%endif +%global llvm_version 21.1.8 + +%global zig_cache_dir %{_vpath_builddir}/zig-cache + + +# build conditionals + +%bcond bootstrap 0 +%bcond docs %{without bootstrap} +%bcond macro %{without bootstrap} +%bcond test 1 + + +# build and install options + +%global zig_build_options %{shrink: \ + --verbose \ + --release=fast \ + --summary all \ + \ + -Dtarget=native \ + -Dcpu=baseline \ + --zig-lib-dir lib \ + --build-id=sha1 \ + \ + --cache-dir "%{zig_cache_dir}" \ + --global-cache-dir "%{zig_cache_dir}" \ + \ + -Dversion-string="%{?dev_version}%{!?dev_version:%{version}}" \ + -Dstatic-llvm=false \ + -Denable-llvm=true \ + -Dno-langref=true \ + -Dstd-docs=false \ + -Dpie \ + -Dconfig_h="%{__cmake_builddir}/config.h" \ +} + +%global zig_install_options %{shrink: \ + %zig_build_options \ + --prefix "%{_prefix}" \ +} Name: zig -Version: 0.9.1 -Release: 3%{?dist} +Version: 0.16.0 +Release: %autorelease Summary: Programming language for maintaining robust, optimal, and reusable software -License: MIT and NCSA and LGPLv2+ and LGPLv2+ with exceptions and GPLv2+ and GPLv2+ with exceptions and BSD and Inner-Net and ISC and Public Domain and GFDL and ZPLv2.1 -URL: https://ziglang.org -Source0: https://github.com/ziglang/zig/archive/%{version}.tar.gz#/%{name}-%{version}.tar.gz -Source1: macros.%{name} -# prevent native directories from polluting the rpath -# https://github.com/ziglang/zig/pull/10621 -Patch0: 0001-ignore-target-lib-dirs-when-invoked-with-feach-lib-r.patch +# The minisign file references a specific archive name so we store for ease of use +%global archive_name %{name}-%{version}.tar.xz +License: MIT AND NCSA AND LGPL-2.1-or-later AND LGPL-2.1-or-later WITH GCC-exception-2.0 AND GPL-2.0-or-later AND GPL-2.0-or-later WITH GCC-exception-2.0 AND BSD-3-Clause AND Inner-Net-2.0 AND ISC AND LicenseRef-Fedora-Public-Domain AND GFDL-1.1-or-later AND ZPL-2.1 +URL: https://ziglang.org +Source0: %{url}/download/%{version}/%{archive_name} +Source1: %{url}/download/%{version}/%{archive_name}.minisig +Source2: macros.%{name} + +# Remove native lib directories from rpath +# this is unlikely to be upstreamed in its current state because upstream +# wants to work around the shortcomings of NixOS +Patch0: 0001-remove-native-lib-directories-from-rpath.patch + +# LLVM on RHEL/EPEL only provides fewer targets so we patch the required targets down +# Targets come from https://src.fedoraproject.org/rpms/llvm/blob/rawhide/f/llvm.spec +Patch1: 0002-Remove-unsupported-LLVM-targets-for-EPEL.patch + +%if %{without toolchain_clang} BuildRequires: gcc BuildRequires: gcc-c++ +%else +BuildRequires: clang +%endif BuildRequires: cmake BuildRequires: llvm%{?llvm_compat}-devel BuildRequires: clang%{?llvm_compat}-devel BuildRequires: lld%{?llvm_compat}-devel +BuildRequires: zlib-devel +BuildRequires: libxml2-devel # for man page generation BuildRequires: help2man +# for signature verification +BuildRequires: minisign -%if %{with macro} || 0%{?llvm_compat} -BuildRequires: sed +%if %{without bootstrap} +BuildRequires: (zig >= 0.16 with zig < 0.17) %endif %if %{with test} @@ -61,22 +126,22 @@ Requires: %{name}-libs = %{version} # These packages are bundled as source -# NCSA +# Apache-2.0 WITH LLVM-exception OR NCSA OR MIT Provides: bundled(compiler-rt) = %{llvm_version} -# LGPLv2+, LGPLv2+ with exceptions, GPLv2+, GPLv2+ with exceptions, BSD, Inner-Net, ISC, Public Domain and GFDL -Provides: bundled(glibc) = 2.34 -# NCSA +# LGPL-2.1-or-later AND SunPro AND LGPL-2.1-or-later WITH GCC-exception-2.0 AND BSD-3-Clause AND GPL-2.0-or-later AND LGPL-2.1-or-later WITH GNU-compiler-exception AND GPL-2.0-only AND ISC AND LicenseRef-Fedora-Public-Domain AND HPND AND CMU-Mach AND LGPL-2.0-or-later AND Unicode-3.0 AND GFDL-1.1-or-later AND GPL-1.0-or-later AND FSFUL AND MIT AND Inner-Net-2.0 AND X11 AND GPL-2.0-or-later WITH GCC-exception-2.0 AND GFDL-1.3-only AND GFDL-1.1-only +Provides: bundled(glibc) = 2.43 +# Apache-2.0 WITH LLVM-exception OR MIT OR NCSA Provides: bundled(libcxx) = %{llvm_version} -# NCSA +# Apache-2.0 WITH LLVM-exception OR MIT OR NCSA Provides: bundled(libcxxabi) = %{llvm_version} # NCSA Provides: bundled(libunwind) = %{llvm_version} # BSD, LGPG, ZPL -Provides: bundled(mingw) = 9.0.0 +Provides: bundled(mingw) = 3839e21b08807479a31d5a9764666f82ae2f0356 # MIT -Provides: bundled(musl) = 1.2.2 -# CC0, BSD, MIT, Apache2, Apache2 with exceptions -Provides: bundled(wasi-libc) = 82fc2c4f449e56319112f6f2583195c7f4e714b1 +Provides: bundled(musl) = 1.2.5 +# Apache-2.0 WITH LLVM-exception AND Apache-2.0 AND MIT AND BSD-2-Clause +Provides: bundled(wasi-libc) = d03829489904d38c624f6de9983190f1e5e7c9c5 ExclusiveArch: %{zig_arches} @@ -84,7 +149,7 @@ ExclusiveArch: %{zig_arches} Zig is an open-source programming language designed for robustness, optimality, and clarity. This package provides the zig compiler and the associated runtime. -# the standard library contains only plain text +# The Zig stdlib only contains uncompiled code %package libs Summary: %{name} Standard Library BuildArch: noarch @@ -108,60 +173,93 @@ Summary: Common RPM macros for %{name} Requires: rpm BuildArch: noarch -%description rpm-macros +%description rpm-macros This package contains common RPM macros for %{name}. %endif %prep -%autosetup -p1 +minisign -V -m %{SOURCE0} -x %{SOURCE1} -P %{public_key} -Q | grep -F "file:%{archive_name}" -%if 0%{?llvm_compat} - sed -i "s|/usr/lib/llvm-13|%{_libdir}/llvm%{llvm_compat}|g" cmake/Find{clang,lld,llvm}.cmake +%autosetup -N +%patch 0 -p1 +%if 0%{?rhel} +%patch 1 -p1 +%endif + +%if %{without bootstrap} +# Ensure that the pre-build stage1 binary is not used +rm -f stage1/zig1.wasm %endif %build +# Fedora supports using ccache systemwide +# Zig generates a large C file for bootstrapping which does not +# behave well with ccache so we explicitly disable it. +export CCACHE_DISABLE=1 + +# zig doesn't know how to dynamically link llvm on its own so we need cmake to generate a header ahead of time +# if we provide the header we need to also build zigcpp + +# C_FLAGS: wasm2c output generates a lot of noise with -Wunused. +# EXTRA_BUILD_ARGS: explicitly specify a build-id %cmake \ -DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo \ - -DZIG_PREFER_CLANG_CPP_DYLIB=true \ - -DZIG_VERSION:STRING="%{version}" -%cmake_build + -DCMAKE_C_FLAGS_RELWITHDEBINFO:STRING="-DNDEBUG -Wno-unused" \ + -DCMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING="-DNDEBUG -Wno-unused" \ + \ + -DZIG_EXTRA_BUILD_ARGS:STRING="--verbose;--build-id=sha1" \ + -DZIG_SHARED_LLVM:BOOL=true \ + -DZIG_PIE:BOOL=true \ + \ + -DZIG_TARGET_MCPU:STRING=baseline \ + -DZIG_TARGET_TRIPLE:STRING=native \ + \ + -DZIG_VERSION:STRING="%{?dev_version}%{!?dev_version:%{version}}" + +%if %{with bootstrap} +%cmake_build --target stage3 +%else +%cmake_build --target zigcpp +zig build %{zig_build_options} # Zig has no official manpage # https://github.com/ziglang/zig/issues/715 -help2man --no-discard-stderr "%{__cmake_builddir}/zig" --version-option=version --output=%{name}.1 +help2man --no-discard-stderr --no-info "./zig-out/bin/zig" --version-option=version --output=zig.1 +%endif -ln -s lib "%{__cmake_builddir}/" %if %{with docs} -%{__cmake_builddir}/zig build docs -Dversion-string="%{version}" +# Use the newly made stage 3 compiler to generate docs +./zig-out/bin/zig build docs %{zig_build_options} %endif -mkdir -p zig-cache -touch zig-cache/langref.html %install +%if %{with bootstrap} %cmake_install +%else +DESTDIR="%{buildroot}" zig build install %{zig_install_options} -mkdir -p %{buildroot}/%{_mandir}/man1 -install -m 0644 %{name}.1 %{buildroot}%{_mandir}/man1/ +install -D -pv -m 0644 -t %{buildroot}%{_mandir}/man1/ zig.1 +%endif -mkdir -p %{buildroot}%{_rpmconfigdir}/macros.d/ -install -p -m644 %{SOURCE1} %{buildroot}%{_rpmconfigdir}/macros.d/ -sed -i -e "s|@@ZIG_VERSION@@|%{version}|" %{buildroot}%{_rpmconfigdir}/macros.d/macros.%{name} - -%check +%if %{with macro} +install -D -pv -m 0644 %{SOURCE2} %{buildroot}%{_rpmmacrodir}/macros.%{name} +%endif %if %{with test} -# Issues with tests stop them from completing successfully -# https://github.com/ziglang/zig/issues/9738 -#%%{__cmake_builddir}/zig build test +%check +# Run reduced set of tests, based on the Zig CI +"%{buildroot}%{_bindir}/zig" test test/behavior.zig -Itest %endif %files %license LICENSE %{_bindir}/zig +%if %{without bootstrap} %{_mandir}/man1/%{name}.1.* +%endif %files libs %{_prefix}/lib/%{name} @@ -169,80 +267,14 @@ sed -i -e "s|@@ZIG_VERSION@@|%{version}|" %{buildroot}%{_rpmconfigdir}/macros.d %if %{with docs} %files doc %doc README.md -%doc zig-cache/langref.html +%doc zig-out/doc/langref.html +%doc zig-out/doc/std %endif %if %{with macro} %files rpm-macros -%{_rpmconfigdir}/macros.d/macros.%{name} +%{_rpmmacrodir}/macros.%{name} %endif %changelog -* Sat Jan 21 2023 Fedora Release Engineering - 0.9.1-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild - -* Sat Jul 23 2022 Fedora Release Engineering - 0.9.1-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild - -* Fri Feb 18 2022 Jan Drögehoff - 0.9.1-1 -- Update to 0.9.1 - -* Thu Jan 27 2022 Jan Drögehoff - 0.9.0-3 -- Jan: add rpath patch -- Aleksei Bavshin: rpm macros: set default build flags - -* Sat Jan 22 2022 Fedora Release Engineering - 0.9.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild - - -* Mon Dec 20 2021 Jan Drögehoff - 0.9.0-1 -- Update to 0.9.0 - -* Wed Nov 17 2021 Jan Drögehoff - 0.8.1-5 -- Enable documentation on Fedora 35 - -* Tue Nov 09 2021 Tom Stellard - 0.8.1-4 -- Rebuild for llvm-13.0.0 - -* Sat Oct 30 2021 Jan Drögehoff - 0.8.1-3 -- Update LLVM13 Patch - -* Thu Oct 07 2021 Tom Stellard - 0.8.1-2 -- Rebuild for llvm-13.0.0 - -* Sun Sep 12 2021 Jan Drögehoff - 0.8.1-1 -- Update to Zig 0.8.1, add LLVM 13 patch - -* Wed Aug 18 2021 Jan Drögehoff - 0.8.0-8 -- Rebuilt for lld soname bump - -* Fri Jul 23 2021 Fedora Release Engineering - 0.8.0-7 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild - -* Mon Jul 19 2021 Jan Drögehoff - 0.8.0-6 -- add native libc detection patch - -* Sun Jul 04 2021 Jan Drögehoff - 0.8.0-5 -- correct newline in macro that caused DESTDIR to be ignored - -* Mon Jun 28 2021 Jan Drögehoff - 0.8.0-4 -- correct macro once again to allow for proper packaging - -* Thu Jun 24 2021 Jan Drögehoff - 0.8.0-3 -- improve macro for using the zig binary - -* Thu Jun 24 2021 Jan Drögehoff - 0.8.0-2 -- Update patches, correct rpm macro - -* Sat Jun 05 2021 Jan Drögehoff - 0.8.0-1 -- Update to Zig 0.8.0 - -* Sun Dec 13 23:18:24 CET 2020 Jan Drögehoff - 0.7.1-1 -- Update to Zig 0.7.1 - -* Wed Nov 11 17:18:27 CET 2020 Jan Drögehoff - 0.7.0-1 -- Update to Zig 0.7.0 - -* Tue Aug 18 2020 Jan Drögehoff - 0.6.0-1 -- Initial zig spec - +%autochangelog