Skip to content

Commit eb0893d

Browse files
committed
external_deps: provide a reusable framwork for building native tools needed for cross-compilation
1 parent b309e98 commit eb0893d

1 file changed

Lines changed: 69 additions & 22 deletions

File tree

external_deps/build.sh

Lines changed: 69 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,18 @@ download_extract() {
165165
configure_build() {
166166
local configure_args=()
167167

168+
case "${HOST}" in
169+
native)
170+
configure_args+=(--prefix="${NATIVE_PREFIX}")
171+
configure_args+=(--libdir="${NATIVE_PREFIX}/lib")
172+
;;
173+
*)
174+
configure_args+=(--host="${HOST}")
175+
configure_args+=(--prefix="${PREFIX}")
176+
configure_args+=(--libdir="${PREFIX}/lib")
177+
;;
178+
esac
179+
168180
if [ "${LIBS_SHARED}" = 'ON' ]
169181
then
170182
configure_args+=(--enable-shared)
@@ -186,9 +198,6 @@ configure_build() {
186198
fi
187199

188200
./configure \
189-
--host="${HOST}" \
190-
--prefix="${PREFIX}" \
191-
--libdir="${PREFIX}/lib" \
192201
"${configure_args[@]}"
193202

194203
make
@@ -212,6 +221,17 @@ get_compiler_arg1() {
212221
cmake_build() {
213222
local cmake_args=()
214223

224+
case "${HOST}" in
225+
native)
226+
cmake_args+=(-DCMAKE_PREFIX_PATH="${NATIVE_PREFIX}")
227+
cmake_args+=(-DCMAKE_INSTALL_PREFIX="${NATIVE_PREFIX}")
228+
;;
229+
*)
230+
cmake_args+=(-DCMAKE_PREFIX_PATH="${PREFIX}")
231+
cmake_args+=(-DCMAKE_INSTALL_PREFIX="${PREFIX}")
232+
;;
233+
esac
234+
215235
cmake_args+=(-DCMAKE_C_COMPILER="$(get_compiler_name ${CC})")
216236
cmake_args+=(-DCMAKE_CXX_COMPILER="$(get_compiler_name ${CXX})")
217237
cmake_args+=(-DCMAKE_C_COMPILER_ARG1="$(get_compiler_arg1 ${CC})")
@@ -229,8 +249,6 @@ cmake_build() {
229249
cmake -S . -B build \
230250
-DCMAKE_TOOLCHAIN_FILE="${CMAKE_TOOLCHAIN}" \
231251
-DCMAKE_BUILD_TYPE='Release' \
232-
-DCMAKE_PREFIX_PATH="${PREFIX}" \
233-
-DCMAKE_INSTALL_PREFIX="${PREFIX}" \
234252
-DBUILD_SHARED_LIBS="${LIBS_SHARED}" \
235253
"${cmake_args[@]}"
236254

@@ -239,26 +257,25 @@ cmake_build() {
239257
}
240258

241259
# Build pkg-config, needed for opusfile.
242-
# As a host-mode dependency it must be provided by the system when cross-compiling.
243-
build_pkgconfig() {
260+
# It is part of the cross-compilation toolchain.
261+
# As a host-mode native dependency it must be provided by the system when cross-compiling.
262+
build_native-pkgconfig() {
244263
local dir_name="pkg-config-${PKGCONFIG_VERSION}"
245264
local archive_name="${dir_name}.tar.gz"
246265

247-
download_extract pkgconfig "${archive_name}" \
266+
download_extract native-pkgconfig "${archive_name}" \
248267
"${PKGCONFIG_BASEURL}/${archive_name}"
249268

250269
"${download_only}" && return
251270

252271
cd "${dir_name}"
253272

254-
# Reset the environment variables, we don't cross-compile this,
255-
# it is part of the cross-compilation toolchain.
256-
# CXXFLAGS is unused.
257-
CFLAGS='-Wno-error=int-conversion' \
258-
LDFLAGS='' \
259-
HOST='' \
260-
configure_build \
261-
--with-internal-glib
273+
(
274+
setup_native
275+
CFLAGS='-Wno-error=int-conversion' \
276+
configure_build \
277+
--with-internal-glib
278+
)
262279
}
263280

264281
# Build NASM
@@ -1362,14 +1379,17 @@ common_setup() {
13621379
BUILD_BASEDIR="build-${PKG_BASEDIR}"
13631380
BUILD_DIR="${WORK_DIR}/${BUILD_BASEDIR}"
13641381
PREFIX="${BUILD_DIR}/prefix"
1365-
PATH="${PREFIX}/bin:${PATH}"
1382+
NATIVE_PREFIX="${BUILD_DIR}/native-prefix"
13661383

13671384
mkdir -p "${DOWNLOAD_DIR}"
13681385
mkdir -p "${PREFIX}/bin"
13691386
mkdir -p "${PREFIX}/include"
13701387
mkdir -p "${PREFIX}/lib"
1388+
mkdir -p "${NATIVE_PREFIX}/bin"
1389+
mkdir -p "${NATIVE_PREFIX}/include"
1390+
mkdir -p "${NATIVE_PREFIX}/lib"
13711391

1372-
export PATH
1392+
PATH="${NATIVE_PREFIX}/bin:${PATH}"
13731393

13741394
GLOBAL_SETUP_ONCE='false'
13751395
fi
@@ -1378,6 +1398,7 @@ common_setup() {
13781398
CPPFLAGS+=" -I${PREFIX}/include"
13791399
LDFLAGS+=" -L${PREFIX}/lib"
13801400

1401+
export PATH
13811402
export PKG_CONFIG PKG_CONFIG_PATH
13821403
export CC CXX LD AR RANLIB STRIP
13831404
export CFLAGS CXXFLAGS CPPFLAGS LDFLAGS
@@ -1401,6 +1422,8 @@ common_setup_arch() {
14011422
CFLAGS+=' -march=armv7-a -mfpu=neon'
14021423
CXXFLAGS+=' -march=armv7-a -mfpu=neon'
14031424
;;
1425+
native-native-native)
1426+
;;
14041427
*)
14051428
log ERROR 'Unsupported platform'
14061429
;;
@@ -1459,6 +1482,10 @@ common_setup_linux() {
14591482
CXXFLAGS+=' -fPIC'
14601483
}
14611484

1485+
common_setup_native() {
1486+
true
1487+
}
1488+
14621489
setup_default() {
14631490
# Require the compiler names to be explicitly hardcoded, we should not inherit them
14641491
# from environment as we heavily cross-compile.
@@ -1483,7 +1510,6 @@ setup_default() {
14831510
unset BITNESS
14841511
unset MACOS_ARCH
14851512
unset CMAKE_OSX_ARCHITECTURES
1486-
unset CROSS_PKG_CONFIG_PATH
14871513
unset MACOSX_DEPLOYMENT_TARGET
14881514
}
14891515

@@ -1558,6 +1584,27 @@ setup_linux-arm64-default() {
15581584
common_setup linux aarch64-unknown-linux-gnu
15591585
}
15601586

1587+
# Set up envirnment for native host tools
1588+
setup_native() {
1589+
setup_default
1590+
CC='cc'
1591+
CXX='c++'
1592+
common_setup native native
1593+
}
1594+
1595+
setup_platform() {
1596+
case "${1}" in
1597+
'native')
1598+
export PLATFORM='native-native-native'
1599+
setup_native
1600+
;;
1601+
*)
1602+
export PLATFORM="${1}"
1603+
"setup_${PLATFORM}"
1604+
;;
1605+
esac
1606+
}
1607+
15611608
base_windows_amd64_mingw_packages='zlib gmp nettle curl sdl3 glew png jpeg webp openal ogg vorbis opus opusfile naclsdk saigosdk naclruntime depcheck'
15621609
all_windows_amd64_mingw_packages="${base_windows_amd64_mingw_packages}"
15631610

@@ -1570,7 +1617,7 @@ all_windows_amd64_msvc_packages="${base_windows_amd64_msvc_packages}"
15701617
base_windows_i686_msvc_packages="${base_windows_amd64_msvc_packages}"
15711618
all_windows_i686_msvc_packages="${base_windows_amd64_msvc_packages}"
15721619

1573-
base_macos_amd64_default_packages='pkgconfig nasm gmp nettle sdl3 glew png jpeg webp openal ogg vorbis opus opusfile naclsdk saigosdk naclruntime'
1620+
base_macos_amd64_default_packages='native-pkgconfig nasm gmp nettle sdl3 glew png jpeg webp openal ogg vorbis opus opusfile naclsdk saigosdk naclruntime'
15741621
all_macos_amd64_default_packages="${base_macos_amd64_default_packages}"
15751622

15761623
base_macos_arm64_default_packages='pkgconfig gmp nettle sdl3 glew png jpeg webp openal ogg vorbis opus opusfile naclsdk saigosdk naclruntime'
@@ -1614,7 +1661,7 @@ printHelp() {
16141661
all linux windows macos
16151662
16161663
Packages:
1617-
pkgconfig nasm zlib gmp nettle curl sdl3 glew png jpeg webp openal ogg vorbis opus opusfile naclsdk saigosdk naclruntime wasisdk wasmtime
1664+
native-pkgconfig nasm zlib gmp nettle curl sdl3 glew png jpeg webp openal ogg vorbis opus opusfile naclsdk saigosdk naclruntime wasisdk wasmtime
16181665
16191666
Virtual packages:
16201667
base build packages for pre-built binaries to be downloaded when building the game
@@ -1744,6 +1791,6 @@ esac
17441791

17451792
for PLATFORM in ${platform_list}
17461793
do (
1747-
"setup_${PLATFORM}"
1794+
setup_platform "${PLATFORM}"
17481795
build "${@}"
17491796
) done

0 commit comments

Comments
 (0)