From a0d609b4d728c8497089c177dfbbd4054974339c Mon Sep 17 00:00:00 2001 From: Alberto Miranda Date: Mon, 27 Feb 2023 11:37:47 +0100 Subject: [PATCH 01/10] Remove use of GCC-specific header --- src/common/abt_cxx/shared_mutex.hpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/common/abt_cxx/shared_mutex.hpp b/src/common/abt_cxx/shared_mutex.hpp index 1ec4b230..5cf76178 100644 --- a/src/common/abt_cxx/shared_mutex.hpp +++ b/src/common/abt_cxx/shared_mutex.hpp @@ -25,7 +25,6 @@ #include #include #include -#include #ifndef SCORD_ABT_SHARED_MUTEX_HPP #define SCORD_ABT_SHARED_MUTEX_HPP -- GitLab From 6a736dfc4ec5a7f6e8b41bb41638b3cb51b94b40 Mon Sep 17 00:00:00 2001 From: Alberto Miranda Date: Mon, 27 Feb 2023 11:40:03 +0100 Subject: [PATCH 02/10] Use std::addressof() instead of std::__addressof() --- src/common/abt_cxx/shared_mutex.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/common/abt_cxx/shared_mutex.hpp b/src/common/abt_cxx/shared_mutex.hpp index 5cf76178..b2570c43 100644 --- a/src/common/abt_cxx/shared_mutex.hpp +++ b/src/common/abt_cxx/shared_mutex.hpp @@ -123,7 +123,7 @@ public: unique_lock() noexcept : m_device(0), m_owns(false) {} explicit unique_lock(mutex_type& m) - : m_device(std::__addressof(m)), m_owns(false) { + : m_device(std::addressof(m)), m_owns(false) { lock(); m_owns = true; } @@ -234,7 +234,7 @@ public: shared_lock() noexcept : m_device(nullptr), m_owns(false) {} explicit shared_lock(mutex_type& m) - : m_device(std::__addressof(m)), m_owns(true) { + : m_device(std::addressof(m)), m_owns(true) { m.lock_shared(); } -- GitLab From 2154941768425ddc0fa778abf61fed07f9f1c995 Mon Sep 17 00:00:00 2001 From: Alberto Miranda Date: Mon, 27 Feb 2023 11:40:29 +0100 Subject: [PATCH 03/10] Use std::exchange() instead of std::__exchange() --- src/common/abt_cxx/shared_mutex.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/abt_cxx/shared_mutex.hpp b/src/common/abt_cxx/shared_mutex.hpp index b2570c43..402cfed1 100644 --- a/src/common/abt_cxx/shared_mutex.hpp +++ b/src/common/abt_cxx/shared_mutex.hpp @@ -287,7 +287,7 @@ public: mutex_type* release() noexcept { m_owns = false; - return std::__exchange(m_device, nullptr); + return std::exchange(m_device, nullptr); } // Getters -- GitLab From db21eb06c465369a47e5d149d19aa9208e7c23c4 Mon Sep 17 00:00:00 2001 From: Alberto Miranda Date: Mon, 27 Feb 2023 11:40:52 +0100 Subject: [PATCH 04/10] Replace __VA_OPT__ with ##__VA_ARGS__ in C logging macros __VA_OPT__ is not available in C mode Clang :/ --- src/common/logger/macros.h | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/common/logger/macros.h b/src/common/logger/macros.h index 8369ec5f..f4ee6ac6 100644 --- a/src/common/logger/macros.h +++ b/src/common/logger/macros.h @@ -133,17 +133,15 @@ #define LOGGER_LOG16 LOGGER_LOGN #define LOGGER_LOGN(level, fmt, ...) logger_log(level, fmt, __VA_ARGS__) -#define LOGGER_INFO(fmt, ...) LOGGER_LOG(info, fmt __VA_OPT__(, ) __VA_ARGS__); +#define LOGGER_INFO(fmt, ...) LOGGER_LOG(info, fmt, ##__VA_ARGS__); #ifdef __LOGGER_ENABLE_DEBUG__ -#define LOGGER_DEBUG(fmt, ...) \ - LOGGER_LOG(debug, fmt __VA_OPT__(, ) __VA_ARGS__); +#define LOGGER_DEBUG(fmt, ...) LOGGER_LOG(debug, fmt, ##__VA_ARGS__); #endif -#define LOGGER_WARN(fmt, ...) LOGGER_LOG(warn, fmt __VA_OPT__(, ) __VA_ARGS__); +#define LOGGER_WARN(fmt, ...) LOGGER_LOG(warn, fmt, ##__VA_ARGS__); -#define LOGGER_ERROR(fmt, ...) \ - LOGGER_LOG(error, fmt __VA_OPT__(, ) __VA_ARGS__); +#define LOGGER_ERROR(fmt, ...) LOGGER_LOG(error, fmt, ##__VA_ARGS__); #endif -- GitLab From b4595662a2e97397274ea59d5cc6a9c0f9bebd1e Mon Sep 17 00:00:00 2001 From: Alberto Miranda Date: Mon, 27 Feb 2023 12:15:05 +0100 Subject: [PATCH 05/10] Fix UB in va_start with argument undergoing default promotion For more information refer to: https://wiki.sei.cmu.edu/confluence/display/cplusplus/EXP58-CPP.+Pass+an+object+of+the+correct+type+to+va_start --- src/lib/c_wrapper.cpp | 4 ++-- src/lib/scord/scord.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lib/c_wrapper.cpp b/src/lib/c_wrapper.cpp index f4be0262..1074843a 100644 --- a/src/lib/c_wrapper.cpp +++ b/src/lib/c_wrapper.cpp @@ -309,7 +309,7 @@ ADM_define_data_operation(ADM_server_t server, ADM_job_t job, const char* path, ADM_return_t ADM_connect_data_operation(ADM_server_t server, ADM_job_t job, ADM_dataset_t input, ADM_dataset_t output, - bool should_stream, ...) { + int should_stream, ...) { const scord::server srv{server}; @@ -336,7 +336,7 @@ ADM_finalize_data_operation(ADM_server_t server, ADM_job_t job, ADM_return_t ADM_link_transfer_to_data_operation(ADM_server_t server, ADM_job_t job, ADM_data_operation_t op, - ADM_transfer_t transfer, bool should_stream, + ADM_transfer_t transfer, int should_stream, ...) { const scord::server srv{server}; diff --git a/src/lib/scord/scord.h b/src/lib/scord/scord.h index fa481557..1693a3ba 100644 --- a/src/lib/scord/scord.h +++ b/src/lib/scord/scord.h @@ -401,7 +401,7 @@ ADM_define_data_operation(ADM_server_t server, ADM_job_t job, const char* path, ADM_return_t ADM_connect_data_operation(ADM_server_t server, ADM_job_t job, ADM_dataset_t input, ADM_dataset_t output, - bool should_stream, ...); + int should_stream, ...); /** @@ -441,7 +441,7 @@ ADM_finalize_data_operation(ADM_server_t server, ADM_job_t job, ADM_return_t ADM_link_transfer_to_data_operation(ADM_server_t server, ADM_job_t job, ADM_data_operation_t op, - ADM_transfer_t transfer, bool should_stream, + ADM_transfer_t transfer, int should_stream, ...); -- GitLab From 96969531a49c3863cf14842f61e2f2a55875ca8b Mon Sep 17 00:00:00 2001 From: Alberto Miranda Date: Mon, 27 Feb 2023 12:18:28 +0100 Subject: [PATCH 06/10] Empty structs have different sizes in C and C++ --- src/lib/scord/types.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/lib/scord/types.h b/src/lib/scord/types.h index 487b80ec..ed5bc8e0 100644 --- a/src/lib/scord/types.h +++ b/src/lib/scord/types.h @@ -87,6 +87,7 @@ typedef struct adm_job_resources* ADM_job_resources_t; /** I/O stats from a job */ typedef struct { // TODO: empty for now + uint32_t placeholder; } ADM_job_stats_t; /** The I/O requirements for a job */ @@ -212,6 +213,7 @@ typedef struct adm_data_operation* ADM_data_operation_t; /** A data operation status */ typedef struct { // TODO: empty for now + uint32_t placeholder; } ADM_data_operation_status_t; -- GitLab From 788b8a2d65e59f676fb30e1283b464ecda2cebac Mon Sep 17 00:00:00 2001 From: Alberto Miranda Date: Mon, 27 Feb 2023 12:56:25 +0100 Subject: [PATCH 07/10] Fix tl::expected hash --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 48cfdfb8..6e427bed 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -253,7 +253,7 @@ set(EXPECTED_BUILD_TESTS OFF) FetchContent_Declare( expected GIT_REPOSITORY https://github.com/TartanLlama/expected - GIT_TAG 9d812f5e3b5bc68023f6e31d29489cdcaacef606 # latest + GIT_TAG 3e304a4bdd00feef8d41f5b388c37bd9d6108025 # latest GIT_SHALLOW ON GIT_PROGRESS ON ) -- GitLab From eb1ef6e0d19f1ab500ffff0087f3d127e7a3d5ae Mon Sep 17 00:00:00 2001 From: Alberto Miranda Date: Mon, 27 Feb 2023 14:12:44 +0100 Subject: [PATCH 08/10] Update docker image for 0.2.0-wip --- docker/0.2.0-wip/Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docker/0.2.0-wip/Dockerfile b/docker/0.2.0-wip/Dockerfile index 2250ffce..1335f0af 100644 --- a/docker/0.2.0-wip/Dockerfile +++ b/docker/0.2.0-wip/Dockerfile @@ -15,6 +15,8 @@ RUN apt-get update && \ automake \ gcc \ g++ \ + clang \ + libc++-dev \ procps \ # AGIOS dependencies libconfig-dev \ -- GitLab From 113d5a5447da97657e6ea4b139d2016781a3414a Mon Sep 17 00:00:00 2001 From: Alberto Miranda Date: Mon, 27 Feb 2023 14:12:24 +0100 Subject: [PATCH 09/10] CI: Add jobs for Clang --- .gitlab-ci.yml | 42 ++++++++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1810aab8..abc4566d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -6,7 +6,7 @@ stages: - build - test -release_build: +gcc-release: stage: build script: - export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64 @@ -26,7 +26,7 @@ release_build: .. - make -j$(nproc) install -debug_build: +gcc-debug: stage: build script: - export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64 @@ -34,7 +34,7 @@ debug_build: - mkdir -p build - cd build - cmake - -DCMAKE_BUILD_TYPE:STRING=ASan + -DCMAKE_BUILD_TYPE:STRING=Debug -DCMAKE_PREFIX_PATH:STRING=/usr/local -DCMAKE_INSTALL_PREFIX:STRING=${CI_PROJECT_DIR}/compiled -DSCORD_BUILD_EXAMPLES:BOOL=ON @@ -46,6 +46,7 @@ debug_build: .. - make -j$(nproc) install artifacts: + expire_in: 2 days paths: - compiled/bin/ - compiled/etc/ @@ -54,18 +55,35 @@ debug_build: - build/tests/ - build/src/scord/scord - build/src/scord-ctl/scord-ctl - # depending on your build setup it's most likely a good idea to cache outputs to reduce the build time - cache: - key: $CI_COMMIT_REF_SLUG - paths: - - build/ - - compiled/bin - - compiled/etc + +clang: + stage: build + parallel: + matrix: + - CMAKE_BUILD_TYPE: [ Debug, Release ] + script: + - export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64 + - export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/local/lib64/pkgconfig + - mkdir -p build + - cd build + - cmake + -DCMAKE_CXX_COMPILER=/usr/bin/clang++ + -DCMAKE_C_COMPILER=/usr/bin/clang + -DCMAKE_PREFIX_PATH:STRING=/usr/local + -DCMAKE_INSTALL_PREFIX:STRING=${CI_PROJECT_DIR}/compiled + -DSCORD_BUILD_EXAMPLES:BOOL=ON + -DSCORD_BUILD_TESTS:BOOL=ON + -DSCORD_TRANSPORT_LIBRARY=libfabric + -DSCORD_TRANSPORT_PROTOCOL=ofi+tcp + -DSCORD_BIND_ADDRESS=127.0.0.1 + -DSCORD_BIND_PORT=52000 + .. + - make -j$(nproc) install # run RPC tests using the binary built before rpc: stage: test - needs: [debug_build] + needs: [ gcc-debug ] script: - export ASAN_OPTIONS=detect_odr_violation=0:detect_leaks=0 - export LSAN_OPTIONS=verbosity=1:log_threads=1:suppressions=${CI_PROJECT_DIR}/tests/LSanSuppress.supp @@ -82,7 +100,7 @@ rpc: # run unit tests unit: stage: test - needs: [debug_build] + needs: [ gcc-debug ] script: - export ASAN_OPTIONS=detect_odr_violation=0 - export LSAN_OPTIONS=verbosity=1:log_threads=1:suppressions=${CI_PROJECT_DIR}/tests/LSanSuppress.supp -- GitLab From 0d8d5b60d6af7124033a7003fe3fe58b893785bb Mon Sep 17 00:00:00 2001 From: Alberto Miranda Date: Mon, 27 Feb 2023 14:33:35 +0100 Subject: [PATCH 10/10] Remove -stdlib=libc++ from CMakeLists.txt --- CMakeLists.txt | 5 ----- 1 file changed, 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6e427bed..e29bd5ca 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -303,11 +303,6 @@ find_package(RedisPlusPlus 1.3.3 REQUIRED) add_compile_options("-Wall" "-Wextra" "-Werror" "$<$:-O3>") add_compile_definitions("$<$:SCORD_DEBUG_BUILD>") add_compile_definitions("$<$:__LOGGER_ENABLE_DEBUG__>") -if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - add_compile_options("-stdlib=libc++") -else () - # nothing special for gcc at the moment -endif () add_subdirectory(etc) add_subdirectory(src) -- GitLab