Skip to content

Commit

Permalink
Merge pull request #56 from ecmwf-ifs/naml-gpu-interface-libs
Browse files Browse the repository at this point in the history
CMake: Export OpenACC symbols via INTERFACE target linking
  • Loading branch information
awnawab authored Jul 22, 2024
2 parents eefb5db + dd6e626 commit 7df1b88
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 22 deletions.
4 changes: 2 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -189,8 +189,8 @@ foreach(prec ${precisions})
TARGET ${LIBNAME}_${prec}
SOURCES ${prec_srcs} $<TARGET_OBJECTS:${LIBNAME}>
DEFINITIONS $<$<NOT:${fiat_FOUND}>:${FIELD_API_DEFINITIONS}>
PUBLIC_LIBS
$<${HAVE_ACC}:OpenACC::OpenACC_Fortran>
INTERFACE_LIBS
$<${HAVE_ACC}:OpenACC::OpenACC_Fortran>
PRIVATE_LIBS
$<${fiat_FOUND}:fiat>
$<${fiat_FOUND}:parkind_${prec}>
Expand Down
50 changes: 30 additions & 20 deletions tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,14 @@ ecbuild_add_test(
TARGET main.x
SOURCES main.F90
LIBS
${LIBNAME_PREC}
parkind_${DEFAULT_PRECISION}
fiat
OpenMP::OpenMP_Fortran
${LIBNAME_PREC}
parkind_${DEFAULT_PRECISION}
fiat
OpenMP::OpenMP_Fortran
$<${HAVE_ACC}:OpenACC::OpenACC_Fortran>
LINKER_LANGUAGE Fortran
)
target_link_options( main.x PRIVATE $<${HAVE_CUDA}:-gpu=pinned> )
target_link_options( main.x PRIVATE $<${HAVE_CUDA}:-cuda;-gpu=pinned> )
target_compile_definitions( main.x PRIVATE $<${HAVE_CUDA}:_CUDA> )

## Unit tests
Expand Down Expand Up @@ -99,7 +100,7 @@ set(ABOR1_TEST_FILES
set(omp_num_threads 8)

foreach(TEST_FILE ${TEST_FILES})
get_filename_component(TEST_NAME ${TEST_FILE} NAME_WE)
get_filename_component(TEST_NAME ${TEST_FILE} NAME_WE)
ecbuild_add_test(
TARGET ${TEST_NAME}.x
SOURCES ${TEST_FILE}
Expand All @@ -108,6 +109,7 @@ foreach(TEST_FILE ${TEST_FILES})
parkind_${DEFAULT_PRECISION}
fiat
OpenMP::OpenMP_Fortran
$<${HAVE_ACC}:OpenACC::OpenACC_Fortran>
LINKER_LANGUAGE Fortran
OMP ${omp_num_threads}
)
Expand All @@ -116,7 +118,7 @@ foreach(TEST_FILE ${TEST_FILES})
PROPERTIES Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/include/tests
)

target_link_options( ${TEST_NAME}.x PRIVATE $<${HAVE_CUDA}:-gpu=pinned> )
target_link_options( ${TEST_NAME}.x PRIVATE $<${HAVE_CUDA}:-cuda;-gpu=pinned> )
target_compile_definitions( ${TEST_NAME}.x PRIVATE $<${HAVE_CUDA}:_CUDA> )

if( DEFAULT_PRECISION MATCHES sp )
Expand All @@ -125,24 +127,28 @@ foreach(TEST_FILE ${TEST_FILES})
endforeach()

foreach(FAILING_TEST_FILE ${FAILING_TEST_FILES})
get_filename_component(FAILING_TEST_NAME ${FAILING_TEST_FILE} NAME_WE)
add_executable(${FAILING_TEST_NAME}.x ${FAILING_TEST_FILE})
target_link_libraries(${FAILING_TEST_NAME}.x ${LIBNAME_PREC} parkind_${DEFAULT_PRECISION} fiat OpenMP::OpenMP_Fortran)
set_target_properties(${FAILING_TEST_NAME}.x PROPERTIES LINKER_LANGUAGE Fortran)
add_test(NAME ${FAILING_TEST_NAME} COMMAND ${FAILING_TEST_NAME}.x)
set_property(TEST ${FAILING_TEST_NAME} PROPERTY WILL_FAIL TRUE)
set_property(TEST ${FAILING_TEST_NAME} PROPERTY ENVIRONMENT "OMP_NUM_THREADS=${omp_num_threads}")
get_filename_component(FAILING_TEST_NAME ${FAILING_TEST_FILE} NAME_WE)
add_executable(${FAILING_TEST_NAME}.x ${FAILING_TEST_FILE})
target_link_libraries(${FAILING_TEST_NAME}.x PRIVATE ${LIBNAME_PREC} parkind_${DEFAULT_PRECISION} fiat)
target_link_libraries(${FAILING_TEST_NAME}.x PRIVATE OpenMP::OpenMP_Fortran)
target_link_libraries(${FAILING_TEST_NAME}.x PRIVATE $<${HAVE_ACC}:OpenACC::OpenACC_Fortran>)
set_target_properties(${FAILING_TEST_NAME}.x PROPERTIES LINKER_LANGUAGE Fortran)
add_test(NAME ${FAILING_TEST_NAME} COMMAND ${FAILING_TEST_NAME}.x)
set_property(TEST ${FAILING_TEST_NAME} PROPERTY WILL_FAIL TRUE)
set_property(TEST ${FAILING_TEST_NAME} PROPERTY ENVIRONMENT "OMP_NUM_THREADS=${omp_num_threads}")
target_link_options( ${FAILING_TEST_NAME}.x PRIVATE $<${HAVE_CUDA}:-gpu=pinned> )
target_compile_definitions( ${FAILING_TEST_NAME}.x PRIVATE $<${HAVE_CUDA}:_CUDA> )
endforeach()

foreach(ABOR1_TEST_FILE ${ABOR1_TEST_FILES})
get_filename_component(ABOR1_TEST_NAME ${ABOR1_TEST_FILE} NAME_WE)
add_executable(${ABOR1_TEST_NAME}.x ${ABOR1_TEST_FILE})
target_link_libraries(${ABOR1_TEST_NAME}.x ${LIBNAME_PREC} parkind_${DEFAULT_PRECISION} fiat OpenMP::OpenMP_Fortran)
set_target_properties(${ABOR1_TEST_NAME}.x PROPERTIES LINKER_LANGUAGE Fortran)
add_test(NAME ${ABOR1_TEST_NAME} COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/abor1catcher.sh "./${ABOR1_TEST_NAME}.x")
set_property(TEST ${ABOR1_TEST_NAME} PROPERTY ENVIRONMENT "OMP_NUM_THREADS=${omp_num_threads}")
get_filename_component(ABOR1_TEST_NAME ${ABOR1_TEST_FILE} NAME_WE)
add_executable(${ABOR1_TEST_NAME}.x ${ABOR1_TEST_FILE})
target_link_libraries(${ABOR1_TEST_NAME}.x PRIVATE ${LIBNAME_PREC} parkind_${DEFAULT_PRECISION} fiat)
target_link_libraries(${ABOR1_TEST_NAME}.x PRIVATE OpenMP::OpenMP_Fortran)
target_link_libraries(${ABOR1_TEST_NAME}.x PRIVATE $<${HAVE_ACC}:OpenACC::OpenACC_Fortran>)
set_target_properties(${ABOR1_TEST_NAME}.x PROPERTIES LINKER_LANGUAGE Fortran)
add_test(NAME ${ABOR1_TEST_NAME} COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/abor1catcher.sh "./${ABOR1_TEST_NAME}.x")
set_property(TEST ${ABOR1_TEST_NAME} PROPERTY ENVIRONMENT "OMP_NUM_THREADS=${omp_num_threads}")
target_link_options( ${ABOR1_TEST_NAME}.x PRIVATE $<${HAVE_CUDA}:-gpu=pinned> )
target_compile_definitions( ${ABOR1_TEST_NAME}.x PRIVATE $<${HAVE_CUDA}:_CUDA> )
endforeach()
Expand All @@ -156,9 +162,13 @@ ecbuild_add_test(
fiat
parkind_sp
OpenMP::OpenMP_Fortran
$<${HAVE_ACC}:OpenACC::OpenACC_Fortran>
LINKER_LANGUAGE Fortran
CONDITION ${HAVE_SINGLE_PRECISION}
)
if( HAVE_SINGLE_PRECISION )
target_link_options( init_wrapper_mixed_precision.x PRIVATE $<${HAVE_CUDA}:-cuda> )
endif()

## Test presence of GPUs
add_executable(check_gpu_num.x check_gpu_num.F90)
Expand Down

0 comments on commit 7df1b88

Please sign in to comment.