154 lines
4.2 KiB
Fish
Executable File
154 lines
4.2 KiB
Fish
Executable File
#!/usr/bin/env fish
|
|
|
|
function print_help_and_exit
|
|
echo "\
|
|
Usage: setup_builds.sh [OPTIONS] compiler build-type
|
|
|
|
Positionals:
|
|
gcc Compile with gcc
|
|
clang Compile with clang
|
|
debug Build debug
|
|
release Build release
|
|
|
|
Options:
|
|
--compiler <clang|gcc> Specify the compiler
|
|
--type <debug|release> Specify the type of build
|
|
-f,--force Overwrite existing build directories
|
|
-h,--help Print this help message and exit
|
|
|
|
"
|
|
exit $argv[1]
|
|
end
|
|
|
|
function assert_dir
|
|
if test ! -d "$argv[1]"
|
|
if test -n "$argv[2]"
|
|
echo "Invalid variable "$argv[2]": '"$argv[1]"' is not a directory"
|
|
else
|
|
echo "'"$argv[1]"' is not a directory"
|
|
end
|
|
exit 1
|
|
end
|
|
end
|
|
|
|
# common variables
|
|
|
|
#set tools_path (readlink -f (pwd))
|
|
#set tools_path (cd (dirname (status --current-filename)); and pwd)
|
|
set tools_path (realpath (dirname (status -f)))
|
|
set spartan_path_cmd $tools_path/spartan_path.fish
|
|
set repo_root (eval $spartan_path_cmd "repo-root")
|
|
# Don't call 'spartan_path_cmd "build"' bc it returns specific build path
|
|
# (i.e., for a particular compiler/build type), not the root build path
|
|
# set build_root (eval $spartan_path_cmd "build")
|
|
set build_root "$repo_root"/"build"
|
|
mkdir -p "$build_root"
|
|
|
|
# Initialize the build directory. Expected arguments: <compiler>, <build_type>
|
|
# Note: this method assumes the variables 'repot_root' and 'build_root' have
|
|
# already been properly initialized
|
|
function setup_build
|
|
assert_dir $repo_root
|
|
assert_dir $build_root
|
|
set compiler "$argv[1]"
|
|
set build_type "$argv[2]"
|
|
|
|
if test \( -z "$build_type" \) -o \( \( "$build_type" != "debug" \) -a \( "$build_type" != "release" \) \)
|
|
print_help_and_exit 1
|
|
end
|
|
|
|
if test "$build_type" = "debug"
|
|
set build_type_arg "Debug"
|
|
if test "$compiler" = "gcc"
|
|
set compiler_arg "/usr/lib/ccache/g++"
|
|
else
|
|
set compiler_arg "/usr/lib/ccache/clang++"
|
|
end
|
|
else if test "$build_type" = "release"
|
|
set build_type_arg "Release"
|
|
if test "$compiler" = "gcc"
|
|
set compiler_arg "g++"
|
|
else
|
|
set compiler_arg "clang++"
|
|
end
|
|
end
|
|
|
|
if test \( -z "$compiler" \) -o \( \( "$compiler" != "gcc" \) -a \( "$compiler" != "clang" \) \)
|
|
print_help_and_exit 1
|
|
end
|
|
|
|
set build_dest $build_root"/"$compiler"/"$build_type
|
|
set conan_dest $repo_root"/conan/"$compiler"_"$build_type
|
|
|
|
echo "Set up build: "$compiler" "$build_type
|
|
|
|
if test \( -z "$force" \) -a \( -d $build_dest \)
|
|
echo "The build directory '"$build_dest"' already exists (use -f to overwrite)"
|
|
return 1
|
|
end
|
|
|
|
rm -rf "$build_dest"
|
|
mkdir -p "$build_dest"
|
|
mkdir -p "$conan_dest"
|
|
cd "$build_dest"
|
|
conan install --build missing --profile $conan_dest $repo_root
|
|
cmake -G Ninja -DCMAKE_BUILD_TYPE=$build_type_arg -DCMAKE_EXPORT_COMPILE_COMMANDS=1 -DCMAKE_CXX_COMPILER=$compiler_arg $repo_root
|
|
end
|
|
|
|
# The while loop below removes arguments (via shift) as it parses them.
|
|
# Additional information that needs to be extracted from the arguments must be
|
|
# done so before the loop is executed.
|
|
|
|
set i 1
|
|
while test $i -le (count $argv)
|
|
switch $argv[$i]
|
|
case '--compiler'
|
|
set i (math "$i + 1")
|
|
set compiler $argv[$i]
|
|
case 'clang'
|
|
set compiler 'clang'
|
|
case 'gcc'
|
|
set compiler 'gcc'
|
|
case '--type'
|
|
set i (math "$i + 1")
|
|
set build_type $argv[$i]
|
|
case 'release'
|
|
set build_type 'release'
|
|
case 'debug'
|
|
set build_type 'debug'
|
|
case '-f'
|
|
set force 1
|
|
case '--force'
|
|
set force 1
|
|
case '-h'
|
|
print_help_and_exit 0
|
|
case '--help'
|
|
print_help_and_exit 0
|
|
case '*'
|
|
print_help_and_exit 1
|
|
end
|
|
set i (math "$i + 1")
|
|
end
|
|
|
|
echo "compiler in "$compiler
|
|
echo "build type in "$build_type
|
|
if test -n "$compiler"
|
|
if test -n "$build_type"
|
|
setup_build $compiler $build_type
|
|
else
|
|
# all builds for the specified compiler
|
|
setup_build $compiler "debug"
|
|
setup_build $compiler "release"
|
|
end
|
|
else if test -n "$build_type"
|
|
# all builds for the specified build type
|
|
setup_build "gcc" $build_type
|
|
setup_build "clang" $build_type
|
|
else
|
|
# all builds
|
|
setup_build "gcc" "debug"
|
|
setup_build "gcc" "release"
|
|
setup_build "clang" "debug"
|
|
setup_build "clang" "release"
|
|
end
|