From 2a84f83f66dcd940156abb25cad4cad856e24b69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Wo=CC=81jcik?= <3044353+pwojcikdev@users.noreply.github.com> Date: Thu, 27 Apr 2023 21:25:49 +0200 Subject: [PATCH] Introduce universal build script --- .github/workflows/unit_tests.yml | 8 +-- CMakeLists.txt | 2 + ci/build.sh | 84 ++++++++++++++++++++++++++++++++ 3 files changed, 91 insertions(+), 3 deletions(-) create mode 100755 ci/build.sh diff --git a/.github/workflows/unit_tests.yml b/.github/workflows/unit_tests.yml index bf86a894..ca26acf4 100644 --- a/.github/workflows/unit_tests.yml +++ b/.github/workflows/unit_tests.yml @@ -40,7 +40,7 @@ jobs: run: ci/prepare/macos/prepare.sh - name: Build Tests - run: ci/build-ci.sh "/tmp/qt/lib/cmake/Qt5"; + run: ci/build.sh - name: Save Build Cache # Only save build cache from develop to avoid polluting it by other branches / PRs @@ -100,7 +100,7 @@ jobs: run: sudo -E ci/prepare/linux/prepare.sh - name: Build Tests - run: docker run -e TEST_USE_ROCKSDB -e RELEASE -v ${PWD}:/workspace nanocurrency/nano-env:${{ matrix.COMPILER }} /bin/bash -c "cd /workspace && ./ci/build-ci.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5" + run: ci/build.sh - name: Save Build Cache # Only save build cache from develop to avoid polluting it by other branches / PRs @@ -160,7 +160,9 @@ jobs: run: ci/prepare/windows/prepare.ps1 - name: Build Tests - run: ci/actions/windows/build.ps1 + id: build + run: ci/build.sh + shell: bash - name: Save Build Cache # only save build cache from develop to avoid polluting it by other branches / PRs diff --git a/CMakeLists.txt b/CMakeLists.txt index c3b800d7..cdd370f5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -67,6 +67,8 @@ endif() # Create all libraries and executables in the root binary dir set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}) set(NANO_GUI OFF diff --git a/ci/build.sh b/ci/build.sh new file mode 100755 index 00000000..bf939d54 --- /dev/null +++ b/ci/build.sh @@ -0,0 +1,84 @@ +#!/bin/bash +set -euox pipefail + +NODE_SRC=${1:-${PWD}} + +OS=$(uname) +BUILD_TYPE=${NANO_BUILD_TYPE:-Debug} +BUILD_TARGET=build_tests + +if [[ "${RELEASE:-false}" == "true" ]]; then + BUILD_TYPE="RelWithDebInfo" +fi + +if [[ ${NANO_ASAN_INT:-0} -eq 1 ]]; then + SANITIZERS="-DNANO_ASAN_INT=ON" +fi +if [[ ${NANO_ASAN:-0} -eq 1 ]]; then + SANITIZERS="-DNANO_ASAN=ON" +fi +if [[ ${NANO_TSAN:-0} -eq 1 ]]; then + SANITIZERS="-DNANO_TSAN=ON" +fi +if [[ ${NANO_COVERAGE:-0} -eq 1 ]]; then + SANITIZERS="-DCOVERAGE=ON" +fi + +if [[ "$OS" == 'Linux' ]]; then + BACKTRACE="-DNANO_STACKTRACE_BACKTRACE=ON" + + if [[ "$COMPILER" == 'clang' ]]; then + BACKTRACE="${BACKTRACE} -DNANO_BACKTRACE_INCLUDE=" + fi +else + BACKTRACE="" +fi + +mkdir -p build +pushd build + +cmake \ +-DACTIVE_NETWORK=nano_dev_network \ +-DNANO_TEST=ON \ +-DNANO_GUI=ON \ +-DPORTABLE=ON \ +-DNANO_WARN_TO_ERR=ON \ +-DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ +-DCI_TEST=ON \ +-DQt5_DIR=${NANO_QT_DIR:-} \ +${BACKTRACE:-} \ +${SANITIZERS:-} \ +${NODE_SRC} + +number_of_processors() { + case "$(uname -s)" in + Linux*) + nproc + ;; + Darwin*) + sysctl -n hw.ncpu + ;; + CYGWIN*|MINGW32*|MSYS*|MINGW*) + echo "${NUMBER_OF_PROCESSORS}" + ;; + *) + echo "Unknown OS" + exit 1 + ;; + esac +} + +parallel_build_flag() { + case "$(uname -s)" in + CYGWIN*|MINGW32*|MSYS*|MINGW*) + echo "-- -m" + ;; + *) + echo "--parallel $(number_of_processors)" + ;; + esac +} + +cmake --build ${PWD} --target ${BUILD_TARGET} $(parallel_build_flag) + +popd \ No newline at end of file