summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorLinus Färnstrand <linus@mullvad.net>2021-11-18 13:49:05 +0100
committerLinus Färnstrand <linus@mullvad.net>2021-11-18 13:49:05 +0100
commitc19a3b9f812af7e16b720a8168fddae697e0daee (patch)
treef9228b1066f0034c0e7d66bca5384dabb9318b07
parent4f2773bfb23d2b7f357e093ec82cf0682a6ba465 (diff)
parent0036ff63d6f9d21fdd90412ce273ce1b5bb9b912 (diff)
downloadmullvadvpn-c19a3b9f812af7e16b720a8168fddae697e0daee.tar.xz
mullvadvpn-c19a3b9f812af7e16b720a8168fddae697e0daee.zip
Merge branch 'more-idiomatic-bash'
-rwxr-xr-xbuild_windows_modules.sh240
1 files changed, 114 insertions, 126 deletions
diff --git a/build_windows_modules.sh b/build_windows_modules.sh
index 221ee662fb..69d91ee8d4 100755
--- a/build_windows_modules.sh
+++ b/build_windows_modules.sh
@@ -1,3 +1,5 @@
+#!/usr/bin/env bash
+
set -eu
# List of solution configurations to build.
@@ -10,173 +12,159 @@ CPP_BUILD_TARGETS=${CPP_BUILD_TARGETS:-"x64"}
CARGO_TARGET_DIR=${CARGO_TARGET_DIR:-"./target/"}
if [[ "${1:-""}" == "--dev-build" ]]; then
- DEV_BUILD=true
+ DEV_BUILD=true
fi
-function clean_solution
-{
- local path="$1"
-
- if [[ -z "${DEV_BUILD+x}" ]]; then
- # Clean all intermediate and output files
- rm -r $path/bin/* || true
- else
- echo "Will NOT clean intermediate files in $path/bin/"
- fi
+function clean_solution {
+ local path="$1"
+
+ if [[ -z ${DEV_BUILD+x} ]]; then
+ # Clean all intermediate and output files
+ rm -r "${path:?}/bin/"* || true
+ else
+ echo "Will NOT clean intermediate files in $path/bin/"
+ fi
}
-function build_solution_config
-{
- local sln="$1"
- local config="$2"
- local platform="$3"
+function build_solution_config {
+ local sln="$1"
+ local config="$2"
+ local platform="$3"
- set -x
- cmd.exe "/c msbuild.exe /m $(to_win_path $sln) /p:Configuration=$config /p:Platform=$platform"
- set +x
+ set -x
+ cmd.exe "/c msbuild.exe /m $(to_win_path "$sln") /p:Configuration=$config /p:Platform=$platform"
+ set +x
}
# Builds visual studio solution in all (specified) configurations
-function build_solution
-{
- local path="$1"
- local sln="$1/$2"
+function build_solution {
+ local path="$1"
+ local sln="$1/$2"
- clean_solution $path
+ clean_solution "$path"
- for mode in $CPP_BUILD_MODES; do
- for target in $CPP_BUILD_TARGETS; do
- build_solution_config $sln $mode $target
+ for mode in $CPP_BUILD_MODES; do
+ for target in $CPP_BUILD_TARGETS; do
+ build_solution_config "$sln" "$mode" "$target"
+ done
done
- done
}
-function to_win_path
-{
- local unixpath=$1
- # if it's a relative path and starts with a dot (.), don't transform the
- # drive prefix (/c/ -> C:\)
- if echo $unixpath | grep '^\.' >/dev/null; then
- echo $unixpath | sed -e 's/^\///' -e 's/\//\\/g'
- # if it's an absolute path, transform the drive prefix
- else
- # remove the cygrdive prefix if it's there
- unixpath=$(echo $1 | sed -e 's/^\/cygdrive//')
- echo $unixpath | sed -e 's/^\///' -e 's/\//\\/g' -e 's/^./\0:/'
- fi
+function to_win_path {
+ local unixpath="$1"
+ # if it's a relative path and starts with a dot (.), don't transform the
+ # drive prefix (/c/ -> C:\)
+ if echo "$unixpath" | grep '^\.' >/dev/null; then
+ echo "$unixpath" | sed -e 's/^\///' -e 's/\//\\/g'
+ # if it's an absolute path, transform the drive prefix
+ else
+ # remove the cygrdive prefix if it's there
+ unixpath=$(echo "$unixpath" | sed -e 's/^\/cygdrive//')
+ echo "$unixpath" | sed -e 's/^\///' -e 's/\//\\/g' -e 's/^./\0:/'
+ fi
}
-function get_solution_output_path
-{
- local solution_root=$1
- local build_target=$2
- local build_mode=$3
+function get_solution_output_path {
+ local solution_root="$1"
+ local build_target="$2"
+ local build_mode="$3"
- case $build_target in
- "x86")
- echo "$solution_root/bin/Win32-$build_mode"
- ;;
- "x64")
- echo "$solution_root/bin/x64-$build_mode"
- ;;
- *)
- echo Unkown build target $build_target
- exit 1
- ;;
- esac
+ case $build_target in
+ "x86") echo "$solution_root/bin/Win32-$build_mode";;
+ "x64") echo "$solution_root/bin/x64-$build_mode";;
+ *)
+ echo "Unkown build target: $build_target"
+ exit 1
+ ;;
+ esac
}
# builds an appropriate cargo target path for the specified build target and
# build mode
-function get_cargo_target_dir
-{
- local build_target=$1
- local build_mode=$2
+function get_cargo_target_dir {
+ local build_target="$1"
+ local build_mode="$2"
+
+ local host_arch
+ host_arch=$(rustc_host_arch)
+ local host_target_arch
+ host_target_arch=$(arch_from_build_target "$host_arch")
+ local build_target_arch
+ build_target_arch=$(arch_from_build_target "$build_target")
- local host_arch=$(rustc_host_arch)
- local host_target_arch=$(arch_from_build_target $host_arch)
- local build_target_arch=$(arch_from_build_target $build_target)
- # if the target is the same as the host, cargo omits the platform triplet
- if [ "$host_target_arch" == "$build_target_arch" ]; then
- platform_triplet=""
- # otherwise, the cargo target path is build with the platform triplet
- else
- platform_triplet="$build_target_arch-pc-windows-msvc"
- fi
+ # if the target is the same as the host, cargo omits the platform triplet
+ if [ "$host_target_arch" == "$build_target_arch" ]; then
+ platform_triplet=""
+ # otherwise, the cargo target path is build with the platform triplet
+ else
+ platform_triplet="$build_target_arch-pc-windows-msvc"
+ fi
- echo "$CARGO_TARGET_DIR/$platform_triplet/${build_mode,,}"
+ echo "$CARGO_TARGET_DIR/$platform_triplet/${build_mode,,}"
}
-function copy_outputs
-{
- local solution_path=$1
- local artifacts=$2
+function copy_outputs {
+ local solution_path="$1"
+ local artifacts="$2"
- for mode in $CPP_BUILD_MODES; do
- for target in $CPP_BUILD_TARGETS; do
- local dll_path=$(get_solution_output_path $solution_path $target $mode)
- local cargo_target=$(get_cargo_target_dir $target $mode)
- mkdir -p $cargo_target
- for artifact in $artifacts; do
- cp "$dll_path/$artifact" "$cargo_target"
- done
+ for mode in $CPP_BUILD_MODES; do
+ for target in $CPP_BUILD_TARGETS; do
+ local dll_path
+ dll_path=$(get_solution_output_path "$solution_path" "$target" "$mode")
+ local cargo_target
+ cargo_target=$(get_cargo_target_dir "$target" "$mode")
+
+ mkdir -p "$cargo_target"
+ for artifact in $artifacts; do
+ cp "$dll_path/$artifact" "$cargo_target"
+ done
+ done
done
- done
}
# Since Microsoft likes to name their architectures differently from Rust, this
# function tries to match microsoft names to Rust names.
-function arch_from_build_target
-{
- local build_target=$1
+function arch_from_build_target {
+ local build_target="$1"
- case $build_target in
- "x86")
- echo "i686"
- ;;
- "x64")
- echo "x86_64"
- ;;
- *)
- echo $build_target
- ;;
- esac
+ case $build_target in
+ "x86") echo "i686";;
+ "x64") echo "x86_64";;
+ *) echo "$build_target";;
+ esac
}
-function rustc_host_arch
-{
- rustc.exe --print cfg \
- | grep '^target_arch=' \
- | cut -d'=' -f2 \
- | tr -d '"'
+function rustc_host_arch {
+ rustc.exe --print cfg \
+ | grep '^target_arch=' \
+ | cut -d'=' -f2 \
+ | tr -d '"'
}
-function build_nsis_plugins
-{
- local nsis_root_path=${CPP_ROOT_PATH:-"./windows/nsis-plugins"}
+function build_nsis_plugins {
+ local nsis_root_path=${CPP_ROOT_PATH:-"./windows/nsis-plugins"}
- clean_solution "$nsis_root_path"
- build_solution_config "$nsis_root_path/nsis-plugins.sln" "Release" "x86"
+ clean_solution "$nsis_root_path"
+ build_solution_config "$nsis_root_path/nsis-plugins.sln" "Release" "x86"
}
-function main
-{
- local winfw_root_path=${CPP_ROOT_PATH:-"./windows/winfw"}
- local windns_root_path=${CPP_ROOT_PATH:-"./windows/windns"}
- local winnet_root_path=${CPP_ROOT_PATH:-"./windows/winnet"}
-
- build_solution "$winfw_root_path" "winfw.sln"
- build_solution "$windns_root_path" "windns.sln"
- build_solution "$winnet_root_path" "winnet.sln"
+function main {
+ local winfw_root_path=${CPP_ROOT_PATH:-"./windows/winfw"}
+ local windns_root_path=${CPP_ROOT_PATH:-"./windows/windns"}
+ local winnet_root_path=${CPP_ROOT_PATH:-"./windows/winnet"}
+
+ build_solution "$winfw_root_path" "winfw.sln"
+ build_solution "$windns_root_path" "windns.sln"
+ build_solution "$winnet_root_path" "winnet.sln"
- copy_outputs $winfw_root_path "winfw.dll"
- copy_outputs $windns_root_path "windns.dll"
- copy_outputs $winnet_root_path "winnet.dll"
+ copy_outputs "$winfw_root_path" "winfw.dll"
+ copy_outputs "$windns_root_path" "windns.dll"
+ copy_outputs "$winnet_root_path" "winnet.dll"
- local driverlogic_root_path=${CPP_ROOT_PATH:-"./windows/driverlogic"}
- build_solution "$driverlogic_root_path" "driverlogic.sln"
+ local driverlogic_root_path=${CPP_ROOT_PATH:-"./windows/driverlogic"}
+ build_solution "$driverlogic_root_path" "driverlogic.sln"
- build_nsis_plugins
+ build_nsis_plugins
}
main