This commit is contained in:
parent
2d62d7af7f
commit
16b2ce5b52
@ -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
|
@ -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"
|
||||||
|
4
test.sh
4
test.sh
@ -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"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user