177 lines
5.3 KiB
Bash
Executable File
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
|
|
|