#!/bin/bash # Copyright (c) 2019-2020 Kevin R Croft # SPDX-License-Identifier: GPL-2.0-or-later # This script builds the software for the given build-type (release, # debug, ... ) and compiler (gcc or clang). # # If run without arguments, the script asks for required arguments one # by one, which includes the above two (--compiler and --build-type). # # Optional arguments include the version of compiler and additional # build modifiers such as link-time-optimizations (--modifier lto), # feedback-directed-optimizations (--modifier fdo), and taking advantage # of the building-machine's full instructions sets (--modifier native). # All modifiers are available simulatenously. # # Usage examples: # $ ./build.sh # asks for a compiler # $ ./build.sh --compiler gcc # asks for a build-type # $ ./build.sh --compiler clang --build-type debug # builds! # $ ./build.sh -c gcc -t release -m lto -m native # builds! # # This script makes use of the automator package, see automator/main.sh. # set -euo pipefail function parse_args() { # Gather the parameters that define this build postfix="" modifiers=("") configure_additions=("") while [[ "${#}" -gt 0 ]]; do case ${1} in -c|--compiler) compiler="${2}"; shift 2;; -v|--version-postfix) postfix="-${2}"; shift 2;; -t|--build-type) selected_type="${2}"; shift 2;; -m|--modifier) modifiers+=("${2}"); shift 2;; -p|--bin-path) PATH="${2}:${PATH}"; shift 2;; *) configure_additions+=("${1}"); shift;; esac; done # Import our settings and report missing values machine="$(uname -m | sed 's/-.*//')"; import machine "${machine}" os="$(uname -s | sed 's/-.*//')"; import os "${os}" import compiler "${compiler:-}" import "${compiler:-}" "${os}_${machine}" if [[ -z "${selected_type:-}" ]]; then arg_error "--build-type" "${TYPES[*]}"; fi # Create a pretty modifier string that we can add to our build-type printf -v mod_string '+%s' "${modifiers[@]:1}" if [[ "${mod_string}" == "+" ]]; then mod_string=""; fi # Print a summary of our build configuration underline "Compiling a ${selected_type}${mod_string} build using "` `"${compiler}${postfix} on ${os}-${machine}" "=" # Ensure our selected_type is lower-case before proceeding selected_type=$(lower "${selected_type}") } # shellcheck source=scripts/automator/main.sh source "$(dirname "$0")/automator/main.sh"