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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
# Copyright 2020-2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=7
CMAKE_MAKEFILE_GENERATOR=emake # keep dependencies down
inherit cmake
DESCRIPTION="Darwin Xtools matching Xcode Tools ${PN}"
HOMEPAGE="https://github.com/iains/darwin-xtools"
SRC_URI="https://github.com/grobian/darwin-xtools/archive/gentoo-${PVR}.tar.gz -> darwin-xtools-${PVR}.tar.gz"
LICENSE="APSL-2"
SLOT="8"
KEYWORDS="~arm64-macos ~ppc-macos ~x64-macos"
# xtools uses c++11 features, not available in gcc-apple, hence gcc/clang dep
DEPEND="sys-devel/binutils-config
|| ( sys-devel/gcc:* sys-devel/clang:* )
app-arch/xar
dev-libs/libyaml"
RDEPEND="${DEPEND}"
BDEPEND=""
S="${WORKDIR}/darwin-xtools-gentoo-${PVR}"
src_prepare() {
cmake_src_prepare
# kill forced libstd=libc++ usage, breaks with GCC-13 which has
# preliminary support for that
# check_cxx_compiler_flag(-stdlib=libc++ # XTOOLS_CXX_HAS_STDLIB_FLAG)
#
sed -i -e '/check_cxx_compiler_flag/s/XTOOLS_CXX_HAS_STDLIB_FLAG/NO_&/' \
cmake/config-ix.cmake || die
}
src_configure() {
CTARGET=${CTARGET:-${CHOST}}
if [[ ${CTARGET} == ${CHOST} ]] ; then
if [[ ${CATEGORY} == cross-* ]] ; then
export CTARGET=${CATEGORY#cross-}
fi
fi
LIBPATH=/usr/$(get_libdir)/binutils/${CTARGET}/xtools-${PV}
DATAPATH=/usr/share/binutils-data/${CTARGET}/xtools-${PV}
if [[ ${CHOST} != ${CTARGET} ]] ; then
BINPATH=/usr/${CHOST}/${CTARGET}/binutils-bin/xtools-${PV}
else
BINPATH=/usr/${CTARGET}/binutils-bin/xtools-${PV}
fi
is-host-64bit() {
case ${CTARGET} in
x86_64-*|powerpc64-*|arm64-*) echo YES ;;
*) echo NO ;;
esac
}
local mycmakeargs=(
-DCMAKE_OSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET}
-DPACKAGE_VERSION="Gentoo ${PN}-${PVR}"
-DCMAKE_INSTALL_PREFIX="${EPREFIX}${BINPATH%/*}" # cmake insists on /bin
-DCCTOOLS_LD_CLASSIC=NO # fails to link, and is useless anyway
-DXTOOLS_AS_USE_CLANG=YES # default to host as for unsupported targets
-DXTOOLS_AS_CLANG_USE_HOST=YES # search for arch/as-host iso clang
-DXTOOLS_AS_SUBDIR="${EPREFIX}${LIBPATH}/"
-DXTOOLS_LTO_SUPPORT=NO
-DXTOOLS_HAS_LIBPRUNETRIE=YES
-DXTOOLS_TAPI_SUPPORT=ON
-DXTOOLS_USE_TAPILITE=ON
-DXTOOLS_HOST_IS_64B=$(is-host-64bit)
-DXTOOLS_BUGURL="https://bugs.gentoo.org/"
)
cmake_src_configure
}
src_install() {
cmake_src_install
# cmake insists on installing in /bin, so move bins to the place we
# want them
mv "${ED}${BINPATH%/*}/bin" "${ED}${BINPATH}" || die
# move as impls into LIBPATH, such that binutils-config doesn't
# create links for this
dodir "${LIBPATH}"
local as
for as in "${ED}${BINPATH}"/*/as ; do
as=${as%/as}
mv "${as}" "${ED}${LIBPATH}"/ || die
done
# provide as-host wrappers, used on "unsupported" platforms: x86,
# x64, arm, arm64, the main reason here is missing support for
# instructions, e.g. the as works fine, until newer instruction sets
# are used like SSE4.1, AVX, etc.
local arch
for arch in i386 x86_64 arm arm64 ; do
mkdir -p "${ED}${LIBPATH}"/${arch}
as="${ED}${LIBPATH}"/${arch}/as-host
rm -f "${as}"
cat <<-EOF > "${as}"
#!/usr/bin/env bash
exec /usr/bin/as "\$@"
EOF
chmod 755 "${as}"
done
doman ld64/doc/man/man*/* cctools/man/*.[135]
dodir "${DATAPATH}"
mv "${ED}"/usr/share/man "${ED}/${DATAPATH}/" || die
docompress "${DATAPATH}"/man
cd "${S}"
insinto /etc/env.d/binutils
cat <<-EOF > env.d
TARGET="${CHOST}"
VER="xtools-${PV}"
FAKE_TARGETS="${CHOST}"
EOF
newins env.d ${CHOST}-xtools-${PV}
}
pkg_postinst() {
binutils-config ${CHOST}-xtools-${PV}
}
|