diff --git a/.github/workflows/unit_tests.yml b/.github/workflows/unit_tests.yml index 80fa0c3d..451d705b 100644 --- a/.github/workflows/unit_tests.yml +++ b/.github/workflows/unit_tests.yml @@ -41,7 +41,7 @@ jobs: - name: Build Tests id: build - run: ci/build.sh + run: ci/build-tests.sh - name: Save Build Cache # Only save build cache from develop to avoid polluting it by other branches / PRs @@ -105,7 +105,7 @@ jobs: - name: Build Tests id: build - run: ci/build.sh + run: ci/build-tests.sh - name: Save Build Cache # Only save build cache from develop to avoid polluting it by other branches / PRs @@ -170,7 +170,7 @@ jobs: - name: Build Tests id: build - run: ci/build.sh + run: ci/build-tests.sh shell: bash - name: Save Build Cache diff --git a/CMakeLists.txt b/CMakeLists.txt index 9a213637..1a581859 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -656,6 +656,12 @@ add_subdirectory(nano/nano_node) add_subdirectory(nano/rpc) add_subdirectory(nano/nano_rpc) +add_custom_target( + executables + COMMAND echo "BATCH BUILDING node + rpc" + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + DEPENDS nano_node nano_rpc) + if(NANO_FUZZER_TEST) if(NOT WIN32) add_subdirectory(nano/fuzzer_test) @@ -694,15 +700,10 @@ if(NANO_TEST OR RAIBLOCKS_TEST) add_subdirectory(nano/rpc_test) add_subdirectory(nano/slow_test) add_custom_target( - build_tests + all_tests COMMAND echo "BATCH BUILDING TESTS" WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - DEPENDS core_test load_test rpc_test nano_node nano_rpc) - add_custom_target( - run_tests - COMMAND ${PROJECT_SOURCE_DIR}/ci/test.sh ${CMAKE_BINARY_DIR} - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} - DEPENDS build_tests) + DEPENDS core_test load_test rpc_test slow_test nano_node nano_rpc) endif() if(NANO_TEST OR RAIBLOCKS_TEST) @@ -807,7 +808,7 @@ if(NANO_GUI OR RAIBLOCKS_GUI) set_target_properties( qt_test PROPERTIES COMPILE_FLAGS "-DQT_NO_KEYWORDS -DBOOST_ASIO_HAS_STD_ARRAY=1") - add_dependencies(build_tests qt_test) + add_dependencies(all_tests qt_test) endif() if(APPLE) diff --git a/ci/build-node.sh b/ci/build-node.sh new file mode 100755 index 00000000..6cebd1fb --- /dev/null +++ b/ci/build-node.sh @@ -0,0 +1,4 @@ +#!/bin/bash +set -euox pipefail + +$(dirname "$BASH_SOURCE")/build.sh executables \ No newline at end of file diff --git a/ci/build-tests.sh b/ci/build-tests.sh new file mode 100755 index 00000000..c916ba44 --- /dev/null +++ b/ci/build-tests.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -euox pipefail + +BUILD_TYPE="Debug" +if [[ "${RELEASE:-false}" == "true" ]]; then + BUILD_TYPE="RelWithDebInfo" +fi + +BUILD_TYPE=$BUILD_TYPE \ +NANO_TEST=ON \ +NANO_NETWORK=dev \ +NANO_GUI=ON \ +$(dirname "$BASH_SOURCE")/build.sh all_tests \ No newline at end of file diff --git a/ci/build.sh b/ci/build.sh index 676c8f76..fabfe428 100755 --- a/ci/build.sh +++ b/ci/build.sh @@ -1,52 +1,62 @@ #!/bin/bash set -euox pipefail -NODE_SRC=${1:-${PWD}} +BUILD_TARGET="" +if [[ ${1:-} ]]; then + BUILD_TARGET="--target $1" +fi +NODE_SRC=${NODE_SRC:-${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 +CMAKE_BACKTRACE="" if [[ "$OS" == 'Linux' ]]; then - BACKTRACE="-DNANO_STACKTRACE_BACKTRACE=ON" + CMAKE_BACKTRACE="-DNANO_STACKTRACE_BACKTRACE=ON" if [[ "$COMPILER" == 'clang' ]]; then - BACKTRACE="${BACKTRACE} -DNANO_BACKTRACE_INCLUDE=" + CMAKE_BACKTRACE="${CMAKE_BACKTRACE} -DNANO_BACKTRACE_INCLUDE=" fi -else - BACKTRACE="" fi -mkdir -p build -pushd build +CMAKE_QT_DIR="" +if [[ ${NANO_QT_DIR:-} ]]; then + CMAKE_QT_DIR="-DQt5_DIR=${NANO_QT_DIR}" +fi + +CMAKE_SANITIZER="" +if [[ ${NANO_SANITIZER:-} ]]; then + case "${NANO_SANITIZER}" in + ASAN) + CMAKE_SANITIZER="-DNANO_ASAN=ON" + ;; + ASAN_INT) + CMAKE_SANITIZER="-DNANO_ASAN_INT=ON" + ;; + TSAN) + CMAKE_SANITIZER="-DNANO_TSAN=ON" + ;; + *) + echo "Unknown sanitizer: '${NANO_SANITIZER}'" + exit 1 + ;; + esac +fi + +BUILD_DIR="build" + +mkdir -p $BUILD_DIR +pushd $BUILD_DIR cmake \ --DACTIVE_NETWORK=nano_dev_network \ --DNANO_TEST=ON \ --DNANO_GUI=ON \ +-DCMAKE_BUILD_TYPE=${BUILD_TYPE:-"Debug"} \ -DPORTABLE=ON \ --DNANO_WARN_TO_ERR=ON \ --DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ --DQt5_DIR=${NANO_QT_DIR:-} \ -${BACKTRACE:-} \ -${SANITIZERS:-} \ +-DACTIVE_NETWORK=nano_${NANO_NETWORK:-"live"}_network \ +-DNANO_TEST=${NANO_TEST:-OFF} \ +-DNANO_GUI=${NANO_GUI:-OFF} \ +-DCOVERAGE=${NANO_COVERAGE:-OFF} \ +${CMAKE_SANITIZER:-} \ +${CMAKE_QT_DIR:-} \ +${CMAKE_BACKTRACE:-} \ ${NODE_SRC} number_of_processors() { @@ -78,6 +88,6 @@ parallel_build_flag() { esac } -cmake --build ${PWD} --target ${BUILD_TARGET} $(parallel_build_flag) +cmake --build ${PWD} ${BUILD_TARGET} $(parallel_build_flag) -popd \ No newline at end of file +popd