File size: 5,470 Bytes
6b0231d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
#! /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