diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index da3ad918..a509298b 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -22,6 +22,8 @@ jobs: strategy: matrix: os: [ubuntu-22.04] + std: [20, 17] + runs-on: ${{ matrix.os }} @@ -57,5 +59,5 @@ jobs: - name: Build MUDA run: | - cmake --preset ci-release - cmake --build --preset ci-release --parallel 4 + cmake --preset ci-release-${{ matrix.std }} + cmake --build --preset ci-release-${{ matrix.std }} --parallel 4 diff --git a/CMakePresets.json b/CMakePresets.json index bc16b324..37b1d25f 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -17,32 +17,54 @@ "MUDA_FORCE_CHECK": "ON", "MUDA_WITH_CHECK": "ON", "MUDA_WITH_COMPUTE_GRAPH": "ON", - "MUDA_WITH_NVTX3": "ON" + "MUDA_WITH_NVTX3": "OFF" } }, { - "name": "ci-release", - "displayName": "CI-Release Configuration", + "name": "ci-release-20", + "displayName": "CI-Release Configuration (C++20)", "inherits": ["config-base"], "description": "Configuration for CI builds", "cacheVariables": { "MUDA_BUILD_TEST": "ON", "MUDA_BUILD_EXAMPLE": "OFF", "CMAKE_CUDA_ARCHITECTURES": "89", - "CMAKE_BUILD_TYPE": "Release" + "CMAKE_BUILD_TYPE": "Release", + "MUDA_APP_CXX_STANDARD": "20" + } + }, + { + "name": "ci-release-17", + "displayName": "CI-Release Configuration (C++17)", + "inherits": ["config-base"], + "description": "Configuration for CI builds", + "cacheVariables": { + "MUDA_BUILD_TEST": "ON", + "MUDA_BUILD_EXAMPLE": "OFF", + "CMAKE_CUDA_ARCHITECTURES": "89", + "CMAKE_BUILD_TYPE": "Release", + "MUDA_APP_CXX_STANDARD": "17" } } ], "buildPresets": [ { - "name": "ci-release", - "configurePreset": "ci-release" + "name": "ci-release-20", + "configurePreset": "ci-release-20" + }, + { + "name": "ci-release-17", + "configurePreset": "ci-release-17" } ], "testPresets": [ { - "name": "ci-release", - "configurePreset": "ci-release" + "name": "ci-release-20", + "configurePreset": "ci-release-20" + }, + { + "name": "ci-release-17", + "configurePreset": "ci-release-17" } ] } diff --git a/cmake/options.cmake b/cmake/options.cmake index 34528bf6..4fe458c2 100644 --- a/cmake/options.cmake +++ b/cmake/options.cmake @@ -7,6 +7,7 @@ option(MUDA_WITH_NVTX3 "turn on nividia tools extension library" OFF) # build targets: option(MUDA_BUILD_EXAMPLE "build muda examples. if you want to see how to use muda, you could enable this option." ON) option(MUDA_BUILD_TEST "build muda test. if you're the developer, you could enable this option." OFF) +option(MUDA_APP_CXX_STANDARD "set c++ standard for muda app(test/example)" 20) # short cut option(MUDA_DEV "build muda example and unit test. if you're the developer, you could enable this option." OFF) diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt index 9f21716d..08403356 100644 --- a/example/CMakeLists.txt +++ b/example/CMakeLists.txt @@ -13,7 +13,7 @@ file(GLOB_RECURSE SOURCE_FILES add_executable(muda_example) target_sources(muda_example PRIVATE ${SOURCE_FILES} ${MUDA_HEADER_FILES}) -target_compile_features(muda_example PRIVATE cxx_std_20) +target_compile_features(muda_example PRIVATE "cxx_std_${MUDA_APP_CXX_STANDARD}") set_target_properties(muda_example PROPERTIES CUDA_SEPARABLE_COMPILATION ON) # target_link_libraries(muda_example PRIVATE fmt::fmt-header-only) diff --git a/src/muda/buffer/details/buffer_2d_view.inl b/src/muda/buffer/details/buffer_2d_view.inl index ac06d127..cd40469a 100644 --- a/src/muda/buffer/details/buffer_2d_view.inl +++ b/src/muda/buffer/details/buffer_2d_view.inl @@ -111,10 +111,12 @@ template MUDA_GENERIC cudaPitchedPtr Buffer2DViewT::cuda_pitched_ptr() const MUDA_NOEXCEPT { // don't use make_cudaPitchedPtr (__host__ only function) - return cudaPitchedPtr{.ptr = remove_const(m_data), - .pitch = remove_const(m_pitch_bytes), - .xsize = m_origin_width * sizeof(T), - .ysize = m_origin_height}; + cudaPitchedPtr R; + R.ptr = remove_const(m_data); + R.pitch = remove_const(m_pitch_bytes); + R.xsize = m_origin_width * sizeof(T); + R.ysize = m_origin_height; + return R; } template diff --git a/src/muda/buffer/details/buffer_3d_view.inl b/src/muda/buffer/details/buffer_3d_view.inl index 32931666..7a0de150 100644 --- a/src/muda/buffer/details/buffer_3d_view.inl +++ b/src/muda/buffer/details/buffer_3d_view.inl @@ -112,10 +112,12 @@ MUDA_GENERIC auto Buffer3DViewT::cuda_pitched_ptr() const MUDA_NOEXC -> cudaPitchedPtr { // don't use make_cudaPitchedPtr (__host__ only function) - return cudaPitchedPtr{.ptr = remove_const(m_data), - .pitch = remove_const(m_pitch_bytes), - .xsize = m_origin_width * sizeof(T), - .ysize = m_origin_height}; + cudaPitchedPtr R; + R.ptr = remove_const(m_data); + R.pitch = remove_const(m_pitch_bytes); + R.xsize = m_origin_width * sizeof(T); + R.ysize = m_origin_height; + return R; } template diff --git a/src/muda/ext/linear_system/details/device_dense_matrix.inl b/src/muda/ext/linear_system/details/device_dense_matrix.inl index 014707d2..6ecb3cdc 100644 --- a/src/muda/ext/linear_system/details/device_dense_matrix.inl +++ b/src/muda/ext/linear_system/details/device_dense_matrix.inl @@ -105,13 +105,13 @@ DeviceDenseMatrix& DeviceDenseMatrix::operator=(const Eigen::MatrixX template DenseMatrixView DeviceDenseMatrix::T() { - return DenseMatrixView{m_data, m_row, m_col, true, m_sym}; + return DenseMatrixView{m_data, m_row, m_col, true, m_sym}; } template CDenseMatrixView DeviceDenseMatrix::T() const { - return CDenseMatrixView{m_data, m_row, m_col, true, m_sym}; + return CDenseMatrixView{m_data, m_row, m_col, true, m_sym}; } template diff --git a/test/eigen_test/CMakeLists.txt b/test/eigen_test/CMakeLists.txt index ea278c2c..ea5f5e2d 100644 --- a/test/eigen_test/CMakeLists.txt +++ b/test/eigen_test/CMakeLists.txt @@ -3,7 +3,7 @@ find_package(Eigen3 REQUIRED) file(GLOB_RECURSE SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/*.cu" "${CMAKE_CURRENT_SOURCE_DIR}/*.h") add_executable(muda_eigen_test) target_sources(muda_eigen_test PRIVATE ${SOURCE} ${MUDA_HEADER_FILES}) -target_compile_features(muda_eigen_test PRIVATE cxx_std_20) +target_compile_features(muda_eigen_test PRIVATE "cxx_std_${MUDA_APP_CXX_STANDARD}") set_target_properties(muda_eigen_test PROPERTIES CUDA_SEPARABLE_COMPILATION ON) target_include_directories(muda_eigen_test PRIVATE "${PROJECT_SOURCE_DIR}/test" diff --git a/test/linear_system_test/CMakeLists.txt b/test/linear_system_test/CMakeLists.txt index bbe5fd7b..19e03672 100644 --- a/test/linear_system_test/CMakeLists.txt +++ b/test/linear_system_test/CMakeLists.txt @@ -6,7 +6,7 @@ file(GLOB_RECURSE SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/*.h") add_executable(muda_linear_system_test) target_sources(muda_linear_system_test PRIVATE ${SOURCE} ${MUDA_HEADER_FILES}) -target_compile_features(muda_linear_system_test PRIVATE cxx_std_20) +target_compile_features(muda_linear_system_test PRIVATE "cxx_std_${MUDA_APP_CXX_STANDARD}") set_target_properties(muda_linear_system_test PROPERTIES CUDA_SEPARABLE_COMPILATION ON) target_include_directories(muda_linear_system_test PRIVATE "${PROJECT_SOURCE_DIR}/test" diff --git a/test/spgrid_test/CMakeLists.txt b/test/spgrid_test/CMakeLists.txt index 61e36ccb..fac70865 100644 --- a/test/spgrid_test/CMakeLists.txt +++ b/test/spgrid_test/CMakeLists.txt @@ -7,7 +7,7 @@ file(GLOB_RECURSE SOURCE add_executable(muda_spgrid_test) target_sources(muda_spgrid_test PRIVATE ${SOURCE} ${MUDA_HEADER_FILES}) -target_compile_features(muda_spgrid_test PRIVATE cxx_std_20) +target_compile_features(muda_spgrid_test PRIVATE "cxx_std_${MUDA_APP_CXX_STANDARD}") set_target_properties(muda_spgrid_test PROPERTIES CUDA_SEPARABLE_COMPILATION ON) target_include_directories(muda_spgrid_test PRIVATE "${PROJECT_SOURCE_DIR}/test" diff --git a/test/unit_test/CMakeLists.txt b/test/unit_test/CMakeLists.txt index 79fb23a6..54c68991 100644 --- a/test/unit_test/CMakeLists.txt +++ b/test/unit_test/CMakeLists.txt @@ -6,7 +6,7 @@ file(GLOB_RECURSE SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/*.h") add_executable(muda_unit_test) target_sources(muda_unit_test PRIVATE ${SOURCE} ${MUDA_HEADER_FILES}) -target_compile_features(muda_unit_test PRIVATE cxx_std_20) +target_compile_features(muda_unit_test PRIVATE "cxx_std_${MUDA_APP_CXX_STANDARD}") set_target_properties(muda_unit_test PROPERTIES CUDA_SEPARABLE_COMPILATION ON) target_include_directories(muda_unit_test PRIVATE "${PROJECT_SOURCE_DIR}/test"