This commit is contained in:
@@ -11,11 +11,6 @@ ARCHS=(
|
||||
|
||||
HOSTARCH=$(uname -m)
|
||||
|
||||
SOURCE_DIR=""
|
||||
BUILD_DIR=""
|
||||
OUTPUT_DIR=""
|
||||
EXECUTABLE_NAME=""
|
||||
|
||||
# set flags from command line
|
||||
RELEASE=0
|
||||
MULTIBUILD=0
|
||||
@@ -40,54 +35,46 @@ function die() {
|
||||
exit 1
|
||||
}
|
||||
|
||||
function centerlittletitle() {
|
||||
local TITLE="$1"
|
||||
local WIDTH
|
||||
# Try tput cols, then stty size, else default to 80
|
||||
if command -v tput &> /dev/null; then
|
||||
WIDTH=$(tput cols 2>/dev/null)
|
||||
elif command -v stty &> /dev/null && [ -t 1 ]; then
|
||||
WIDTH=$(stty size 2>/dev/null | awk '{print $2}')
|
||||
fi
|
||||
# Fallback to 80 if WIDTH is empty or not a number
|
||||
if ! [[ "$WIDTH" =~ ^[0-9]+$ ]]; then
|
||||
WIDTH=80
|
||||
fi
|
||||
local SPACES=$(( (WIDTH - ${#TITLE}) / 2 ))
|
||||
printf '%*s\n' "$WIDTH" '' | tr ' ' '-'
|
||||
printf "%*s%s\n" "$SPACES" "" "$TITLE"
|
||||
printf '%*s\n' "$WIDTH" '' | tr ' ' '-'
|
||||
}
|
||||
|
||||
OLD_PWD="$PWD"
|
||||
trap 'cd "${OLD_PWD}"' EXIT
|
||||
|
||||
# ----------------------------------------------------------------------------------------------------------
|
||||
# BUILD
|
||||
# ----------------------------------------------------------------------------------------------------------
|
||||
|
||||
CMAKE_FILE="CMakeLists.txt"
|
||||
|
||||
function get_executable_name() {
|
||||
local var_value=""
|
||||
local CMAKEFILEPATH="${1:-}"
|
||||
[ -n "${CMAKEFILEPATH:-}" ] || die "No CMake file path given!"
|
||||
CMAKEFILEPATH="$CMAKEFILEPATH/${CMAKE_FILE}"
|
||||
[ -f "${CMAKEFILEPATH}" ] || die "${CMAKE_FILE} not found in ${CMAKEFILEPATH}"
|
||||
|
||||
echo "Getting executable name from ${CMAKEFILEPATH}"
|
||||
|
||||
while IFS= read -r line; do
|
||||
# Look for set(PROJECT_EXE_NAME ipdemo)
|
||||
if [[ "$line" =~ set\(PROJECT_EXE_NAME[[:space:]]+([a-zA-Z0-9_-]+)\) ]]; then
|
||||
var_value=$(echo "$line" | sed -E 's/.*set\(PROJECT_EXE_NAME[[:space:]]+([a-zA-Z0-9_-]+)\).*/\1/')
|
||||
fi
|
||||
# Look for add_executable(${PROJECT_EXE_NAME}
|
||||
if [[ "$line" =~ add_executable\([[:space:]]*\$\{PROJECT_EXE_NAME\}[[:space:]] ]]; then
|
||||
echo "Found executable name: $var_value"
|
||||
EXECUTABLE_NAME="$var_value"
|
||||
fi
|
||||
done < "${CMAKEFILEPATH}"
|
||||
|
||||
[[ -n "$EXECUTABLE_NAME" ]] || die "Executable name not found."
|
||||
echo "Executable name: $EXECUTABLE_NAME"
|
||||
}
|
||||
|
||||
function build_arch() {
|
||||
local ARCH="$1"
|
||||
local CMAKE_DIR="$2"
|
||||
|
||||
local BUILD_DIR="${CMAKE_DIR}/build"
|
||||
local ARCH_BUILD_DIR="${CMAKE_DIR}/build/build.$ARCH"
|
||||
local OUTPUT_DIR="${CMAKE_DIR}/output"
|
||||
|
||||
local PREVDIR="$PWD"
|
||||
local JOBS;
|
||||
JOBS=$(nproc) # Set JOBS to the number of available CPU cores
|
||||
cd "${CMAKE_DIR}" || exit 1
|
||||
|
||||
local ARCH_BUILD_DIR=${BUILD_DIR}/${ARCH}
|
||||
mkdir -p "${ARCH_BUILD_DIR}"
|
||||
|
||||
echo "Building for ${ARCH} in ${ARCH_BUILD_DIR}, from ${SOURCE_DIR}"
|
||||
echo "Building for ${ARCH} in ${ARCH_BUILD_DIR}"
|
||||
|
||||
if [ ! -f "${HOME}/.musl-cross/${ARCH}-linux-musl-cross/bin/${ARCH}-linux-musl-g++" ]; then
|
||||
echo "Musl cross toolchain not found for ${ARCH}."
|
||||
@@ -122,16 +109,22 @@ function build_arch() {
|
||||
cd "${ARCH_BUILD_DIR}" || exit 1
|
||||
ninja -k0 -j"${JOBS}"
|
||||
|
||||
if [ "$RELEASE" -eq 1 ]; then
|
||||
upx "${ARCH_BUILD_DIR}/${EXECUTABLE_NAME}"
|
||||
fi
|
||||
# the rest is optional.
|
||||
|
||||
if [ ! -d "${OUTPUT_DIR}" ]; then
|
||||
mkdir -p "${OUTPUT_DIR}"
|
||||
fi
|
||||
cp "${ARCH_BUILD_DIR}/${EXECUTABLE_NAME}" "${OUTPUT_DIR}/${EXECUTABLE_NAME}.${ARCH}"
|
||||
|
||||
cd "${PREVDIR}" || exit 1
|
||||
# loop through the build directory and find executables
|
||||
for executable in "${ARCH_BUILD_DIR}"/*; do
|
||||
if [ -f "$executable" ] && [ -x "$executable" ]; then
|
||||
local TARGET_NAME="${executable##*/}"
|
||||
local TARGET_PATH="${OUTPUT_DIR}/${TARGET_NAME}.${ARCH}"
|
||||
mkdir -p "${OUTPUT_DIR}"
|
||||
cp "${executable}" "${TARGET_PATH}"
|
||||
if command -v upx &> /dev/null ; then
|
||||
echo "Compressing $TARGET_PATH with upx"
|
||||
upx "${TARGET_PATH}"
|
||||
fi
|
||||
centerlittletitle "Built $TARGET_PATH"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
function build() {
|
||||
@@ -161,8 +154,6 @@ function buildspawn() {
|
||||
# make canonical
|
||||
CMAKE_DIR=$(realpath "$CMAKE_DIR")
|
||||
|
||||
get_executable_name "$CMAKE_DIR"
|
||||
|
||||
FLAGS=""
|
||||
[ $MULTIBUILD -eq 0 ] || FLAGS="$FLAGS -m"
|
||||
[ $RELEASE -eq 0 ] || FLAGS="$FLAGS -r"
|
||||
|
Reference in New Issue
Block a user