Files
how-to-vulkan/ktx/scripts/build_linux.sh
T
2026-06-14 19:09:18 +01:00

177 lines
5.3 KiB
Bash
Executable File

#! /usr/bin/env bash
# Copyright 2015-2020 The Khronos Group Inc.
# SPDX-License-Identifier: Apache-2.0
# Build on Linux.
######################################################################
# Nota Bene
#
# Contains untested cross-compilation support that was under
# development when Travis-CI made arm64 Ubuntu runners available
# rendering it unneeded. Kept here to preserve the learning and in
# case it becomes useful.
######################################################################
# Exit if any command fails.
set -e
# cd repo root so script will work whereever the current directory
path_to_repo_root=..
cd -- "$(dirname -- "${BASH_SOURCE[0]}")/$path_to_repo_root"
# Set parameters from command-line arguments, if any.
for i in $@; do
eval $i
done
# Set some defaults
ARCH=${ARCH:-$(uname -m)}
CMAKE_GEN=${CMAKE_GEN:-Ninja Multi-Config}
CONFIGURATION=${CONFIGURATION:-Release}
FEATURE_DOC=${FEATURE_DOC:-OFF}
FEATURE_JNI=${FEATURE_JNI:-OFF}
if [ "$ARCH" = "x86_64" ]; then
FEATURE_LOADTESTS=${FEATURE_LOADTESTS:-OpenGL+Vulkan}
else
# No Vulkan SDK yet for Linux/arm64.
FEATURE_LOADTESTS=${FEATURE_LOADTESTS:-OpenGL}
fi
FEATURE_PY=${FEATURE_PY:-OFF}
FEATURE_TESTS=${FEATURE_TESTS:-ON}
FEATURE_TOOLS=${FEATURE_TOOLS:-ON}
FEATURE_TOOLS_CTS=${FEATURE_TOOLS_CTS:-ON}
FEATURE_GL_UPLOAD=${FEATURE_GL_UPLOAD:-ON}
FEATURE_VK_UPLOAD=${FEATURE_VK_UPLOAD:-ON}
PACKAGE=${PACKAGE:-NO}
SUPPORT_SSE=${SUPPORT_SSE:-ON}
SUPPORT_OPENCL=${SUPPORT_OPENCL:-OFF}
PY_USE_VENV=${PY_USE_VENV:-OFF}
WERROR=${WERROR:-OFF}
if [[ "$ARCH" = "aarch64" && "$FEATURE_LOADTESTS" =~ "Vulkan" ]]; then
if [[ "$FEATURE_LOADTESTS" = "Vulkan" ]]; then
FEATURE_LOADTESTS=OFF
else
FEATURE_LOADTESTS=OpenGL
fi
echo "$0: Forcing FEATURE_LOADTESTS to \"$FEATURE_LOADTESTS\" as no Vulkan SDK yet for Linux/arm64."
fi
if [ ! "$CMAKE_GEN" = "Ninja Multi-Config" ]; then
# Single configuration generator.
if [[ "$CONFIGURATION" =~ "," ]]; then
echo "$0: Multiple build configurations specified with single-configuration CMake generator."
exit 1
fi
fi
cmake_args=("-G" "$CMAKE_GEN")
if [[ -z $BUILD_DIR ]]; then
BUILD_DIR=build/linux
if [ "$ARCH" != $(uname -m) ]; then
BUILD_DIR+="-$ARCH-"
fi
if [ ! "$CMAKE_GEN" = "Ninja Multi-Config" ]; then
# Single configuration generator. That only a single configuration
# is specified has already been verified.
BUILD_DIR+="-$CONFIGURATION"
CMAKE_BUILD_TYPE=$CONFIGURATION
fi
fi
cmake_args+=("-B" $BUILD_DIR)
# Just setting the environment variable does not seem to work so pass to cmake.
if [[ -n "$VCPKG_INSTALL_OPTIONS" ]]; then
cmake_args+=("-D" "VCPKG_INSTALL_OPTIONS=$VCPKG_INSTALL_OPTIONS")
fi
if [[ "$FEATURE_LOADTESTS" != "OFF" && -n "$VCPKG_ROOT" ]]; then
cmake_args+=(
"-D" "CMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake"
)
fi
if [ -n "$CMAKE_BUILD_TYPE" ]; then
cmake_args+=("-D" "CMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE")
fi
mkdir -p $BUILD_DIR
cmake_args+=(\
"-D" "KTX_FEATURE_DOC=$FEATURE_DOC" \
"-D" "KTX_FEATURE_JNI=$FEATURE_JNI" \
"-D" "KTX_FEATURE_LOADTEST_APPS=$FEATURE_LOADTESTS" \
"-D" "KTX_FEATURE_PY=$FEATURE_PY" \
"-D" "KTX_FEATURE_TESTS=$FEATURE_TESTS" \
"-D" "KTX_FEATURE_TOOLS=$FEATURE_TOOLS" \
"-D" "KTX_FEATURE_TOOLS_CTS=$FEATURE_TOOLS_CTS" \
"-D" "KTX_FEATURE_GL_UPLOAD=$FEATURE_GL_UPLOAD" \
"-D" "KTX_FEATURE_VK_UPLOAD=$FEATURE_VK_UPLOAD" \
"-D" "BASISU_SUPPORT_OPENCL=$SUPPORT_OPENCL" \
"-D" "BASISU_SUPPORT_SSE=$SUPPORT_SSE" \
"-D" "KTX_PY_USE_VENV=$PY_USE_VENV" \
"-D" "KTX_WERROR=$WERROR"
)
if [ "$ARCH" != $(uname -m) ]; then
cmake_args+=("--toolchain", "cmake/linux-$ARCH-toolchain.cmake")
fi
config_display="Configure KTX-Software (Linux on $ARCH): "
for arg in "${cmake_args[@]}"; do
case $arg in
"-A") config_display+="Arch=" ;;
"-G") config_display+="Generator=" ;;
"-B") config_display+="Build Dir=" ;;
"-D") ;;
"--toolchain") config_display+="Toolchain File=" ;;
*) config_display+="$arg, " ;;
esac
done
echo ${config_display%??}
cmake . "${cmake_args[@]}"
pushd $BUILD_DIR
oldifs=$IFS
#; is necessary because `for` is a Special Builtin.
IFS=, ; for config in $CONFIGURATION
do
IFS=$oldifs # Because of ; IFS set above will still be present.
# Build and test
echo "Build KTX-Software (Linux $ARCH $config)"
cmake --build . --config $config
if [ "$ARCH" = "$(uname -m)" ]; then
echo "Test KTX-Software (Linux $ARCH $config)"
ctest --output-on-failure -C $config #--verbose
fi
if [ "$config" = "Release" -a "$PACKAGE" = "YES" ]; then
echo "Pack KTX-Software (Linux $ARCH $config)"
if ! cpack -C $config -G DEB; then
# The DEB generator does not seem to write any log files.
#cat _CPack_Packages/Linux/DEB/DEBOutput.log
exit 1
fi
if ! cpack -C $config -G RPM; then
echo "RPM generator .err file"
cat _CPack_Packages/Linux/RPM/rpmbuildktx-software.err
echo "RPM generator .out file"
cat _CPack_Packages/Linux/RPM/rpmbuildktx-software.out
exit 1
fi
if ! cpack -C $config -G TBZ2; then
# The TBZ2 generator does not seem to write any log files.
# cat _CPack_Packages/Linux/TBZ2/TBZ2Output.log
exit 1
fi
fi
done
#echo "***** toktx version.h *****"
#cat tools/toktx/version.h
#echo "****** toktx version ******"
#build/linux-release/tools/toktx/toktx --version
#echo "***************************"
popd
# vim:ai:ts=4:sts=2:sw=2:expandtab