summaryrefslogtreecommitdiff
path: root/stacks/crdop/scripts/build-crdop.sh
blob: 2253d5a14ba8c1ac1ea2f7562d54099785fe7a4d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/usr/bin/env bash
# CRDOP unified build — vendor embedded; GCC, Clang, or MSVC via CMake.
set -euo pipefail

ROOT="$(cd "$(dirname "$0")/.." && pwd)"
BUILD="${CRDOP_BUILD_DIR:-${ROOT}/build}"
TYPE="${CRDOP_BUILD_TYPE:-Release}"
TOOLCHAIN="${CRDOP_TOOLCHAIN:-}"
BUILD_TESTS="${CRDOP_BUILD_TESTS:-OFF}"
RUN_TESTS="${CRDOP_RUN_TESTS:-OFF}"

if [[ -f "${BUILD}/CMakeCache.txt" ]]; then
    cached_home="$(grep -m1 '^CMAKE_HOME_DIRECTORY:INTERNAL=' "${BUILD}/CMakeCache.txt" 2>/dev/null | cut -d= -f2- || true)"
    if [[ -n "${cached_home}" && "${cached_home}" != "${ROOT}" ]]; then
        echo "CRDOP: removing stale CMake cache (was ${cached_home}, now ${ROOT})" >&2
        rm -rf "${BUILD}"
    fi
fi

"${ROOT}/scripts/import-ardopcf.sh"

CMAKE_ARGS=(-B "${BUILD}" -DCMAKE_BUILD_TYPE="${TYPE}" -DCRDOP_BUILD_TESTS="${BUILD_TESTS}")

if [[ -n "${TOOLCHAIN}" ]]; then
    CMAKE_ARGS+=(-DCMAKE_TOOLCHAIN_FILE="${ROOT}/cmake/toolchains/${TOOLCHAIN}.cmake")
fi

if [[ -n "${CC:-}" ]]; then
    CMAKE_ARGS+=(-DCMAKE_C_COMPILER="${CC}")
fi
if [[ -n "${CXX:-}" ]]; then
    CMAKE_ARGS+=(-DCMAKE_CXX_COMPILER="${CXX}")
fi

cmake "${ROOT}" "${CMAKE_ARGS[@]}"
cmake --build "${BUILD}" -j"$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 4)"

"${ROOT}/scripts/test-smoke.sh"

if [[ "${BUILD_TESTS}" == "ON" || "${BUILD_TESTS}" == "1" || "${RUN_TESTS}" == "ON" || "${RUN_TESTS}" == "1" ]]; then
    if [[ -f "${BUILD}/CTestTestfile.cmake" ]]; then
        ctest --test-dir "${BUILD}" --output-on-failure
    else
        echo "NOTE: CRDOP_BUILD_TESTS requested but no CTest targets (install libcmocka-dev?)" >&2
    fi
fi

echo "CRDOP $(cat "${ROOT}/VERSION") built: ${BUILD}/crdopc"
git clone -b <branch> https://cgit.mode42.com/<repo>.git
git clone -b <branch> git://cgit.mode42.com/<repo>.git

info@mode42.com