diff --git a/projects/rocshmem/CMakeLists.txt b/projects/rocshmem/CMakeLists.txt index 773f401160..791fac7944 100644 --- a/projects/rocshmem/CMakeLists.txt +++ b/projects/rocshmem/CMakeLists.txt @@ -70,51 +70,10 @@ option(BUILD_CODE_COVERAGE "Build with code coverage flags (gcc only)" OFF) configure_file(cmake/rocshmem_config.h.in rocshmem_config.h) -############################################################################### -# GLOBAL COMPILE FLAGS -############################################################################### -if (DEFINED ENV{ROCM_PATH}) - set(ROCM_PATH "$ENV{ROCM_PATH}" CACHE STRING "ROCm install directory") -else() - set(ROCM_PATH "/opt/rocm" CACHE STRING "ROCm install directory") -endif() - -if (NOT DEFINED CMAKE_CXX_COMPILER) - set(CMAKE_CXX_COMPILER ${ROCM_PATH}/bin/hipcc) -endif() -set(CMAKE_CXX_EXTENSIONS OFF) -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_CXX_FLAGS_DEBUG "-O0 -ggdb") - -if (BUILD_TESTS_ONLY) - if (DEFINED ENV{ROCSHMEM_HOME}) - set(ROCSHMEM_HOME "$ENV{ROCSHMEM_HOME}") - else() - message("Environment variable ROCSHMEM_HOME is not set.") - message("Assuming that rocSHMEM is installed at ${ROCM_PATH}.") - set(ROCSHMEM_HOME "${ROCM_PATH}") - endif() -endif() - -find_package(ROCM 0.8 REQUIRED PATHS ${ROCM_PATH}) -set(ROCMCHECKS_WARN_TOOLCHAIN_VAR OFF) - -include(cmake/rocm_local_targets.cmake) - -set(DEFAULT_GPUS - gfx90a:xnack-; - gfx90a:xnack+; - gfx942:xnack-; - gfx942:xnack+) - ############################################################################### # PROJECT ############################################################################### -find_package(ROCmCMakeBuildTools) -include(ROCMCreatePackage) -include(ROCMInstallTargets) -include(ROCMCheckTargetIds) +include(${CMAKE_SOURCE_DIR}/cmake/setup_project.cmake) ## Setup VERSION file(READ include/rocshmem/rocshmem.hpp header_text) @@ -125,9 +84,15 @@ else() endif() message(STATUS "rocSHMEM Version: " "${VERSION_STRING}") -rocm_setup_version(VERSION ${VERSION_STRING}) project(rocshmem VERSION ${VERSION_STRING} LANGUAGES CXX) +find_package(ROCmCMakeBuildTools PATHS /opt/rocm) +include(ROCMCreatePackage) +include(ROCMInstallTargets) +include(ROCMCheckTargetIds) + +rocm_setup_version(VERSION ${VERSION_STRING}) + ############################################################################### # CREATE ROCSHMEM LIBRARY ############################################################################### @@ -139,6 +104,14 @@ if (NOT BUILD_TESTS_ONLY) ############################################################################# # SET GPU ARCHITECTURES ############################################################################# + include(cmake/rocm_local_targets.cmake) + + set(DEFAULT_GPUS + gfx90a:xnack-; + gfx90a:xnack+; + gfx942:xnack-; + gfx942:xnack+) + if (BUILD_LOCAL_GPU_TARGET_ONLY) message(STATUS "Building only for local GPU target") if (COMMAND rocm_local_targets) @@ -155,8 +128,8 @@ if (NOT BUILD_TESTS_ONLY) message(STATUS "Checking for ROCm support for GPU targets: " "${GPU_TARGETS}") rocm_check_target_ids(SUPPORTED_GPUS TARGETS ${GPU_TARGETS}) else() - message(WARNING "Unable to check for supported GPU targets. Falling back to default GPUs.") - set(SUPPORTED_GPUS ${DEFAULT_GPUS}) + message(WARNING "Unable to check for supported GPU targets.") + set(SUPPORTED_GPUS ${GPU_TARGETS}) endif() set(COMPILING_TARGETS "${SUPPORTED_GPUS}" CACHE STRING "GPU targets to compile for.") @@ -165,13 +138,12 @@ if (NOT BUILD_TESTS_ONLY) foreach (target ${COMPILING_TARGETS}) list(APPEND offload_flags --offload-arch=${target}) endforeach() - add_compile_options(${offload_flags}) ############################################################################# # PACKAGE DEPENDENCIES ############################################################################# find_package(MPI REQUIRED) - find_package(hip REQUIRED) + find_package(hip REQUIRED PATHS /opt/rocm) find_package(hsa-runtime64 REQUIRED) set(CMAKE_THREAD_PREFER_PTHREAD TRUE) @@ -181,37 +153,32 @@ if (NOT BUILD_TESTS_ONLY) ############################################################################# # LINKING AND INCLUDE DIRECTORIES ############################################################################# + target_compile_options( + ${PROJECT_NAME} + PUBLIC + ${offload_flags} + -fgpu-rdc + ) + target_include_directories( ${PROJECT_NAME} PUBLIC $ $ # rocshmem_config.h $ - ${MPI_CXX_HEADER_DIR} ) target_link_libraries( ${PROJECT_NAME} PUBLIC Threads::Threads - ${MPI_mpi_LIBRARY} - ${MPI_mpicxx_LIBRARY} + MPI::MPI_CXX hip::device hip::host hsa-runtime64::hsa-runtime64 + -fgpu-rdc ) -endif() -############################################################################### -# TEST SUBDIRECTORIES -############################################################################### -add_subdirectory(tests) - -if (BUILD_EXAMPLES) - add_subdirectory(examples) -endif() - -if (NOT BUILD_TESTS_ONLY) ############################################################################# # INSTALL ############################################################################# @@ -252,4 +219,14 @@ if (NOT BUILD_TESTS_ONLY) DESCRIPTION "ROCm OpenSHMEM (rocSHMEM)" MAINTAINER "rocSHMEM Maintainer " ) +endif (NOT BUILD_TESTS_ONLY) + +############################################################################### +# TEST SUBDIRECTORIES +############################################################################### +add_subdirectory(tests) + +if (BUILD_EXAMPLES) + add_subdirectory(examples) endif() + diff --git a/projects/rocshmem/cmake/setup_project.cmake b/projects/rocshmem/cmake/setup_project.cmake new file mode 100644 index 0000000000..d5dfa3ddce --- /dev/null +++ b/projects/rocshmem/cmake/setup_project.cmake @@ -0,0 +1,46 @@ +############################################################################### +# Copyright (c) Advanced Micro Devices, Inc. All rights reserved. +# +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +############################################################################### + +############################################################################### +# DEFAULT BUILD TYPE +############################################################################### +set(CMAKE_BUILD_TYPE "Release" CACHE STRING + "build type: Release, Debug, RelWithDebInfo, MinSizeRel") + +############################################################################### +# GLOBAL COMPILE FLAGS +############################################################################### +foreach (root ${hip_ROOT} $ENV{hip_ROOT} ${ROCM_ROOT} $ENV{ROCM_ROOT} ${ROCM_PATH} $ENV{ROCM_PATH}) + if (IS_DIRECTORY ${root}) + list(PREPEND CMAKE_PREFIX_PATH ${root}) + endif() +endforeach() +if (NOT DEFINED CMAKE_CXX_COMPILER) + find_program(CMAKE_CXX_COMPILER hipcc PATHS /opt/rocm) +endif() +set(CMAKE_CXX_EXTENSIONS OFF) +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_FLAGS_DEBUG "-O0 -ggdb") + diff --git a/projects/rocshmem/examples/CMakeLists.txt b/projects/rocshmem/examples/CMakeLists.txt index d8df62843e..66dcde161b 100644 --- a/projects/rocshmem/examples/CMakeLists.txt +++ b/projects/rocshmem/examples/CMakeLists.txt @@ -21,6 +21,13 @@ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. ############################################################################### +cmake_minimum_required(VERSION 3.16.3 FATAL_ERROR) + +############################################################################### +# PROJECT +############################################################################### +include(${CMAKE_SOURCE_DIR}/cmake/setup_project.cmake) +project(rocshmem_examples VERSION 1.0.0 LANGUAGES CXX) ############################################################################### # SOURCES @@ -34,56 +41,21 @@ set(EXAMPLE_SOURCES rocshmem_init_attr_test.cc ) +find_package(MPI REQUIRED) +find_package(hip REQUIRED PATHS /opt/rocm) +if(NOT TARGET roc::rocshmem) + find_package(rocshmem REQUIRED PATHS /opt/rocm) +endif() + foreach(SOURCE_FILE IN LISTS EXAMPLE_SOURCES) get_filename_component(EXECUTABLE_NAME ${SOURCE_FILE} NAME_WE) add_executable(${EXECUTABLE_NAME} ${SOURCE_FILE}) - if (BUILD_TESTS_ONLY) - find_package(MPI REQUIRED) - - target_include_directories( - ${EXECUTABLE_NAME} - PRIVATE - $ - $ - ) - - foreach (target ${DEFAULT_GPUS}) - list(APPEND offload_flags --offload-arch=${target}) - endforeach() - - target_compile_options( - ${EXECUTABLE_NAME} - PRIVATE - ${offload_flags} - -fgpu-rdc - ) - - target_link_libraries( - ${EXECUTABLE_NAME} - PRIVATE - ${MPI_mpi_LIBRARY} - ${MPI_mpicxx_LIBRARY} - ${offload_flags} - -L${ROCSHMEM_HOME}/lib - -lamdhip64 - -lhsa-runtime64 - -lrocshmem - -fgpu-rdc - ) - else() - target_include_directories( - ${EXECUTABLE_NAME} - PRIVATE - roc::rocshmem - ) - - target_link_libraries( - ${EXECUTABLE_NAME} - PRIVATE - roc::rocshmem - -fgpu-rdc - ) - endif() + target_link_libraries( + ${EXECUTABLE_NAME} + PRIVATE + MPI::MPI_CXX + roc::rocshmem + ) endforeach() diff --git a/projects/rocshmem/scripts/build_configs/ipc_tests_only b/projects/rocshmem/scripts/build_configs/ipc_tests_only index 7caacc5941..41fde20882 100755 --- a/projects/rocshmem/scripts/build_configs/ipc_tests_only +++ b/projects/rocshmem/scripts/build_configs/ipc_tests_only @@ -33,13 +33,10 @@ else install_path=$1 fi -if [ -z $1 ] && [ -z $ROCSHMEM_HOME ] -then - export ROCSHMEM_HOME=/opt/rocm/ -fi - src_path=$(dirname "$(realpath $0)")/../../ +# If as specific rocSHMEM version is required, the recommended approach +# is to set environment variable 'rocshmem_ROOT' cmake \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=$install_path \ diff --git a/projects/rocshmem/tests/functional_tests/CMakeLists.txt b/projects/rocshmem/tests/functional_tests/CMakeLists.txt index df6ccc5980..8df56386b7 100644 --- a/projects/rocshmem/tests/functional_tests/CMakeLists.txt +++ b/projects/rocshmem/tests/functional_tests/CMakeLists.txt @@ -22,21 +22,27 @@ # IN THE SOFTWARE. ############################################################################### -set(TESTS_NAME rocshmem_example_driver) +cmake_minimum_required(VERSION 3.16.3 FATAL_ERROR) + +############################################################################### +# PROJECT +############################################################################### +include(${CMAKE_SOURCE_DIR}/cmake/setup_project.cmake) +project(rocshmem_functional_tests VERSION 1.0.0 LANGUAGES CXX) ############################################################################### # SOURCES ############################################################################### -add_executable(${TESTS_NAME} "") +add_executable(${PROJECT_NAME} "") target_include_directories( - ${TESTS_NAME} + ${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ) target_sources( - ${TESTS_NAME} + ${PROJECT_NAME} PRIVATE barrier_all_tester.cpp sync_tester.cpp @@ -67,50 +73,19 @@ target_sources( ############################################################################### if (BUILD_TESTS_ONLY) find_package(MPI REQUIRED) + find_package(hip REQUIRED PATHS /opt/rocm) + find_package(rocshmem REQUIRED PATHS /opt/rocm) target_include_directories( - ${TESTS_NAME} + ${PROJECT_NAME} PRIVATE $ $ - $ - $ - ) - - foreach (target ${DEFAULT_GPUS}) - list(APPEND offload_flags --offload-arch=${target}) - endforeach() - - target_compile_options( - ${TESTS_NAME} - PRIVATE - ${offload_flags} - -fgpu-rdc - ) - - target_link_libraries( - ${TESTS_NAME} - PRIVATE - ${MPI_mpi_LIBRARY} - ${MPI_mpicxx_LIBRARY} - ${offload_flags} - -L${ROCSHMEM_HOME}/lib - -lamdhip64 - -lhsa-runtime64 - -lrocshmem - -fgpu-rdc - ) -else() - target_include_directories( - ${TESTS_NAME} - PRIVATE - roc::rocshmem - ) - - target_link_libraries( - ${TESTS_NAME} - PRIVATE - roc::rocshmem - -fgpu-rdc ) endif() + +target_link_libraries( + ${PROJECT_NAME} + PRIVATE + roc::rocshmem +) diff --git a/projects/rocshmem/tests/unit_tests/CMakeLists.txt b/projects/rocshmem/tests/unit_tests/CMakeLists.txt index 401b2eda62..3510ccd1d5 100644 --- a/projects/rocshmem/tests/unit_tests/CMakeLists.txt +++ b/projects/rocshmem/tests/unit_tests/CMakeLists.txt @@ -24,38 +24,10 @@ cmake_minimum_required(VERSION 3.16.3 FATAL_ERROR) -set(INSTALL_GTEST OFF CACHE BOOL "" FORCE) - -############################################################################### -# GLOBAL COMPILE FLAGS -############################################################################### -if (NOT DEFINED CMAKE_CXX_COMPILER) - set(CMAKE_CXX_COMPILER /opt/rocm/bin/hipcc) -endif() -set(CMAKE_CXX_EXTENSIONS OFF) -set(CMAKE_CXX_STANDARD 20) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_CXX_FLAGS_DEBUG "-O0 -ggdb") - -############################################################################### -# DEFAULT BUILD TYPE -############################################################################### -if(NOT CMAKE_BUILD_TYPE) - message(STATUS "CMAKE_BUILD_TYPE unspecified: generating Release build") - - set( - CMAKE_BUILD_TYPE - "Release" - CACHE - STRING - "build type: Release, Debug, RelWithDebInfo, MinSizeRel" - FORCE - ) -endif() - ############################################################################### # PROJECT ############################################################################### +include(${CMAKE_SOURCE_DIR}/cmake/setup_project.cmake) project(rocshmem_unit_tests VERSION 1.0.0 LANGUAGES CXX) ############################################################################### @@ -67,7 +39,6 @@ target_include_directories( ${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_SOURCE_DIR}/../../library ) target_sources( @@ -78,7 +49,7 @@ target_sources( hipmalloc_gtest.cpp bin_gtest.cpp binner_gtest.cpp - #bitwise_gtest.cpp # Test is disabled becasue of compilation errors + #bitwise_gtest.cpp # Test is disabled because of compilation errors address_record_gtest.cpp index_strategy_gtest.cpp single_heap_gtest.cpp @@ -107,65 +78,32 @@ endif() ############################################################################### # ROCSHMEM DEPENDENCY ############################################################################### -find_package(hip REQUIRED) +find_package(hip REQUIRED PATHS /opt/rocm) if (BUILD_TESTS_ONLY) find_package(MPI REQUIRED) + find_package(rocshmem REQUIRED PATHS /opt/rocm) target_include_directories( ${PROJECT_NAME} PRIVATE $ $ - $ - $ - ) - - foreach (target ${DEFAULT_GPUS}) - list(APPEND offload_flags --offload-arch=${target}) - endforeach() - - target_compile_options( - ${PROJECT_NAME} - PRIVATE - ${offload_flags} - -fgpu-rdc - ) - - target_link_libraries( - ${PROJECT_NAME} - PRIVATE - ${MPI_mpi_LIBRARY} - ${MPI_mpicxx_LIBRARY} - ${offload_flags} - -L${ROCSHMEM_HOME}/lib - -lamdhip64 - -lhsa-runtime64 - -lrocshmem - -fgpu-rdc - ) -else() - target_include_directories( - ${PROJECT_NAME} - PRIVATE - roc::rocshmem - ) - - target_link_libraries( - ${PROJECT_NAME} - PRIVATE - roc::rocshmem - hip::host - -fgpu-rdc ) endif() +target_link_libraries( + ${PROJECT_NAME} + PRIVATE + roc::rocshmem +) + ############################################################################### # GTEST DEPENDENCY ############################################################################### # These packages are required for the unit tests -find_package(rocprim REQUIRED CONFIG PATHS "${ROCM_PATH}/include/rocprim") -find_package(rocthrust REQUIRED CONFIG PATHS "${ROCM_PATH}/include/rocthrust") +find_package(rocprim REQUIRED PATHS /opt/rocm) +find_package(rocthrust REQUIRED PATHS /opt/rocm) include(FetchContent) @@ -179,6 +117,7 @@ FetchContent_Declare( set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) set(BUILD_GMOCK OFF CACHE BOOL "" FORCE) set(BUILD_GTEST ON CACHE BOOL "" FORCE) +set(INSTALL_GTEST OFF CACHE BOOL "" FORCE) FetchContent_MakeAvailable(googletest)