summaryrefslogtreecommitdiff
path: root/dev-cpp/highway/highway-1.3.0.ebuild
blob: d5dc703e3508640f94bd5d7077b8f483ede4fe41 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# Copyright 2021-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

inherit cmake-multilib toolchain-funcs

DESCRIPTION="Performance-portable, length-agnostic SIMD with runtime dispatch"
HOMEPAGE="https://github.com/google/highway"

if [[ "${PV}" == *9999* ]]; then
	inherit git-r3
	EGIT_REPO_URI="https://github.com/google/highway.git"
else
	SRC_URI="https://github.com/google/highway/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz"
	KEYWORDS="~alpha amd64 arm ~arm64 ~hppa ~loong ~ppc ~ppc64 ~riscv ~sparc ~x86"
fi

LICENSE="Apache-2.0"
SLOT="0"
IUSE="cpu_flags_arm_neon test"

DEPEND="test? ( dev-cpp/gtest[${MULTILIB_USEDEP}] )"
BDEPEND="|| ( >=sys-devel/binutils-2.44:* llvm-core/lld sys-devel/native-cctools )"

RESTRICT="!test? ( test )"

check_binutils_version() {
	if [[ -z ${I_KNOW_WHAT_I_AM_DOING} ]] && ! tc-ld-is-gold && ! tc-ld-is-lld ; then
		# Okay, hopefully it's Binutils, but we don't have a nice way of checking
		# the gas version.
		#
		# Convert this:
		# ```
		# GNU assembler (Gentoo 2.44 p1) 2.44
		# Copyright (C) 2022 Free Software Foundation, Inc.
		# This program is free software; you may redistribute it under the terms of
		# the GNU General Public License version 3 or (at your option) a later version.
		# This program has absolutely no warranty.
		# ```
		#
		# into...
		# ```
		# 2.44
		# ```
		local ver=$($(tc-getAS) --version 2>&1 | head -n 1 | rev | cut -d' ' -f1 | rev)

		if ! [[ ${ver} =~ [0-9].[0-9][0-9] ]] ; then
			# Skip if unrecognised format so we don't pass something
			# odd into ver_cut.
			return
		fi

		ver_major=$(ver_cut 1 "${ver}")
		ver_minor=$(ver_cut 2 "${ver}")

		# Check borrowed from sys-apps/pciutils (see bug #966644).
		if [[ ${ver_major} -eq 2 && ${ver_minor} -lt 44 ]] ; then
			eerror "Old version of binutils activated! ${P} cannot be built with an old version."
			eerror "Please follow these steps:"
			eerror "1. Select a newer binutils (>= 2.44) using binutils-config"
			eerror " (If no such version is installed, run emerge -v1 sys-devel/binutils)"
			eerror "2. Run: . /etc/profile"
			eerror "3. Try emerging again with: emerge -v1 ${CATEGORY}/${P}"
			eerror "4. Complete your world upgrade if you were performing one."
			eerror "5. Perform a depclean (emerge -acv)"
			eerror "\tYou MUST depclean after every world upgrade in future!"
			die "Old binutils found! Change to a newer (g)as using binutils-config."
		fi
	fi
}

pkg_pretend() {
	[[ ${MERGE_TYPE} != binary ]] && check_binutils_version
}

pkg_setup() {
	[[ ${MERGE_TYPE} != binary ]] && check_binutils_version
}

multilib_src_configure() {
	local mycmakeargs=(
		-DHWY_CMAKE_ARM7=$(usex cpu_flags_arm_neon)
		-DBUILD_TESTING=$(usex test)
		-DHWY_ENABLE_TESTS=$(usex test)
		-DHWY_WARNINGS_ARE_ERRORS=OFF
	)

	use test && mycmakeargs+=( "-DHWY_SYSTEM_GTEST=ON" )

	cmake_src_configure
}