Simplify the target definitions
This commit is contained in:
parent
b2411fce72
commit
68e85e4428
282
rust.spec
282
rust.spec
@ -33,6 +33,10 @@
|
||||
%global extra_targets x86_64-unknown-none x86_64-unknown-uefi
|
||||
%endif
|
||||
%endif
|
||||
%global all_targets %{?mingw_targets} %{?wasm_targets} %{?extra_targets}
|
||||
%define target_enabled() %{lua:
|
||||
print(string.find(rpm.expand(" %{all_targets} "), rpm.expand(" %1 "), 1, true) or 0)
|
||||
}
|
||||
|
||||
# We need CRT files for *-wasi targets, at least as new as the commit in
|
||||
# src/ci/docker/host-x86_64/dist-various-2/build-wasi-toolchain.sh
|
||||
@ -154,14 +158,12 @@ Patch101: rustc-1.72.0-disable-http2.patch
|
||||
return arch.."-unknown-linux-"..abi
|
||||
end}
|
||||
|
||||
# Get the environment form of a Rust triple
|
||||
%{lua: function rust_triple_env(triple)
|
||||
local sub = string.gsub(triple, "-", "_")
|
||||
return string.upper(sub)
|
||||
end}
|
||||
|
||||
%global rust_triple %{lua: print(rust_triple(rpm.expand("%{_target_cpu}")))}
|
||||
%global rust_triple_env %{lua: print(rust_triple_env(rpm.expand("%{rust_triple}")))}
|
||||
|
||||
# Get the environment form of the Rust triple
|
||||
%global rust_triple_env %{lua:
|
||||
print(string.upper(string.gsub(rpm.expand("%{rust_triple}"), "-", "_")))
|
||||
}
|
||||
|
||||
%if %defined bootstrap_arches
|
||||
# For each bootstrap arch, add an additional binary Source.
|
||||
@ -369,91 +371,63 @@ Requires: glibc-devel%{?_isa} >= 2.17
|
||||
This package includes the standard libraries for building applications
|
||||
written in Rust.
|
||||
|
||||
%if %defined mingw_targets
|
||||
%{lua: do
|
||||
for triple in string.gmatch(rpm.expand("%{mingw_targets}"), "%S+") do
|
||||
local subs = {
|
||||
triple = triple,
|
||||
name = rpm.expand("%{name}"),
|
||||
verrel = rpm.expand("%{version}-%{release}"),
|
||||
mingw = string.sub(triple, 1, 4) == "i686" and "mingw32" or "mingw64",
|
||||
}
|
||||
local s = string.gsub([[
|
||||
%global target_package() \
|
||||
%package std-static-%1 \
|
||||
Summary: Standard library for Rust %1 \
|
||||
Requires: %{name} = %{version}-%{release}
|
||||
|
||||
%package std-static-{{triple}}
|
||||
Summary: Standard library for Rust {{triple}}
|
||||
%global target_description() \
|
||||
%description std-static-%1 \
|
||||
This package includes the standard libraries for building applications \
|
||||
written in Rust for the %2 target %1.
|
||||
|
||||
%if %target_enabled i686-pc-windows-gnu
|
||||
%target_package i686-pc-windows-gnu
|
||||
Requires: mingw32-crt
|
||||
Requires: mingw32-gcc
|
||||
Requires: mingw32-winpthreads-static
|
||||
Provides: mingw32-rust = %{version}-%{release}
|
||||
Provides: mingw32-rustc = %{version}-%{release}
|
||||
BuildArch: noarch
|
||||
Provides: {{mingw}}-rust = {{verrel}}
|
||||
Provides: {{mingw}}-rustc = {{verrel}}
|
||||
Requires: {{mingw}}-crt
|
||||
Requires: {{mingw}}-gcc
|
||||
Requires: {{mingw}}-winpthreads-static
|
||||
Requires: {{name}} = {{verrel}}
|
||||
|
||||
%description std-static-{{triple}}
|
||||
This package includes the standard libraries for building applications
|
||||
written in Rust for the MinGW target {{triple}}.
|
||||
|
||||
]], "{{(%w+)}}", subs)
|
||||
print(s)
|
||||
end
|
||||
end}
|
||||
%target_description i686-pc-windows-gnu MinGW
|
||||
%endif
|
||||
|
||||
%if %defined wasm_targets
|
||||
%{lua: do
|
||||
for triple in string.gmatch(rpm.expand("%{wasm_targets}"), "%S+") do
|
||||
local subs = {
|
||||
triple = triple,
|
||||
name = rpm.expand("%{name}"),
|
||||
verrel = rpm.expand("%{version}-%{release}"),
|
||||
wasi = string.find(triple, "-wasi") and 1 or 0,
|
||||
}
|
||||
local s = string.gsub([[
|
||||
|
||||
%package std-static-{{triple}}
|
||||
Summary: Standard library for Rust {{triple}}
|
||||
%if %target_enabled x86_64-pc-windows-gnu
|
||||
%target_package x86_64-pc-windows-gnu
|
||||
Requires: mingw64-crt
|
||||
Requires: mingw64-gcc
|
||||
Requires: mingw64-winpthreads-static
|
||||
Provides: mingw64-rust = %{version}-%{release}
|
||||
Provides: mingw64-rustc = %{version}-%{release}
|
||||
BuildArch: noarch
|
||||
Requires: {{name}} = {{verrel}}
|
||||
%target_description x86_64-pc-windows-gnu MinGW
|
||||
%endif
|
||||
|
||||
%if %target_enabled wasm32-unknown-unknown
|
||||
%target_package wasm32-unknown-unknown
|
||||
Requires: lld >= 8.0
|
||||
BuildArch: noarch
|
||||
%target_description wasm32-unknown-unknown WebAssembly
|
||||
%endif
|
||||
|
||||
%if %target_enabled wasm32-wasi
|
||||
%target_package wasm32-wasi
|
||||
Requires: lld >= 8.0
|
||||
%if {{wasi}}
|
||||
Provides: bundled(wasi-libc)
|
||||
BuildArch: noarch
|
||||
%target_description wasm32-wasi WebAssembly
|
||||
%endif
|
||||
|
||||
%description std-static-{{triple}}
|
||||
This package includes the standard libraries for building applications
|
||||
written in Rust for the WebAssembly target {{triple}}.
|
||||
|
||||
]], "{{(%w+)}}", subs)
|
||||
print(s)
|
||||
end
|
||||
end}
|
||||
%if %target_enabled x86_64-unknown-none
|
||||
%target_package x86_64-unknown-none
|
||||
Requires: lld
|
||||
%target_description x86_64-unknown-none embedded
|
||||
%endif
|
||||
|
||||
|
||||
%if %defined extra_targets
|
||||
%{lua: do
|
||||
for triple in string.gmatch(rpm.expand("%{extra_targets}"), "%S+") do
|
||||
local subs = {
|
||||
triple = triple,
|
||||
name = rpm.expand("%{name}"),
|
||||
verrel = rpm.expand("%{version}-%{release}"),
|
||||
}
|
||||
local s = string.gsub([[
|
||||
|
||||
%package std-static-{{triple}}
|
||||
Summary: Standard library for Rust {{triple}}
|
||||
Requires: {{name}} = {{verrel}}
|
||||
Requires: lld >= 8.0
|
||||
|
||||
%description std-static-{{triple}}
|
||||
This package includes the standard libraries for building applications
|
||||
written in Rust for the embedded target {{triple}}.
|
||||
|
||||
]], "{{(%w+)}}", subs)
|
||||
print(s)
|
||||
end
|
||||
end}
|
||||
%if %target_enabled x86_64-unknown-uefi
|
||||
%target_package x86_64-unknown-uefi
|
||||
Requires: lld
|
||||
%target_description x86_64-unknown-uefi embedded
|
||||
%endif
|
||||
|
||||
|
||||
@ -705,7 +679,7 @@ find -name '*.rs' -type f -perm /111 -exec chmod -v -x '{}' '+'
|
||||
%endif
|
||||
|
||||
# These are similar to __cflags_arch_* in /usr/lib/rpm/redhat/macros
|
||||
%{lua: function rustc_target_cpus()
|
||||
%global rustc_target_cpus %{lua: do
|
||||
local fedora = tonumber(rpm.expand("0%{?fedora}"))
|
||||
local rhel = tonumber(rpm.expand("0%{?rhel}"))
|
||||
local env =
|
||||
@ -714,11 +688,11 @@ find -name '*.rs' -type f -perm /111 -exec chmod -v -x '{}' '+'
|
||||
.. " RUSTC_TARGET_CPU_S390X=" ..
|
||||
((rhel >= 9) and "z14" or (rhel == 8 or fedora >= 38) and "z13" or
|
||||
(fedora >= 26) and "zEC12" or (rhel == 7) and "z196" or "z10")
|
||||
return env
|
||||
print(env)
|
||||
end}
|
||||
|
||||
# Set up shared environment variables for build/install/check
|
||||
%global rust_env %{?rustflags:RUSTFLAGS="%{rustflags}"} %{lua: print(rustc_target_cpus())}
|
||||
%global rust_env %{?rustflags:RUSTFLAGS="%{rustflags}"} %{rustc_target_cpus}
|
||||
%if %defined cmake_path
|
||||
%global rust_env %{?rust_env} PATH="%{cmake_path}:$PATH"
|
||||
%endif
|
||||
@ -754,38 +728,21 @@ if [ "$max_cpus" -ge 1 -a "$max_cpus" -lt "$ncpus" ]; then
|
||||
fi
|
||||
|
||||
%if %defined mingw_targets
|
||||
%{lua: do
|
||||
local cfg = ""
|
||||
for triple in string.gmatch(rpm.expand("%{mingw_targets}"), "%S+") do
|
||||
local subs = {
|
||||
triple = triple,
|
||||
mingw = string.sub(triple, 1, 4) == "i686" and "mingw32" or "mingw64",
|
||||
}
|
||||
local s = string.gsub([[
|
||||
--set target.{{triple}}.linker=%{{{mingw}}_cc}
|
||||
--set target.{{triple}}.cc=%{{{mingw}}_cc}
|
||||
--set target.{{triple}}.ar=%{{{mingw}}_ar}
|
||||
--set target.{{triple}}.ranlib=%{{{mingw}}_ranlib}
|
||||
]], "{{(%w+)}}", subs)
|
||||
cfg = cfg .. " " .. s
|
||||
end
|
||||
cfg = string.gsub(cfg, "%s+", " ")
|
||||
rpm.define("mingw_target_config " .. cfg)
|
||||
end}
|
||||
%define mingw_target_config %{shrink:
|
||||
--set target.i686-pc-windows-gnu.linker=%{mingw32_cc}
|
||||
--set target.i686-pc-windows-gnu.cc=%{mingw32_cc}
|
||||
--set target.i686-pc-windows-gnu.ar=%{mingw32_ar}
|
||||
--set target.i686-pc-windows-gnu.ranlib=%{mingw32_ranlib}
|
||||
--set target.x86_64-pc-windows-gnu.linker=%{mingw64_cc}
|
||||
--set target.x86_64-pc-windows-gnu.cc=%{mingw64_cc}
|
||||
--set target.x86_64-pc-windows-gnu.ar=%{mingw64_ar}
|
||||
--set target.x86_64-pc-windows-gnu.ranlib=%{mingw64_ranlib}
|
||||
}
|
||||
%endif
|
||||
|
||||
%if %defined wasm_targets
|
||||
%make_build --quiet -C %{wasi_libc_dir} CC=clang AR=llvm-ar NM=llvm-nm
|
||||
%{lua: do
|
||||
local wasi_root = rpm.expand("%{wasi_libc_dir}") .. "/sysroot"
|
||||
local cfg = ""
|
||||
for triple in string.gmatch(rpm.expand("%{wasm_targets}"), "%S+") do
|
||||
if string.find(triple, "-wasi") then
|
||||
cfg = cfg .. " --set target." .. triple .. ".wasi-root=" .. wasi_root
|
||||
end
|
||||
end
|
||||
rpm.define("wasm_target_config "..cfg)
|
||||
end}
|
||||
%define wasm_target_config --set target.wasm32-wasi.wasi-root=%{wasi_libc_dir}/sysroot
|
||||
%endif
|
||||
|
||||
%if 0%{?fedora} || 0%{?rhel} >= 8
|
||||
@ -830,7 +787,7 @@ PROFILER=$(find %{_libdir}/clang -type f -name 'libclang_rt.profile-*.a')
|
||||
%{__python3} ./x.py build -j "$ncpus"
|
||||
%{__python3} ./x.py doc
|
||||
|
||||
for triple in %{?mingw_targets} %{?wasm_targets} %{?extra_targets}; do
|
||||
for triple in %{?all_targets} ; do
|
||||
%{__python3} ./x.py build --target=$triple std
|
||||
done
|
||||
|
||||
@ -842,7 +799,7 @@ done
|
||||
|
||||
DESTDIR=%{buildroot} %{__python3} ./x.py install
|
||||
|
||||
for triple in %{?mingw_targets} %{?wasm_targets} %{?extra_targets}; do
|
||||
for triple in %{?all_targets} ; do
|
||||
DESTDIR=%{buildroot} %{__python3} ./x.py install --target=$triple std
|
||||
done
|
||||
|
||||
@ -939,7 +896,7 @@ env RUSTC=%{buildroot}%{_bindir}/rustc \
|
||||
LD_LIBRARY_PATH="%{buildroot}%{_libdir}:$LD_LIBRARY_PATH" \
|
||||
%{buildroot}%{_bindir}/cargo run --manifest-path build/hello-world/Cargo.toml
|
||||
|
||||
# Try a build sanity-check for other targets
|
||||
# Try a build sanity-check for other std-enabled targets
|
||||
for triple in %{?mingw_targets} %{?wasm_targets}; do
|
||||
env RUSTC=%{buildroot}%{_bindir}/rustc \
|
||||
LD_LIBRARY_PATH="%{buildroot}%{_libdir}:$LD_LIBRARY_PATH" \
|
||||
@ -988,79 +945,46 @@ rm -rf "./build/%{rust_triple}/stage2-tools/%{rust_triple}/cit/"
|
||||
%dir %{rustlibdir}/%{rust_triple}/lib
|
||||
%{rustlibdir}/%{rust_triple}/lib/*.rlib
|
||||
|
||||
%global target_files() \
|
||||
%files std-static-%1 \
|
||||
%dir %{rustlibdir} \
|
||||
%dir %{rustlibdir}/%1 \
|
||||
%dir %{rustlibdir}/%1/lib \
|
||||
%{rustlibdir}/%1/lib/*.rlib
|
||||
|
||||
%if %defined mingw_targets
|
||||
%{lua: do
|
||||
for triple in string.gmatch(rpm.expand("%{mingw_targets}"), "%S+") do
|
||||
local subs = {
|
||||
triple = triple,
|
||||
rustlibdir = rpm.expand("%{rustlibdir}"),
|
||||
}
|
||||
local s = string.gsub([[
|
||||
|
||||
%files std-static-{{triple}}
|
||||
%dir {{rustlibdir}}
|
||||
%dir {{rustlibdir}}/{{triple}}
|
||||
%dir {{rustlibdir}}/{{triple}}/lib
|
||||
{{rustlibdir}}/{{triple}}/lib/*.rlib
|
||||
{{rustlibdir}}/{{triple}}/lib/rs*.o
|
||||
%exclude {{rustlibdir}}/{{triple}}/lib/*.dll
|
||||
%exclude {{rustlibdir}}/{{triple}}/lib/*.dll.a
|
||||
%exclude {{rustlibdir}}/{{triple}}/lib/self-contained
|
||||
|
||||
]], "{{(%w+)}}", subs)
|
||||
print(s)
|
||||
end
|
||||
end}
|
||||
%if %target_enabled i686-pc-windows-gnu
|
||||
%target_files i686-pc-windows-gnu
|
||||
%{rustlibdir}/i686-pc-windows-gnu/lib/rs*.o
|
||||
%exclude %{rustlibdir}/i686-pc-windows-gnu/lib/*.dll
|
||||
%exclude %{rustlibdir}/i686-pc-windows-gnu/lib/*.dll.a
|
||||
%exclude %{rustlibdir}/i686-pc-windows-gnu/lib/self-contained
|
||||
%endif
|
||||
|
||||
|
||||
%if %defined wasm_targets
|
||||
%{lua: do
|
||||
for triple in string.gmatch(rpm.expand("%{wasm_targets}"), "%S+") do
|
||||
local subs = {
|
||||
triple = triple,
|
||||
rustlibdir = rpm.expand("%{rustlibdir}"),
|
||||
wasi = string.find(triple, "-wasi") and 1 or 0,
|
||||
}
|
||||
local s = string.gsub([[
|
||||
|
||||
%files std-static-{{triple}}
|
||||
%dir {{rustlibdir}}
|
||||
%dir {{rustlibdir}}/{{triple}}
|
||||
%dir {{rustlibdir}}/{{triple}}/lib
|
||||
{{rustlibdir}}/{{triple}}/lib/*.rlib
|
||||
%if {{wasi}}
|
||||
%dir {{rustlibdir}}/{{triple}}/lib/self-contained
|
||||
{{rustlibdir}}/{{triple}}/lib/self-contained/crt*.o
|
||||
{{rustlibdir}}/{{triple}}/lib/self-contained/libc.a
|
||||
%if %target_enabled x86_64-pc-windows-gnu
|
||||
%target_files x86_64-pc-windows-gnu
|
||||
%{rustlibdir}/x86_64-pc-windows-gnu/lib/rs*.o
|
||||
%exclude %{rustlibdir}/x86_64-pc-windows-gnu/lib/*.dll
|
||||
%exclude %{rustlibdir}/x86_64-pc-windows-gnu/lib/*.dll.a
|
||||
%exclude %{rustlibdir}/x86_64-pc-windows-gnu/lib/self-contained
|
||||
%endif
|
||||
|
||||
]], "{{(%w+)}}", subs)
|
||||
print(s)
|
||||
end
|
||||
end}
|
||||
%if %target_enabled wasm32-unknown-unknown
|
||||
%target_files wasm32-unknown-unknown
|
||||
%endif
|
||||
|
||||
%if %defined extra_targets
|
||||
%{lua: do
|
||||
for triple in string.gmatch(rpm.expand("%{extra_targets}"), "%S+") do
|
||||
local subs = {
|
||||
triple = triple,
|
||||
rustlibdir = rpm.expand("%{rustlibdir}"),
|
||||
}
|
||||
local s = string.gsub([[
|
||||
%if %target_enabled wasm32-wasi
|
||||
%target_files wasm32-wasi
|
||||
%dir %{rustlibdir}/wasm32-wasi/lib/self-contained
|
||||
%{rustlibdir}/wasm32-wasi/lib/self-contained/crt*.o
|
||||
%{rustlibdir}/wasm32-wasi/lib/self-contained/libc.a
|
||||
%endif
|
||||
|
||||
%files std-static-{{triple}}
|
||||
%dir {{rustlibdir}}
|
||||
%dir {{rustlibdir}}/{{triple}}
|
||||
%dir {{rustlibdir}}/{{triple}}/lib
|
||||
{{rustlibdir}}/{{triple}}/lib/*.rlib
|
||||
%if %target_enabled x86_64-unknown-none
|
||||
%target_files x86_64-unknown-none
|
||||
%endif
|
||||
|
||||
]], "{{(%w+)}}", subs)
|
||||
print(s)
|
||||
end
|
||||
end}
|
||||
%if %target_enabled x86_64-unknown-uefi
|
||||
%target_files x86_64-unknown-uefi
|
||||
%endif
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user