%bcond alltests 1 %undefine _missing_build_ids_terminate_build %global srcver 0.24.0 %global srcpre rc1 %global pkgsrc %{srcver}%{?srcpre:-%{srcpre}} # TODO: Architectures will be driven by the macros package %global hare_arches x86_64 aarch64 riscv64 %global _description %{expand: Hare is a systems programming language designed to be simple, stable, and robust. Hare uses a static type system, manual memory management, and a minimal runtime. It is well-suited to writing operating systems, system tools, compilers, networking software, and other low-level, high performance tasks.} Name: hare Version: %{srcver}%{?srcpre:~%{srcpre}} Release: %autorelease Summary: The Hare programming language License: GPL-3.0-only AND MPL-2.0 URL: https://git.sr.ht/~sircmpwn/hare Source0: %{url}/archive/%{pkgsrc}.tar.gz ExclusiveArch: %{hare_arches} BuildRequires: harec BuildRequires: make BuildRequires: qbe BuildRequires: scdoc BuildRequires: tzdata Requires: %{name}-bin = %{version}-%{release} Requires: %{name}-filesystem %description %{_description} # TODO: Filesystem subpackage will be moved to the macros package %package filesystem Summary: Directories used by Hare packages License: LicenseRef-Fedora-Public-Domain BuildArch: noarch %description filesystem This package contains the basic directory layout used by Hare packages. %package bin Summary: The Hare toolchain License: GPL-3.0-only Requires: binutils Requires: harec Requires: tzdata Requires: %{name} = %{version}-%{release} Recommends: %{name}-src = %{version}-%{release} %description bin %{_description} %package src Summary: The Hare standard library License: MPL-2.0 BuildArch: noarch %description src %{_description} %package cross-compile-gnu Summary: GNU tools for cross-compiling Hare programs BuildArch: noarch Requires: %{name} = %{version}-%{release} %ifnarch x86_64 Requires: gcc-x86_64-linux-gnu Requires: binutils-x86_64-linux-gnu %endif %ifnarch aarch64 Requires: gcc-aarch64-linux-gnu Requires: binutils-aarch64-linux-gnu %endif %ifnarch riscv64 Requires: gcc-riscv64-linux-gnu Requires: binutils-riscv64-linux-gnu %endif %description cross-compile-gnu %{_description} %package cross-compile-llvm Summary: LLVM tools for cross-compiling Hare programs BuildArch: noarch Requires: %{name} = %{version}-%{release} Requires: clang Requires: lld Requires: llvm %description cross-compile-llvm %{_description} %prep %autosetup -n %{name}-%{pkgsrc} %build # Adjust configuration cp configs/linux.mk config.mk sed -i 's|^PREFIX.*|PREFIX = %{_prefix}|' config.mk sed -i 's|^ARCH.*|ARCH = %{_arch}|' config.mk sed -i 's|^VERSION.*|VERSION = %{version}|' config.mk # Clear set cross compile options sed -i -E '/^.*_(AS|CC|LD).*/d' config.mk sed -i -z 's/\n\n\n/\n/' config.mk echo "# Cross compiling options" >> config.mk # Default cross compile toolchain is GNU for arch in %{hare_arches} do ARCH="%{_arch}" if [[ "${ARCH}" = "${arch}" ]] then echo "${RPM_ARCH^^}_AS = as" >> config.mk echo "${RPM_ARCH^^}_CC = gcc" >> config.mk echo "${RPM_ARCH^^}_LD = ld" >> config.mk else ARCH="${arch}" echo "${ARCH^^}_AS = ${arch}-linux-gnu-as" >> config.mk echo "${ARCH^^}_CC = ${arch}-linux-gnu-gcc" >> config.mk echo "${ARCH^^}_LD = ${arch}-linux-gnu-ld" >> config.mk fi echo "" >> config.mk done %{!?_auto_set_build_flags:%{set_build_flags}} %make_build %install %make_install cp COPYING COPYING.stdlib cp cmd/COPYING COPYING.bin mkdir -m 0755 %{buildroot}%{_usrsrc}/hare/third-party %check %{?with_alltests:STDLIB_SLOW_TESTS=1} make check %files %license COPYING.stdlib COPYING.bin %doc MAINTAINERS README README.md TREES docs/*.md docs/*.txt %files bin %{_bindir}/hare %{_bindir}/haredoc %{_mandir}/man1/hare* %{_mandir}/man5/hare* %files filesystem %dir %{_usrsrc}/hare %dir %{_usrsrc}/hare/third-party %files src %dir %{_usrsrc}/hare/stdlib %{_usrsrc}/hare/stdlib/* %files cross-compile-gnu %files cross-compile-llvm %changelog %autochangelog