Blame tinygo.spec

421b6c4
# Generated by go2rpm 1
b34ba92
%bcond_without check
b34ba92
275cbe0
%global __brp_strip_lto %{nil}
b34ba92
%global __brp_strip_static_archive %{nil}
b34ba92
b34ba92
# https://github.com/tinygo-org/tinygo
b34ba92
%global goipath         github.com/tinygo-org/tinygo
41a0389
Version:                0.22.0
b34ba92
b34ba92
%global CMSIS_commit        9fe411cef1cef5de58e5957b89760759de44e393
b34ba92
%global avr_commit          6624554c02b237b23dc17d53e992bf54033fc228
03e3a66
%if %{fedora} > 34
03e3a66
%global clang_llvm_version  13
03e3a66
%else
8bc0621
%global clang_llvm_version  12
03e3a66
%endif
4ce2174
%global cmsis_svd_commit    df75ff974c76a911fc2815e29807f5ecaae06fc2
1dad7a6
%global compiler_rt_version 9.0.0
41a0389
%global musl_version        1.2.0
bf7dd9c
%global nrfx_commit         d779b49fc59c7a165e7da1d7cd7d57b28a059f16
33d138a
%global picolibc_commit     f68b8204f797d6b3bfbc7c4da4d257961fbc8770
33d138a
%global wasi_libc_commit    ad5133410f66b93a2381db5b542aad5e0964db96
b34ba92
dfd84e5
# No longer matching regular Go's /usr/share/gocode because it also provides
dfd84e5
# pre-compiled binaries, and symlinks to arch-specific clang headers.
dfd84e5
%global tinygoroot %{_libdir}/tinygo
b34ba92
b34ba92
%gometa
b34ba92
b34ba92
%global common_description %{expand:
b34ba92
Go compiler for small places. Microcontrollers, WebAssembly, and command-line
b34ba92
tools. Based on LLVM.}
b34ba92
b34ba92
#global godocs CHANGELOG.md BUILDING.md CONTRIBUTING.md README.md
b34ba92
#global golicenses LICENSE LICENSE.TXT
b34ba92
#global gosupfiles lib/CMSIS/CMSIS/Include/*.h lib/compiler-rt/lib/builtins/*/*.S lib/nrfx/mdk/*.{ld,S} src/examples/wasm/*/*.js targets/*.{js,json,ld,S}
b34ba92
b34ba92
Name:           tinygo
dfb60b5
Release:        %autorelease
b34ba92
Summary:        Go compiler for small places
b34ba92
b34ba92
# Main files: BSD
b34ba92
# CMSIS: BSD (subsetted)
b34ba92
# avr-mcu: ASL 2.0 (packs) and MIT (Rust code, unused by this package)
bd124d1
# cmsis-svd: ASL 2.0 and BSD and ISC and MIT (subsetted)
b34ba92
# compiler-rt: NCSA or MIT
33d138a
# musl: MIT
b34ba92
# nrfx: BSD and ASL 2.0
f7d3f8d
# picolibc: BSD and ISC and MIT and GPLv2 (testing code only, unused by this package)
5e83ee0
# wasi-libc: BSD and CC0 and ISC and MIT and Public Domain
5e83ee0
License:        BSD and ASL 2.0 and CC0 and ISC and MIT and (NCSA or MIT) and Public Domain
b34ba92
URL:            %{gourl}
b34ba92
Source0:        %{gosource}
b34ba92
Source1:        clean_tarballs.sh
b34ba92
Source2:        cmsis-%{CMSIS_commit}-clean.tar.xz
b34ba92
Source3:        https://github.com/avr-rust/avr-mcu/archive/%{avr_commit}/avr-%{avr_commit}.tar.gz
b34ba92
Source4:        cmsis_svd-%{cmsis_svd_commit}-clean.tar.xz
b34ba92
Source5:        https://releases.llvm.org/%{compiler_rt_version}/compiler-rt-%{compiler_rt_version}.src.tar.xz
33d138a
Source60:       https://musl.libc.org/releases/musl-%{musl_version}.tar.gz
33d138a
Source61:       https://musl.libc.org/releases/musl-%{musl_version}.tar.gz.asc
33d138a
Source62:       https://musl.libc.org/musl.pub
33d138a
Source7:        https://github.com/NordicSemiconductor/nrfx/archive/%{nrfx_commit}/nrfx-%{nrfx_commit}.tar.gz
33d138a
Source8:        https://github.com/keith-packard/picolibc/archive/%{picolibc_commit}/picolibc-%{picolibc_commit}.tar.gz
33d138a
Source9:        https://github.com/WebAssembly/wasi-libc/archive/%{wasi_libc_commit}/wasi-libc-%{wasi_libc_commit}.tar.gz
6ba7946
# https://github.com/tinygo-org/tinygo/pull/2620
6ba7946
Patch0001:      0001-Fix-cross-Linux-setup-on-non-amd64-arches.patch
b854f98
# We don't have wasmtime to run these.
6ba7946
Patch0002:      0002-Skip-WASI-tests.patch
6cc5380
# Unbundling things
6ba7946
Patch0003:      0003-Use-system-mingw64-headers-and-crt.patch
6cc5380
# Skip testing some things where qemu is broken:
6cc5380
# https://gitlab.com/qemu-project/qemu/-/issues/447
6cc5380
# https://gitlab.com/qemu-project/qemu/-/issues/690
6ba7946
Patch0004:      0004-Skip-some-cross-Linux-tests-where-qemu-is-broken.patch
6ba7946
Patch0005:      0005-Fix-LLVM-build-constraints.patch
ab77f34
# Add Fedora specific dnf instructions
6ba7946
Patch0006:      0006-Suggest-optional-packages-to-install-if-missing.patch
22683d9
6e6ed23
# Not supported upstream yet.
dfd84e5
ExcludeArch:    armv7hl ppc64le s390x
6e6ed23
52b73ed
BuildRequires:  (clang-devel >= %{clang_llvm_version} with clang-devel < %{lua: print(tonumber(rpm.expand('%{clang_llvm_version}')) + 1)})
33d138a
BuildRequires:  golang(github.com/aykevl/go-wasm)
b34ba92
BuildRequires:  golang(github.com/blakesmith/ar)
41a0389
%if %{fedora} > 35
118877d
%ifnarch %{ix86}
118877d
BuildRequires:  chromium
41a0389
BuildRequires:  golang(github.com/chromedp/chromedp) >= 0.7.6
eeea62b
BuildRequires:  golang(github.com/chromedp/cdproto/cdp)
118877d
%endif
41a0389
%endif
41a0389
BuildRequires:  golang(github.com/gofrs/flock) >= 0.8.1
1dad7a6
BuildRequires:  golang(github.com/google/shlex)
b34ba92
BuildRequires:  golang(github.com/marcinbor85/gohex)
bf7dd9c
BuildRequires:  golang(github.com/mattn/go-colorable) >= 0.1.8
bf7dd9c
BuildRequires:  golang(go.bug.st/serial) >= 1.1.2
b34ba92
BuildRequires:  golang(golang.org/x/tools/go/ast/astutil)
4ce2174
BuildRequires:  golang(golang.org/x/tools/go/ssa) >= 0.1.7
41a0389
BuildRequires:  golang(gopkg.in/yaml.v2) >= 2.4.0
b34ba92
BuildRequires:  golang(tinygo.org/x/go-llvm)
41a0389
BuildRequires:  golang-tests
52b73ed
BuildRequires:  llvm-devel(major) = %{clang_llvm_version}
52b73ed
BuildRequires:  make
b34ba92
8ef2c79
BuildRequires:  avr-gcc
8ef2c79
BuildRequires:  avr-libc
33d138a
BuildRequires:  binaryen >= 102
b34ba92
# We don't have glibc for arm, so skip these.
b34ba92
#BuildRequires:  gcc-arm-linux-gnu
b34ba92
#BuildRequires:  gcc-aarch64-linux-gnu
b34ba92
BuildRequires:  lld
33d138a
BuildRequires:  mingw64-crt
33d138a
BuildRequires:  mingw64-headers
b34ba92
BuildRequires:  nodejs
b34ba92
BuildRequires:  qemu-system-arm-core
33d138a
BuildRequires:  qemu-system-riscv-core
33d138a
BuildRequires:  qemu-user
33d138a
33d138a
# For GPG signature verification
33d138a
BuildRequires:  gnupg2
b34ba92
41a0389
Requires:       clang
b34ba92
Requires:       golang
b34ba92
Requires:       lld
8ef2c79
Recommends:     avr-gcc
8ef2c79
Recommends:     avr-libc
bd124d1
# Add this when LLVM supports ESP natively.
bd124d1
# Recommends:     esptool
33d138a
Recommends:     mingw64-crt
33d138a
Recommends:     mingw64-headers
b34ba92
Recommends:     qemu-system-arm-core
33d138a
Recommends:     qemu-system-riscv-core
33d138a
Recommends:     qemu-user
b34ba92
b12ac02
# Make note of bundled libc's
b12ac02
Provides:       bundled(compiler-rt) = %{compiler_rt_version}
b12ac02
Provides:       bundled(musl) = %{musl_version}
b12ac02
Provides:       bundled(picolibc) = %{picolibc_commit}
b12ac02
Provides:       bundled(wasi-libc) = %{wasi_libc_commit}
b12ac02
b34ba92
%description
b34ba92
%{common_description}
b34ba92
b34ba92
#gopkg
b34ba92
b34ba92
b34ba92
%prep
b34ba92
%goprep
33d138a
%autopatch -p1
b34ba92
b34ba92
tar -C lib -xf %{SOURCE2}
b34ba92
rmdir lib/CMSIS
b34ba92
mv lib/CMSIS-%{CMSIS_commit} lib/CMSIS
b34ba92
b34ba92
tar -C lib -xf %{SOURCE3}
b34ba92
rmdir lib/avr
b34ba92
mv lib/avr-mcu-%{avr_commit} lib/avr
b34ba92
b34ba92
tar -C lib -xf %{SOURCE4}
b34ba92
rmdir lib/cmsis-svd
b34ba92
mv lib/cmsis-svd-%{cmsis_svd_commit} lib/cmsis-svd
b34ba92
b34ba92
tar -C lib -xf %{SOURCE5}
b34ba92
rmdir lib/compiler-rt
b34ba92
mv lib/compiler-rt-%{compiler_rt_version}.src lib/compiler-rt
b34ba92
33d138a
# Verify *before* actually unpacking!
33d138a
%{gpgverify} --keyring='%{SOURCE62}' --signature='%{SOURCE61}' --data='%{SOURCE60}'
33d138a
tar -C lib -xf %{SOURCE60}
33d138a
rmdir lib/musl
33d138a
mv lib/musl-%{musl_version} lib/musl
33d138a
33d138a
tar -C lib -xf %{SOURCE7}
b34ba92
rmdir lib/nrfx
b34ba92
mv lib/nrfx-%{nrfx_commit} lib/nrfx
b34ba92
rm lib/nrfx/.gitignore
b34ba92
chmod -x lib/nrfx/doc/generate_html_doc.sh
b34ba92
33d138a
tar -C lib -xf %{SOURCE8}
f7d3f8d
rmdir lib/picolibc
f7d3f8d
mv lib/picolibc-%{picolibc_commit} lib/picolibc
f7d3f8d
33d138a
tar -C lib -xf %{SOURCE9}
5e83ee0
rmdir lib/wasi-libc
5e83ee0
mv lib/wasi-libc-%{wasi_libc_commit} lib/wasi-libc
5e83ee0
41a0389
# These packages were added in Go 1.17, so we can't test them in older Fedora.
41a0389
%if %{fedora} && %{fedora} < 36
41a0389
sed -i \
41a0389
    -e 's!crypto/elliptic/internal/fiat !!g' \
41a0389
    -e 's!net/http/internal/ascii !!g' \
41a0389
    Makefile
41a0389
%endif
7c2e2a5
# This test is too slow and pretty much freezes.
7c2e2a5
%ifarch %{ix86}
7c2e2a5
sed -i -e 's!archive/zip!$(nil)!' Makefile
7c2e2a5
%endif
b34ba92
b34ba92
%build
52b73ed
# Use only GOBUILDTAGS when https://pagure.io/go-rpm-macros/pull-request/34 is
52b73ed
# merged and released.
52b73ed
export BUILDTAGS="llvm%{clang_llvm_version}" LDFLAGS="-X github.com/tinygo-org/tinygo/goenv.TINYGOROOT=%{tinygoroot} "
b34ba92
%gobuild -o %{gobuilddir}/bin/tinygo %{goipath}
bf7dd9c
GO111MODULE=off %make_build gen-device STM32=0
41a0389
for target in thumbv6m-unknown-unknown-eabi-cortex-m0 thumbv6m-unknown-unknown-eabi-cortex-m0plus thumbv7em-unknown-unknown-eabi-cortex-m4; do
33d138a
    mkdir -p ${target}
f7d3f8d
    for libc in compiler-rt picolibc; do
f7d3f8d
        TINYGOROOT=$PWD \
f7d3f8d
            %{gobuilddir}/bin/tinygo \
41a0389
                build-library -target=${target#*eabi-} -o ${target}/${libc} ${libc}
e3dd63f
        chmod -R a+rX ${target}/${libc}
f7d3f8d
    done
b34ba92
done
52b73ed
%make_build wasi-libc CLANG=clang-%{clang_llvm_version} LLVM_AR=llvm-ar LLVM_NM=llvm-nm
b34ba92
b34ba92
b34ba92
%install
b34ba92
#gopkginstall
b34ba92
install -vdm 0755                     %{buildroot}%{_bindir}
b34ba92
install -vpm 0755 %{gobuilddir}/bin/* %{buildroot}%{_bindir}/
b34ba92
b34ba92
install -vdm 0755 %{buildroot}%{tinygoroot}
b34ba92
install -vdm 0755 %{buildroot}%{tinygoroot}/lib
b34ba92
install -vdm 0755 %{buildroot}%{tinygoroot}/lib/CMSIS
b34ba92
install -vpm 0644 lib/CMSIS/README.md %{buildroot}%{tinygoroot}/lib/CMSIS/
b34ba92
install -vdm 0755 %{buildroot}%{tinygoroot}/lib/CMSIS/CMSIS/Include
b34ba92
install -vpm 0644 lib/CMSIS/CMSIS/Include/* %{buildroot}%{tinygoroot}/lib/CMSIS/CMSIS/Include/
b34ba92
install -vdm 0755 %{buildroot}%{tinygoroot}/lib/compiler-rt
b34ba92
install -vpm 0644 lib/compiler-rt/README.txt %{buildroot}%{tinygoroot}/lib/compiler-rt/
b34ba92
install -vpm 0644 lib/compiler-rt/LICENSE.TXT %{buildroot}%{tinygoroot}/lib/compiler-rt/
b34ba92
install -vdm 0755 %{buildroot}%{tinygoroot}/lib/compiler-rt/lib
b34ba92
cp -rp lib/compiler-rt/lib/builtins %{buildroot}%{tinygoroot}/lib/compiler-rt/lib/
33d138a
install -vdm 0755 %{buildroot}%{tinygoroot}/lib/musl
33d138a
cp -rp lib/musl/COPYRIGHT %{buildroot}%{tinygoroot}/lib/musl
33d138a
cp -rp lib/musl/include %{buildroot}%{tinygoroot}/lib/musl
33d138a
install -vdm 0755 %{buildroot}%{tinygoroot}/lib/musl/arch
33d138a
cp -rp lib/musl/arch/aarch64 %{buildroot}%{tinygoroot}/lib/musl/arch
33d138a
cp -rp lib/musl/arch/arm %{buildroot}%{tinygoroot}/lib/musl/arch
33d138a
cp -rp lib/musl/arch/generic %{buildroot}%{tinygoroot}/lib/musl/arch
33d138a
cp -rp lib/musl/arch/i386 %{buildroot}%{tinygoroot}/lib/musl/arch
33d138a
cp -rp lib/musl/arch/x86_64 %{buildroot}%{tinygoroot}/lib/musl/arch
33d138a
install -vdm 0755 %{buildroot}%{tinygoroot}/lib/musl/crt
33d138a
cp -rp lib/musl/crt/crt1.c %{buildroot}%{tinygoroot}/lib/musl/crt
33d138a
install -vdm 0755 %{buildroot}%{tinygoroot}/lib/musl/src
33d138a
cp -rp lib/musl/src/env %{buildroot}%{tinygoroot}/lib/musl/src
33d138a
cp -rp lib/musl/src/errno %{buildroot}%{tinygoroot}/lib/musl/src
33d138a
cp -rp lib/musl/src/exit %{buildroot}%{tinygoroot}/lib/musl/src
33d138a
cp -rp lib/musl/src/include %{buildroot}%{tinygoroot}/lib/musl/src
33d138a
cp -rp lib/musl/src/internal %{buildroot}%{tinygoroot}/lib/musl/src
33d138a
cp -rp lib/musl/src/malloc %{buildroot}%{tinygoroot}/lib/musl/src
33d138a
cp -rp lib/musl/src/mman %{buildroot}%{tinygoroot}/lib/musl/src
33d138a
cp -rp lib/musl/src/signal %{buildroot}%{tinygoroot}/lib/musl/src
33d138a
cp -rp lib/musl/src/stdio %{buildroot}%{tinygoroot}/lib/musl/src
33d138a
cp -rp lib/musl/src/string %{buildroot}%{tinygoroot}/lib/musl/src
33d138a
cp -rp lib/musl/src/thread %{buildroot}%{tinygoroot}/lib/musl/src
33d138a
cp -rp lib/musl/src/time %{buildroot}%{tinygoroot}/lib/musl/src
33d138a
cp -rp lib/musl/src/unistd %{buildroot}%{tinygoroot}/lib/musl/src
b34ba92
cp -rp lib/nrfx %{buildroot}%{tinygoroot}/lib/
5e83ee0
install -vdm 0755 %{buildroot}%{tinygoroot}/lib/wasi-libc
5e83ee0
cp -rp lib/wasi-libc/sysroot %{buildroot}%{tinygoroot}/lib/wasi-libc/
f7d3f8d
install -vdm 0755 %{buildroot}%{tinygoroot}/lib/picolibc/newlib/libc
f7d3f8d
cp -rp lib/picolibc/newlib/libc/ctype %{buildroot}%{tinygoroot}/lib/picolibc/newlib/libc
e3dd63f
chmod -x %{buildroot}%{tinygoroot}/lib/picolibc/newlib/libc/ctype/{mkcaseconv,mkcategories,mkunidata}
f7d3f8d
cp -rp lib/picolibc/newlib/libc/include %{buildroot}%{tinygoroot}/lib/picolibc/newlib/libc
f7d3f8d
cp -rp lib/picolibc/newlib/libc/locale %{buildroot}%{tinygoroot}/lib/picolibc/newlib/libc
f7d3f8d
cp -rp lib/picolibc/newlib/libc/string %{buildroot}%{tinygoroot}/lib/picolibc/newlib/libc
e3dd63f
chmod -x %{buildroot}%{tinygoroot}/lib/picolibc/newlib/libc/string/{mkunidata,mkwide,mkwidthA,uniset}
f7d3f8d
cp -rp lib/picolibc/newlib/libc/tinystdio %{buildroot}%{tinygoroot}/lib/picolibc/newlib/libc
e3dd63f
chmod -x %{buildroot}%{tinygoroot}/lib/picolibc/newlib/libc/tinystdio/make-dtoa-data
33d138a
install -vdm 0755 %{buildroot}%{tinygoroot}/lib/picolibc/newlib/libm
33d138a
cp -rp lib/picolibc/newlib/libm/common %{buildroot}%{tinygoroot}/lib/picolibc/newlib/libm
33d138a
cp -rp lib/picolibc-stdio.c %{buildroot}%{tinygoroot}/lib
b34ba92
install -vdm 0755 %{buildroot}%{tinygoroot}/pkg
41a0389
for target in thumbv6m-unknown-unknown-eabi-cortex-m0 thumbv6m-unknown-unknown-eabi-cortex-m0plus thumbv7em-unknown-unknown-eabi-cortex-m4; do
33d138a
    install -vdm 0755 %{buildroot}%{tinygoroot}/pkg/${target}
f7d3f8d
    for libc in compiler-rt picolibc; do
33d138a
        cp -rp ${target}/${libc} %{buildroot}%{tinygoroot}/pkg/${target}/
f7d3f8d
    done
b34ba92
done
b34ba92
cp -rp src %{buildroot}%{tinygoroot}/
5986fe1
rm %{buildroot}%{tinygoroot}/src/examples/wasm/.gitignore
b34ba92
cp -rp targets %{buildroot}%{tinygoroot}/
b34ba92
b34ba92
b34ba92
%if %{with check}
33d138a
%global gotestflags %gocompilerflags -v -tags="llvm%{clang_llvm_version}"
b34ba92
%check
b34ba92
export TINYGOROOT=%{buildroot}%{tinygoroot}
eeea62b
export GOPATH=%{buildroot}%{tinygoroot}:%{gopath}
eeea62b
export PATH=%{buildroot}%{_bindir}:$PATH
eeea62b
export GO111MODULE=off
33d138a
export XDG_CACHE_HOME="${PWD}/$(mktemp -d tinygo.XXXXXX)"
41a0389
%gocheck -v -t src -d tests/tinygotest
bf7dd9c
make smoketest STM32=0 XTENSA=0
41a0389
%if %{fedora} > 35
349460a
%ifnarch %{ix86} aarch64
eeea62b
make wasmtest
b34ba92
%endif
118877d
%endif
0f7ffa0
%ifarch %{ix86}
0f7ffa0
make tinygo-test-fast
0f7ffa0
%else
41a0389
make tinygo-test
41a0389
%endif
0f7ffa0
%endif
b34ba92
b34ba92
b34ba92
%files
b34ba92
%doc README.md CHANGELOG.md CONTRIBUTING.md
b34ba92
%license LICENSE
b34ba92
%{_bindir}/tinygo
b34ba92
%{tinygoroot}
b34ba92
%doc %{tinygoroot}/lib/CMSIS/README.md
b34ba92
%license %{tinygoroot}/lib/compiler-rt/LICENSE.TXT
b34ba92
%doc %{tinygoroot}/lib/compiler-rt/README.txt
b34ba92
%license %{tinygoroot}/lib/nrfx/LICENSE
b34ba92
%doc %{tinygoroot}/lib/nrfx/README.md
33d138a
%license %{tinygoroot}/lib/musl/COPYRIGHT
b34ba92
b34ba92
#gopkgfiles
b34ba92
b34ba92
b34ba92
%changelog
dfb60b5
%autochangelog