'Generic Commit'
Some checks failed
dropshell-build / build (push) Has been cancelled

This commit is contained in:
Your Name 2025-06-02 08:03:02 +12:00
parent 2d62d7af7f
commit 16b2ce5b52
50 changed files with 50 additions and 60 deletions

View File

@ -1,6 +1,13 @@
# Get the current date in yyyy.mmdd.hhmm format
execute_process(
COMMAND date "+%Y.%m%d.%H%M"
OUTPUT_VARIABLE PROJECT_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE
)
cmake_minimum_required(VERSION 3.10) cmake_minimum_required(VERSION 3.10)
set(PROJECT_EXE_NAME ipdemo) get_filename_component(PROJECT_EXE_NAME "${CMAKE_CURRENT_SOURCE_DIR}" NAME)
project(${PROJECT_EXE_NAME} VERSION 1.0.0 LANGUAGES CXX) project(${PROJECT_EXE_NAME} VERSION ${PROJECT_VERSION} LANGUAGES CXX)
# Force static linking globally # Force static linking globally
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static")
@ -24,15 +31,6 @@ endif()
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -DNDEBUG") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -DNDEBUG")
# Configure version information
string(TIMESTAMP CURRENT_YEAR "%Y")
string(TIMESTAMP CURRENT_MONTH "%m")
string(TIMESTAMP CURRENT_DAY "%d")
string(TIMESTAMP CURRENT_HOUR "%H")
string(TIMESTAMP CURRENT_MINUTE "%M")
set(PROJECT_VERSION "${CURRENT_YEAR}.${CURRENT_MONTH}${CURRENT_DAY}.${CURRENT_HOUR}${CURRENT_MINUTE}")
string(TIMESTAMP RELEASE_DATE "%Y-%m-%d")
# Configure version.hpp file # Configure version.hpp file
configure_file( configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/src/version.hpp.in" "${CMAKE_CURRENT_SOURCE_DIR}/src/version.hpp.in"
@ -46,6 +44,7 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
# Auto-detect source files # Auto-detect source files
file(GLOB_RECURSE SOURCES "src/*.cpp") file(GLOB_RECURSE SOURCES "src/*.cpp")
file(GLOB_RECURSE HEADERS "src/*.hpp") file(GLOB_RECURSE HEADERS "src/*.hpp")
file(GLOB_RECURSE HEADERS "src/*.h")
# Add custom target to run cmake_prebuild.sh at the start of the build process # Add custom target to run cmake_prebuild.sh at the start of the build process
add_custom_target(run_prebuild_script ALL add_custom_target(run_prebuild_script ALL

View File

@ -11,11 +11,6 @@ ARCHS=(
HOSTARCH=$(uname -m) HOSTARCH=$(uname -m)
SOURCE_DIR=""
BUILD_DIR=""
OUTPUT_DIR=""
EXECUTABLE_NAME=""
# set flags from command line # set flags from command line
RELEASE=0 RELEASE=0
MULTIBUILD=0 MULTIBUILD=0
@ -40,54 +35,46 @@ function die() {
exit 1 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 # 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() { function build_arch() {
local ARCH="$1" local ARCH="$1"
local CMAKE_DIR="$2" 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 OUTPUT_DIR="${CMAKE_DIR}/output"
local PREVDIR="$PWD"
local JOBS; local JOBS;
JOBS=$(nproc) # Set JOBS to the number of available CPU cores JOBS=$(nproc) # Set JOBS to the number of available CPU cores
cd "${CMAKE_DIR}" || exit 1 cd "${CMAKE_DIR}" || exit 1
local ARCH_BUILD_DIR=${BUILD_DIR}/${ARCH}
mkdir -p "${ARCH_BUILD_DIR}" 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 if [ ! -f "${HOME}/.musl-cross/${ARCH}-linux-musl-cross/bin/${ARCH}-linux-musl-g++" ]; then
echo "Musl cross toolchain not found for ${ARCH}." echo "Musl cross toolchain not found for ${ARCH}."
@ -122,16 +109,22 @@ function build_arch() {
cd "${ARCH_BUILD_DIR}" || exit 1 cd "${ARCH_BUILD_DIR}" || exit 1
ninja -k0 -j"${JOBS}" ninja -k0 -j"${JOBS}"
if [ "$RELEASE" -eq 1 ]; then # the rest is optional.
upx "${ARCH_BUILD_DIR}/${EXECUTABLE_NAME}"
fi
if [ ! -d "${OUTPUT_DIR}" ]; then # loop through the build directory and find executables
mkdir -p "${OUTPUT_DIR}" for executable in "${ARCH_BUILD_DIR}"/*; do
fi if [ -f "$executable" ] && [ -x "$executable" ]; then
cp "${ARCH_BUILD_DIR}/${EXECUTABLE_NAME}" "${OUTPUT_DIR}/${EXECUTABLE_NAME}.${ARCH}" local TARGET_NAME="${executable##*/}"
local TARGET_PATH="${OUTPUT_DIR}/${TARGET_NAME}.${ARCH}"
cd "${PREVDIR}" || exit 1 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() { function build() {
@ -161,8 +154,6 @@ function buildspawn() {
# make canonical # make canonical
CMAKE_DIR=$(realpath "$CMAKE_DIR") CMAKE_DIR=$(realpath "$CMAKE_DIR")
get_executable_name "$CMAKE_DIR"
FLAGS="" FLAGS=""
[ $MULTIBUILD -eq 0 ] || FLAGS="$FLAGS -m" [ $MULTIBUILD -eq 0 ] || FLAGS="$FLAGS -m"
[ $RELEASE -eq 0 ] || FLAGS="$FLAGS -r" [ $RELEASE -eq 0 ] || FLAGS="$FLAGS -r"

View File

@ -6,9 +6,9 @@ SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
echo "Testing dropshell-build" echo "Testing dropshell-build"
DROPSHELL_BUILD_TAG="test" "${SCRIPT_DIR}/src/dropshell-build" "${SCRIPT_DIR}/test" DROPSHELL_BUILD_TAG="test" "${SCRIPT_DIR}/src/dropshell-build" "${SCRIPT_DIR}/ipdemo"
"${SCRIPT_DIR}/test/output/ipdemo.x86_64" "${SCRIPT_DIR}/ipdemo/output/ipdemo.x86_64"