diff options
author | Michał Górny <mgorny@gentoo.org> | 2019-08-17 10:28:41 +0200 |
---|---|---|
committer | Michał Górny <mgorny@gentoo.org> | 2019-09-25 19:27:05 +0200 |
commit | b5a52d6edf58b3f419dca5170625dba3e097181e (patch) | |
tree | 3f74b6c58cdae66a766beda5a0ddb63b860fd8dd /sys-libs | |
parent | sys-libs/netbsd-csu: Provide more complete test suite (diff) | |
download | gentoo-b5a52d6edf58b3f419dca5170625dba3e097181e.tar.gz gentoo-b5a52d6edf58b3f419dca5170625dba3e097181e.tar.bz2 gentoo-b5a52d6edf58b3f419dca5170625dba3e097181e.zip |
sys-libs/netbsd-csu: Bump to 9.0_beta
Signed-off-by: Michał Górny <mgorny@gentoo.org>
Diffstat (limited to 'sys-libs')
-rw-r--r-- | sys-libs/netbsd-csu/Manifest | 1 | ||||
-rw-r--r-- | sys-libs/netbsd-csu/netbsd-csu-9.0_beta.ebuild | 139 |
2 files changed, 140 insertions, 0 deletions
diff --git a/sys-libs/netbsd-csu/Manifest b/sys-libs/netbsd-csu/Manifest index 16f23ab3c5de..c7b5b25b4180 100644 --- a/sys-libs/netbsd-csu/Manifest +++ b/sys-libs/netbsd-csu/Manifest @@ -1,2 +1,3 @@ DIST netbsd-csu-7.1-tests.tar.bz2 579 BLAKE2B 6d042b3b549ce6ffe0bd0ce908d042e4501a95c21958710078f587d9f52316a52f4bcc219f694ee60066a427a84c027c34906b76c7b8ca151766e5b476152708 SHA512 f2aa7d2340e2545a99cb88e104aaca77b64fd5bfea42bbe5e34d790ae120a749245099a550728f3b7ca2ca5a29fd1f426ddd2e8d5a7bc1a44921c308f1cb12db DIST netbsd-csu-7.1.tar.xz 993460 BLAKE2B 013dd56eb5c49289f68518bee3f72afb42b264f7be869c7dda69f12c98ff782246fcee22c84a51719ab7ed45258cf5c06b43ee9d9da31879187bc0025b8e8c02 SHA512 834524a3ada2a4c02e7eb17d8be09cf023b91e64627f3b2abc32d4f3302e982dcf0939406dc8d6c0ec7ca5e641d2d1845885bb22a165b3d6a1979c2945e2aaad +DIST netbsd-csu-9.0_beta.tar.xz 846120 BLAKE2B 59257e72766279ec043cbee39e2056345348088fbb9af097815c381d6cc5d2bf74c24c0ffd91f45da7384ad6df74a1a4bb0a283b3fb44976f7a59ad2f3bbbb24 SHA512 497ea33ac49338cf32bc265f5d9e7f3ba19c58009717af8505f07d9e2ec9bd3a3c72f85ec37924659509111aca20a6552fd8a06c765fa442b414bd6160815e1a diff --git a/sys-libs/netbsd-csu/netbsd-csu-9.0_beta.ebuild b/sys-libs/netbsd-csu/netbsd-csu-9.0_beta.ebuild new file mode 100644 index 000000000000..b1a2e3b5f9e5 --- /dev/null +++ b/sys-libs/netbsd-csu/netbsd-csu-9.0_beta.ebuild @@ -0,0 +1,139 @@ +# Copyright 1999-2019 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 + +inherit bsdmk multilib-minimal toolchain-funcs + +DESCRIPTION="crtbegin.o/crtend.o from NetBSD CSU for GCC-free toolchain" +HOMEPAGE="http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/csu/" +SRC_URI="https://dev.gentoo.org/~mgorny/dist/${P}.tar.xz + test? ( https://dev.gentoo.org/~mgorny/dist/netbsd-csu-7.1-tests.tar.bz2 )" + +LICENSE="BSD-2" +SLOT="0" +KEYWORDS="~amd64 ~x86" +IUSE="test" +RESTRICT="!test? ( test )" + +DEPEND="app-arch/xz-utils + test? ( sys-devel/clang )" + +S=${WORKDIR}/${P}/lib/csu + +src_prepare() { + default + multilib_copy_sources +} + +multilib_src_compile() { + local inc_arch=${ABI:-${ARCH}} + + # rewrite ARCH to match NetBSD includes + case "${inc_arch}" in + x86) inc_arch=i386;; + # x32 seems to be equivalent to amd64 as far as we're concerned + x32) inc_arch=amd64;; + arm64) inc_arch=aarch64;; + esac + + # we need arch-specific headers for some assembler macros + if [[ ! -d ${WORKDIR}/${P}/sys/arch/${inc_arch} ]]; then + die "Unexpected ABI/ARCH: ${inc_arch}, please report" + fi + ln -s "${WORKDIR}/${P}/sys/arch/${inc_arch}/include" common/machine || die + + local opts=( + CC="$(tc-getCC)" + OBJCOPY="$(tc-getOBJCOPY)" + + MKPIC=yes + MKSTRIPIDENT=no + ) + # rewrite MACHINE_ARCH to match names used in CSU + case "${inc_arch}" in + amd64) opts+=( MACHINE_ARCH=x86_64 );; + *) opts+=( MACHINE_ARCH="${inc_arch}" );; + esac + + # we only need those files; crt1 and friends are provided by libc + opts+=( crtbegin.o crtbeginS.o crtend.o ) + + bsdmk_src_compile "${opts[@]}" + + ln -s crtbegin.o crtbeginT.o || die + ln -s crtend.o crtendS.o || die +} + +multilib_src_test() { + cd "${WORKDIR}"/*-tests || die + + # TODO: fix gcc support + local -x CC=${CHOST}-clang + local -x CXX=${CHOST}-clang++ + strip-unsupported-flags + + local cc=( + # -B sets prefix for internal gcc/clang file lookup + "${CC}" -B"${BUILD_DIR}" + ) + + # 1. figure out the correct location for crt* files + if tc-is-gcc; then + # gcc requires crt*.o in multi-dir + local multidir=$("${cc[@]}" -print-multi-directory) + if [[ ${multidir} != . ]]; then + ln -s . "${multidir}" || die + fi + elif tc-is-clang; then + # clang is entirely happy with crt*.o in -B + : + else + eerror "Unsupported compiler for tests ($(tc-getCC))" + return + fi + + # 2. verify that the compiler can use our crtbegin/crtend + local crtbegin=$("${cc[@]}" -print-file-name=crtbegin.o) || die + local crtend=$("${cc[@]}" -print-file-name=crtend.o) || die + if [[ ! ${crtbegin} -ef ${BUILD_DIR}/crtbegin.o ]]; then + die "Compiler uses wrong crtbegin: ${crtbegin}" + fi + if [[ ! ${crtend} -ef ${BUILD_DIR}/crtend.o ]]; then + die "Compiler uses wrong crtend: ${crtend}" + fi + + # 3. build and run the tests + emake CC="${cc[*]}" + + local p out exp + for p in ./hello{,-static,-dyn}; do + if [[ ${p} == ./hello-dyn && ${ABI} == x32 ]]; then + einfo "Skipping ${p} on x32 -- known to crash" + continue + fi + + ebegin "Testing ${p}" + exp='ctor:main:dtor' + [[ ${p} == ./hello-dyn ]] && exp=libctor:${exp}:libdtor + if ! out=$("${p}"); then + eend 1 + die "Test ${p} crashed for ${ABI:-${ARCH}}" + fi + + [[ ${out} == ${exp} ]] + if ! eend "${?}"; then + eerror " Expected: ${exp}" + eerror " Output : ${out}" + die "Test ${p} failed for ${ABI:-${ARCH}}" + fi + done + + emake clean +} + +multilib_src_install() { + dolib crtbegin.o crtbeginS.o crtend.o + dosym crtbegin.o "/usr/$(get_libdir)/crtbeginT.o" + dosym crtend.o "/usr/$(get_libdir)/crtendS.o" +} |