From 97df7f63c2f27f33e3507b70f7b590fa14cdf7c0 Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Tue, 12 Nov 2019 10:34:49 +0100 Subject: [PATCH] add simple easy-builder script --- README.md | 23 +++++++++++- easy-builder | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 125 insertions(+), 1 deletion(-) create mode 100755 easy-builder diff --git a/README.md b/README.md index 192d2826..04d4ff14 100644 --- a/README.md +++ b/README.md @@ -88,7 +88,28 @@ git submodule update --init --recursive ``` -## Compiling +## Simple compilation + + +### Easy builder assistant + +If you have standard needs and use well-known platform and operating system, you may try the provided `easy-builder` script which may be enough for you: + +```sh +./easy-builder +``` + +If anything goes right, you'll find your netradiant build in `install/` subdirectory. + +If you need to build a debug build (to get help from a developer, for example), you can do it that way: + +```sh +./easy-builder --debug +``` + +By default, build tools and compilers use the `build/` directory as workspace. + +## Advanced compilation ### Initial build diff --git a/easy-builder b/easy-builder new file mode 100755 index 00000000..7966bd26 --- /dev/null +++ b/easy-builder @@ -0,0 +1,103 @@ +#! /usr/bin/env bash + +# This script is meant to be kept small and simple +# If you think about adding features, it's probably a bad idea + +set -e # exit if a command fails +set -o pipefail # Will return the exit status of make if it fails + +project_source_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" + +job_count='4' +if command -v nproc >/dev/null +then + job_count="$(nproc)" +fi + +build_dir="${project_source_dir}/build${SUBDIR:+/${SUBDIR}}" +install_dir="${project_source_dir}/install${SUBDIR:+/${SUBDIR}}" + +build_type='Release' + +cmake_user_opts='' +while [ ! -z ${1} ] +do + case "${1}" in + '-j'*) + job_count="${1:2}" + shift + ;; + '--debug') + build_type='Debug' + shift + ;; + *) + cmake_user_opts+=" ${1}" + shift + ;; + esac +done + +cmake_opts='' +case "$(uname -s)" in + 'Linux') + # no tweak required + ;; + 'FreeBSD') + if [ -f "$(ls '/usr/local/bin/g++'* | sort | tail -n1)" ] + then + gcc_version="$(ls '/usr/local/bin/g++'* | sort | tail -n1 | sed -e 's/.*[^0-9]\([0-9][0-9]*\)$/\1/')" + cmake_opts+=" -DCMAKE_C_COMPILER=/usr/local/bin/gcc${gcc_version}" + cmake_opts+=" -DCMAKE_CXX_COMPILER=/usr/local/bin/g++${gcc_version}" + else + printf "WARNING: GCC is recommended: if build fails, install GCC and retry\n" >&2 + fi + ;; + 'Darwin') + if [ -f "$(ls '/usr/local/bin/g++-'* | sort | tail -n1)" ] + then + gcc_version="$(ls '/usr/local/bin/g++-'* | sort | tail -n1 | sed -e 's/.*[^0-9]\([0-9][0-9]*\)$/\1/')" + cmake_opts+=" -DCMAKE_C_COMPILER=/usr/local/bin/gcc-${gcc_version}" + cmake_opts+=" -DCMAKE_CXX_COMPILER=/usr/local/bin/g++-${gcc_version}" + else + printf "WARNING: GCC is recommended: if build fails, install GCC and retry\n" >&2 + fi + ;; + 'MSYS_NT-'*) + # no tweak required + ;; + 'CYGWIN_NT-'*|'MINGW'*'_NT-'*) + printf "WARNING: system is not tested: if build fails, use MSYS2 instead\n" >&2 + ;; + *) + printf "WARNING: system is not tested\n" >&2 + ;; +esac + +fetch_submodules_cmd='' +if ! [ -f "${project_source_dir}/libs/crunch/inc/crn_decomp.h" ] +then + fetch_submodules_cmd='git submodule update --init --recursive' +fi + +set -x + +cd "${project_source_dir}" + +${fetch_submodules_cmd} + +cmake \ + -G'Unix Makefiles' \ + -H'.' \ + -B"${build_dir}" \ + -D'CMAKE_INSTALL_PREFIX'="${install_dir}" \ + -D'CMAKE_BUILD_TYPE'="${build_type}" \ + ${cmake_opts} \ + ${cmake_user_opts} \ + ${@} + +cmake \ + --build "${build_dir}" \ + -- \ + -j"${job_count}" \ + install -- 2.39.2