|
| 1 | +#!/bin/bash -e |
| 2 | + |
| 3 | +#======================================================== |
| 4 | +# Configure build environment |
| 5 | +#======================================================== |
| 6 | +cmake --version |
| 7 | + |
| 8 | +if [[ "$OSTYPE" == "linux-gnu" ]]; then PLATFORM=linux |
| 9 | +elif [[ "$OSTYPE" == "darwin"* ]]; then PLATFORM=mac |
| 10 | +elif [[ "$OSTYPE" == "msys" ]]; then PLATFORM=windows |
| 11 | +fi |
| 12 | + |
| 13 | +if [ -z "$PLATFORM" ]; then |
| 14 | + echo ERROR: Unknown platform |
| 15 | + exit 1 |
| 16 | +fi |
| 17 | + |
| 18 | +ROOT=$(cd "$(dirname "$0")/.."; pwd) |
| 19 | +CMAKE_ROOT="$ROOT/cmake_build" |
| 20 | +CMAKE_BUILD_DIR="$CMAKE_ROOT/${PLATFORM}" |
| 21 | + |
| 22 | +if [ -z "$ROOT" ]; then |
| 23 | + echo "ERROR: Unknown workspace" |
| 24 | + exit 1 |
| 25 | +fi |
| 26 | + |
| 27 | +if [ ! -d "$ROOT/modules/juce/modules" ]; then |
| 28 | + echo "ERROR: juce library module not preset!" |
| 29 | + exit 1 |
| 30 | +fi |
| 31 | + |
| 32 | +echo "\n==========================================" |
| 33 | +echo ROOT: "$ROOT" |
| 34 | +echo CMAKE_BUILD_DIR: "$CMAKE_BUILD_DIR" |
| 35 | + |
| 36 | +PROJECT_NAME=pluginval |
| 37 | +DEPLOYMENT_DIR="${ROOT}/bin/${PLATFORM}" |
| 38 | + |
| 39 | +if [[ "$PLATFORM" == "linux" ]]; then |
| 40 | + BINARY_NAME="$PROJECT_NAME" |
| 41 | + APP_NAME=$BINARY_NAME |
| 42 | + APP_DIR="${CMAKE_BUILD_DIR}/${PROJECT_NAME}_artefacts" |
| 43 | + APP_FILE=$APP_DIR/$BINARY_NAME |
| 44 | + APP_BINARY="$APP_FILE" |
| 45 | + ZIP_FILE="${DEPLOYMENT_DIR}/${PROJECT_NAME}_Linux.zip" |
| 46 | + |
| 47 | + CMAKE_GENERATOR="Unix Makefiles" |
| 48 | +elif [[ "$PLATFORM" == "mac" ]]; then |
| 49 | + BINARY_NAME="$PROJECT_NAME" |
| 50 | + APP_NAME=$BINARY_NAME".app" |
| 51 | + APP_DIR=$CMAKE_BUILD_DIR/${PROJECT_NAME}_artefacts/Release |
| 52 | + APP_FILE=$APP_DIR/$APP_NAME |
| 53 | + APP_BINARY="$APP_FILE/Contents/MacOS/${PROJECT_NAME}" |
| 54 | + ZIP_FILE="$DEPLOYMENT_DIR/$PROJECT_NAME"_macOS.zip |
| 55 | + |
| 56 | + CMAKE_GENERATOR="Xcode" |
| 57 | +elif [[ "$PLATFORM" == "windows" ]]; then |
| 58 | + BINARY_NAME="$PROJECT_NAME".exe |
| 59 | + APP_NAME="$BINARY_NAME" |
| 60 | + APP_DIR=$CMAKE_BUILD_DIR/${PROJECT_NAME}_artefacts/Release |
| 61 | + APP_FILE="$APP_DIR/$BINARY_NAME" |
| 62 | + APP_BINARY="$APP_FILE" |
| 63 | + ZIP_NAME="${PROJECT_NAME}_Windows.zip" |
| 64 | + ZIP_FILE="${DEPLOYMENT_DIR}/${ZIP_NAME}" |
| 65 | + |
| 66 | + CMAKE_GENERATOR="Visual Studio 15 2017" |
| 67 | + CMAKE_PLATFORM_ARGS="-A x64" |
| 68 | + |
| 69 | + if [ -z "$MSBUILD_EXE" ]; then |
| 70 | + MSBUILD_EXE="C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSBuild.exe" |
| 71 | + fi |
| 72 | + |
| 73 | + if [ ! -f "$MSBUILD_EXE" ]; then |
| 74 | + echo MSBuild.exe not found! |
| 75 | + exit 1 |
| 76 | + fi |
| 77 | +fi |
| 78 | + |
| 79 | +echo PROJECT_NAME: "$PROJECT_NAME" |
| 80 | +echo DEPLOYMENT_DIR: "$DEPLOYMENT_DIR" |
| 81 | +echo BINARY_NAME: "$BINARY_NAME" |
| 82 | +echo APP_NAME: "$APP_NAME" |
| 83 | +echo APP_DIR: "$APP_DIR" |
| 84 | +echo APP_FILE: "$APP_FILE" |
| 85 | +echo ZIP_FILE: "$ZIP_FILE" |
| 86 | +echo CMAKE_GENERATOR: "$CMAKE_GENERATOR" |
| 87 | + |
| 88 | + |
| 89 | +#============================================================ |
| 90 | +# Prepare VST2 SDK |
| 91 | +#============================================================ |
| 92 | +if [ -n "$VST2_SDK_URL" ]; then |
| 93 | + rm -rf "$ROOT"/tmp |
| 94 | + mkdir "$ROOT"/tmp |
| 95 | + cd "$ROOT"/tmp |
| 96 | + |
| 97 | + if [[ "$PLATFORM" == "linux" ]] || [[ "$PLATFORM" == "mac" ]]; then |
| 98 | + curl -O $VST2_SDK_URL |
| 99 | + unzip vstsdk2.4.zip |
| 100 | + elif [[ "$PLATFORM" == "windows" ]]; then |
| 101 | + powershell -Command "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; Invoke-WebRequest ${VST2_SDK_URL} -OutFile vstsdk2.4.zip" |
| 102 | + powershell -Command "Expand-Archive vstsdk2.4.zip -DestinationPath ." |
| 103 | + fi |
| 104 | + |
| 105 | + if [ -d "vstsdk2.4" ]; then |
| 106 | + export VST2_SDK_DIR="$ROOT"/tmp/vstsdk2.4; |
| 107 | + fi |
| 108 | +else |
| 109 | + echo "Not building with VST2 support. To enable VST2 support, set the VST2_SDK_URL environment variable" |
| 110 | +fi |
| 111 | + |
| 112 | + |
| 113 | +#============================================================ |
| 114 | +# Build |
| 115 | +#============================================================ |
| 116 | +# rm -rf "$CMAKE_BUILD_DIR" |
| 117 | +mkdir -p "$CMAKE_BUILD_DIR" |
| 118 | +cd "$CMAKE_ROOT" |
| 119 | +pwd |
| 120 | + |
| 121 | +cmake -S "$ROOT" -B "$CMAKE_BUILD_DIR" -G "$CMAKE_GENERATOR" $CMAKE_PLATFORM_ARGS |
| 122 | +cd "$CMAKE_BUILD_DIR" |
| 123 | + |
| 124 | +if [[ "$PLATFORM" == "linux" ]]; then |
| 125 | + make CONFIG=Release |
| 126 | +elif [[ "$PLATFORM" == "mac" ]]; then |
| 127 | + xcodebuild -configuration Release |
| 128 | +elif [[ "$PLATFORM" == "windows" ]]; then |
| 129 | + "$MSBUILD_EXE" "$PROJECT_NAME".sln -p:VisualStudioVersion=15.0 -m -t:Build -p:Configuration=Release -p:Platform=x64 -p:PreferredToolArchitecture=x64 -p:TreatWarningsAsErrors=true |
| 130 | +fi |
| 131 | + |
| 132 | + |
| 133 | +#============================================================ |
| 134 | +# Run tests |
| 135 | +#============================================================ |
| 136 | +if [[ "$PLATFORM" == "mac" ]] || [[ "$PLATFORM" == "windows" ]]; then |
| 137 | + "$APP_BINARY" --run-tests || exit 1 |
| 138 | + # Linux app doesn't shut down cleanly after tests have run yet! |
| 139 | +fi |
| 140 | + |
| 141 | +#============================================================ |
| 142 | +# Sign with hardened runtime |
| 143 | +#============================================================ |
| 144 | +if [[ "$PLATFORM" == "mac" ]]; then |
| 145 | + if [ -n "$SIGN_ID" ]; then |
| 146 | + ENTITLEMENTS_FILE="${CMAKE_BUILD_DIR}/${PROJECT_NAME}_artefacts/JuceLibraryCode/${PROJECT_NAME}.entitlements" |
| 147 | + |
| 148 | + codesign --entitlements "${ENTITLEMENTS_FILE}" --force -s "$SIGN_ID" -v "$APP_FILE" --deep --strict --options=runtime |
| 149 | + |
| 150 | + echo "\nVerifying ..." |
| 151 | + spctl -vvv --assess --type exec "$APP_FILE" |
| 152 | + codesign -dvv "$APP_FILE" |
| 153 | + codesign -vvv --deep --strict "$APP_FILE" |
| 154 | + else |
| 155 | + echo "Not notarising. To enable, set the SIGN_ID environment variable" |
| 156 | + fi |
| 157 | +fi |
| 158 | + |
| 159 | + |
| 160 | +#============================================================ |
| 161 | +# Copy to deployment directory |
| 162 | +#============================================================ |
| 163 | +cd "$ROOT" |
| 164 | +rm -rf "$DEPLOYMENT_DIR" |
| 165 | +mkdir -p "$DEPLOYMENT_DIR" |
| 166 | + |
| 167 | +echo "\nDeploying to: " "$DEPLOYMENT_DIR" |
| 168 | +cd "$APP_DIR" |
| 169 | + |
| 170 | +if [[ "$PLATFORM" == "linux" ]] || [[ "$PLATFORM" == "mac" ]]; then |
| 171 | + zip -r "$ZIP_FILE" "$APP_NAME" |
| 172 | +elif [[ "$PLATFORM" == "windows" ]]; then |
| 173 | + # N.B. we can't provide unix paths to powershell |
| 174 | + cd "$APP_DIR" |
| 175 | + powershell -Command "Compress-Archive -Path '$BINARY_NAME' -DestinationPath '$ZIP_NAME' -Force" |
| 176 | + mv "$ZIP_NAME" "$DEPLOYMENT_DIR" |
| 177 | +fi |
0 commit comments