From 49cb67f14c3c8300a67df05a875e5e0c3d2e8ddc Mon Sep 17 00:00:00 2001 From: Russel Waters Date: Wed, 12 Aug 2020 02:13:31 -0700 Subject: [PATCH] Enforce Cxx17 (#2878) * Move clang test environment to clang-6 for c++17 support * stop building clang 3.9.1 * centos updates GCC 7.4.1 cmake 3.15.4 boost build shared via prep.sh.in fix spec.in for nano_rpc * remove support for building CMAKE_CXX_STANDARD 14 * test instabilitydisable node_DeathTest.readonly_block_store_not_existinstability with clang and actions specfically --- .github/workflows/release_test.yml | 2 +- .github/workflows/tests.yml | 2 +- CMakeLists.txt | 6 +----- ci/actions/linux/deploy-docker.sh | 2 +- ci/actions/linux/install_deps.sh | 2 +- ci/build-centos.sh | 4 ++-- docker/ci/Dockerfile-clang-6 | 2 ++ nano/core_test/node.cpp | 6 +++++- nanocurrency-beta.spec.in | 6 ++++-- nanocurrency.spec.in | 6 ++++-- util/build_prep/centos/prep.sh.in | 13 ++++++++++--- util/build_prep/macosx/prep.sh.in | 2 +- util/build_prep/ubuntu/prep.sh.in | 2 +- 13 files changed, 34 insertions(+), 21 deletions(-) diff --git a/.github/workflows/release_test.yml b/.github/workflows/release_test.yml index 5ea81601..772b5947 100644 --- a/.github/workflows/release_test.yml +++ b/.github/workflows/release_test.yml @@ -44,7 +44,7 @@ jobs: - name: Fetch Deps run: ci/actions/linux/install_deps.sh - name: Run Tests - run: docker run -v ${PWD}:/workspace nanocurrency/nano-env:clang /bin/bash -c "cd /workspace && RELEASE=1 ./ci/build-travis.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5 ${PWD}" + run: docker run -v ${PWD}:/workspace nanocurrency/nano-env:clang-6 /bin/bash -c "cd /workspace && RELEASE=1 ./ci/build-travis.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5 ${PWD}" windows_test: runs-on: windows-latest diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index a9ade4d6..e1b0a1af 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -42,7 +42,7 @@ jobs: - name: Fetch Deps run: ci/actions/linux/install_deps.sh - name: Run Tests - run: docker run -v ${PWD}:/workspace nanocurrency/nano-env:clang /bin/bash -c "cd /workspace && ./ci/build-travis.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5 ${PWD}" + run: docker run -v ${PWD}:/workspace nanocurrency/nano-env:clang-6 /bin/bash -c "cd /workspace && ./ci/build-travis.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5 ${PWD}" windows_test: runs-on: windows-latest diff --git a/CMakeLists.txt b/CMakeLists.txt index df5b0bda..3e015339 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -194,11 +194,7 @@ set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD_REQUIRED ON) #set(CMAKE_C_EXTENSIONS OFF) -set(NANO_SUPPORTED_CPP_STANDARD "17" CACHE STRING "Supported C++ standard (14 or 17)") -if (CI_BUILD OR CI_TEST) - set(NANO_SUPPORTED_CPP_STANDARD "14") -endif() -set(CMAKE_CXX_STANDARD ${NANO_SUPPORTED_CPP_STANDARD}) +set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) #set(CMAKE_CXX_EXTENSIONS OFF) diff --git a/ci/actions/linux/deploy-docker.sh b/ci/actions/linux/deploy-docker.sh index 4dba20ba..c1f08625 100755 --- a/ci/actions/linux/deploy-docker.sh +++ b/ci/actions/linux/deploy-docker.sh @@ -10,7 +10,7 @@ if [ -n "$DOCKER_PASSWORD" ]; then if [[ "$GITHUB_WORKFLOW" = "Develop" ]]; then "$scripts"/custom-timeout.sh 30 docker push "nanocurrency/nano-env:base" "$scripts"/custom-timeout.sh 30 docker push "nanocurrency/nano-env:gcc" - "$scripts"/custom-timeout.sh 30 docker push "nanocurrency/nano-env:clang" + "$scripts"/custom-timeout.sh 30 docker push "nanocurrency/nano-env:clang-6" echo "Deployed nano-env" exit 0 else diff --git a/ci/actions/linux/install_deps.sh b/ci/actions/linux/install_deps.sh index 45c6f554..c298d1fb 100755 --- a/ci/actions/linux/install_deps.sh +++ b/ci/actions/linux/install_deps.sh @@ -4,4 +4,4 @@ sudo mkdir -p /etc/docker && echo '{"ipv6":true,"fixed-cidr-v6":"2001:db8:1::/64 ci/build-docker-image.sh docker/ci/Dockerfile-base nanocurrency/nano-env:base ci/build-docker-image.sh docker/ci/Dockerfile-gcc nanocurrency/nano-env:gcc -ci/build-docker-image.sh docker/ci/Dockerfile-clang nanocurrency/nano-env:clang +ci/build-docker-image.sh docker/ci/Dockerfile-clang-6 nanocurrency/nano-env:clang-6 diff --git a/ci/build-centos.sh b/ci/build-centos.sh index 63b28f86..e87dae17 100755 --- a/ci/build-centos.sh +++ b/ci/build-centos.sh @@ -10,8 +10,8 @@ run_source() { run_build() { mkdir -p ~/rpmbuild/SOURCES/ mv -f ~/nano-${VERSIONS}.tar.gz ~/rpmbuild/SOURCES/. - scl enable llvm-toolset-7 devtoolset-7 'rpmbuild -ba nanocurrency.spec' - scl enable llvm-toolset-7 devtoolset-7 'rpmbuild -ba nanocurrency-beta.spec' + scl enable devtoolset-7 'rpmbuild -ba nanocurrency.spec' + scl enable devtoolset-7 'rpmbuild -ba nanocurrency-beta.spec' } run_update() { diff --git a/docker/ci/Dockerfile-clang-6 b/docker/ci/Dockerfile-clang-6 index 8178aa7c..e244b21e 100644 --- a/docker/ci/Dockerfile-clang-6 +++ b/docker/ci/Dockerfile-clang-6 @@ -1,4 +1,6 @@ FROM nanocurrency/nano-env:base +# need https for llvm +RUN apt-get update && apt-get install apt-transport-https ca-certificates -yqq RUN apt-get update && apt-get install -yqq software-properties-common && \ wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \ diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index b8a42ee0..daf8d938 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -65,8 +65,12 @@ TEST (node, block_store_path_failure) ASSERT_TRUE (node->wallets.items.empty ()); node->stop (); } - +#if defined(__clang__) && defined(__linux__) && CI +// Disable test due to instability with clang and actions +TEST (node_DeathTest, DISABLED_readonly_block_store_not_exist) +#else TEST (node_DeathTest, readonly_block_store_not_exist) +#endif { // For ASSERT_DEATH_IF_SUPPORTED testing::FLAGS_gtest_death_test_style = "threadsafe"; diff --git a/nanocurrency-beta.spec.in b/nanocurrency-beta.spec.in index 520820bd..fdce2e65 100644 --- a/nanocurrency-beta.spec.in +++ b/nanocurrency-beta.spec.in @@ -17,12 +17,12 @@ the nano daemon, and a service. %prep if [ ! -x "$(which cmake)" ]; then echo "cmake must exist, try:" >&2 - echo " scl enable llvm-toolset-7 devtoolset-7 'rpmbuild ...'" >&2 + echo " scl enable devtoolset-7 'rpmbuild ...'" >&2 exit 1 fi if cc --std=c++14 --version 2>&1 >/dev/null | grep '^' >/dev/null; then echo "Unsupported C++ compiler, try:" >&2 - echo " scl enable llvm-toolset-7 devtoolset-7 'rpmbuild ...'" >&2 + echo " scl enable devtoolset-7 'rpmbuild ...'" >&2 exit 1 fi if test ! -d /usr/local/boost; then @@ -34,6 +34,7 @@ fi %build cmake -DCMAKE_VERBOSE_MAKEFILE=ON -DBOOST_ROOT=/usr/local/boost -DACTIVE_NETWORK=nano_beta_network . make nano_node %{?_smp_mflags} +make nano_rpc %{?_smp_mflags} %install if [ ! %{buildroot} = "/" ]; then %{__rm} -rf %{buildroot}; fi @@ -49,6 +50,7 @@ if [ ! %{buildroot} = "/" ]; then %{__rm} -rf %{buildroot}; fi %files %defattr(755,root,root) %{_bindir}/nano_node-beta +%{_bindir}/nano_rpc-beta %attr(644,root,root) /etc/systemd/system/nanocurrency-beta.service %pre diff --git a/nanocurrency.spec.in b/nanocurrency.spec.in index d68f21b6..2850de29 100644 --- a/nanocurrency.spec.in +++ b/nanocurrency.spec.in @@ -17,12 +17,12 @@ the nano daemon, and a service. %prep if [ ! -x "$(which cmake)" ]; then echo "cmake must exist, try:" >&2 - echo " scl enable llvm-toolset-7 devtoolset-7 'rpmbuild ...'" >&2 + echo " scl enable devtoolset-7 'rpmbuild ...'" >&2 exit 1 fi if cc --std=c++14 --version 2>&1 >/dev/null | grep '^' >/dev/null; then echo "Unsupported C++ compiler, try:" >&2 - echo " scl enable llvm-toolset-7 devtoolset-7 'rpmbuild ...'" >&2 + echo " scl enable devtoolset-7 'rpmbuild ...'" >&2 exit 1 fi if test ! -d /usr/local/boost; then @@ -34,6 +34,7 @@ fi %build cmake -DCMAKE_VERBOSE_MAKEFILE=ON -DBOOST_ROOT=/usr/local/boost . make nano_node %{?_smp_mflags} +make nano_rpc %{?_smp_mflags} %install if [ ! %{buildroot} = "/" ]; then %{__rm} -rf %{buildroot}; fi @@ -49,6 +50,7 @@ if [ ! %{buildroot} = "/" ]; then %{__rm} -rf %{buildroot}; fi %files %defattr(755,root,root) %{_bindir}/nano_node +%{_bindir}/nano_rpc %attr(644,root,root) /etc/systemd/system/nanocurrency.service %pre diff --git a/util/build_prep/centos/prep.sh.in b/util/build_prep/centos/prep.sh.in index 9299f621..3e016f9b 100644 --- a/util/build_prep/centos/prep.sh.in +++ b/util/build_prep/centos/prep.sh.in @@ -13,13 +13,20 @@ yes | yum install -y jq || exit 1 yes | yum install -y rpm-build || exit 1 yes | yum install -y glibc-devel glibc-headers make which libstdc++-static || exit 1 yes | yum install -y centos-release-scl || exit 1 -yes | yum install -y llvm-toolset-7-cmake devtoolset-7-llvm|| exit 1 +yes | yum install -y devtoolset-7-gcc-c++|| exit 1 + +wget -O cmake_install.sh https://github.com/Kitware/CMake/releases/download/v3.15.4/cmake-3.15.4-Linux-x86_64.sh +chmod +x cmake_install.sh +./cmake_install.sh --prefix=/usr --exclude-subdir --skip-license + +rm -f ./cmake_install.sh + # Ensure we have a new enough Boost ( - eval "$(scl enable llvm-toolset-7 devtoolset-7 "bash -c 'set | grep ^PATH='")" + eval "$(scl enable devtoolset-7 "bash -c 'set | grep ^PATH='")" if ! have boost; then - bootstrap_boost -m + bootstrap_boost -m -s fi if ! have boost; then diff --git a/util/build_prep/macosx/prep.sh.in b/util/build_prep/macosx/prep.sh.in index ea330278..ddab709c 100644 --- a/util/build_prep/macosx/prep.sh.in +++ b/util/build_prep/macosx/prep.sh.in @@ -40,7 +40,7 @@ if ! have boost; then BOOST_ROOT="${KEEP_AROUND_DIRECTORY}/boost" if ! have boost; then - bootstrap_boost -m -c -k + bootstrap_boost -m -c -s fi fi diff --git a/util/build_prep/ubuntu/prep.sh.in b/util/build_prep/ubuntu/prep.sh.in index b4dbb78f..a1d76d63 100644 --- a/util/build_prep/ubuntu/prep.sh.in +++ b/util/build_prep/ubuntu/prep.sh.in @@ -20,7 +20,7 @@ apt autoremove --yes # Ensure we have a new enough Boost if ! have boost; then - bootstrap_boost -m -k + bootstrap_boost -m -s fi if ! have boost; then