Skip to content

Commit

Permalink
CMake cleanup and support for building multiple tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
mwaxmonsky committed Jan 31, 2025
1 parent b447039 commit d6218a3
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 57 deletions.
4 changes: 2 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -69,12 +69,12 @@ endif()

#------------------------------------------------------------------------------
# Set OpenMP flags for C/C++/Fortran
if (CCPP_FRAMEWORK_ENABLE_OPENMP)
if(CCPP_FRAMEWORK_ENABLE_OPENMP)
find_package(OpenMP REQUIRED)
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
set (CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${OpenMP_Fortran_FLAGS}")
endif (CCPP_FRAMEWORK_ENABLE_OPENMP)
endif()

#------------------------------------------------------------------------------
# Set a default build type if none was specified
Expand Down
10 changes: 7 additions & 3 deletions cmake/ccpp_capgen.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ function(ccpp_capgen)

# list(APPEND CCPP_CAPGEN_CMD_LIST "${CMAKE_SOURCE_DIR}/scripts/ccpp_capgen.py")

unset(CCPP_CAPGEN_CMD_LIST)
if(DEFINED arg_CAPGEN_DEBUG)
list(APPEND CCPP_CAPGEN_CMD_LIST "--debug")
endif()
Expand Down Expand Up @@ -43,6 +44,7 @@ function(ccpp_capgen)
message(STATUS "Running ccpp_capgen: ${CCPP_CAPGEN_CMD}")

list(JOIN CCPP_CAPGEN_CMD_LIST ";" CCPP_CAPGEN_CMAKE_CMD)
unset(CAPGEN_OUT)
execute_process(COMMAND "${CMAKE_SOURCE_DIR}/scripts/ccpp_capgen.py" ${CCPP_CAPGEN_CMAKE_CMD}
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
OUTPUT_VARIABLE CAPGEN_OUT
Expand All @@ -55,9 +57,9 @@ function(ccpp_capgen)
string(FIND "${CAPGEN_OUT}" "Variables of type ccpp_constituent_properties_t only allowed in register phase" ERROR_INDEX)

if (ERROR_INDEX GREATER -1)
MESSAGE(STATUS "Capgen build produces expected error message.")
message(STATUS "Capgen build produces expected error message.")
else()
MESSAGE(FATAL_ERROR "CCPP cap generation did not generate expected error. Expected 'Variables of type ccpp_cosntituent_properties_t only allowed in register phase.")
message(FATAL_ERROR "CCPP cap generation did not generate expected error. Expected 'Variables of type ccpp_cosntituent_properties_t only allowed in register phase.")
endif()
else()
if(RES EQUAL 0)
Expand Down Expand Up @@ -92,7 +94,9 @@ function(ccpp_datafile)
string(REPLACE ";" " " CCPP_DATAFILE_CMD_SEPERATED "${CCPP_DATAFILE_CMD}")
message(STATUS "Running ccpp_datafile.py command: ${CCPP_DATAFILE_CMD_SEPERATED}")

execute_process(COMMAND ${CCPP_DATAFILE_CMD}
unset(CCPP_CAPS)
list(JOIN CCPP_DATAFILE_CMD ";" CCPP_DATAFILE_CMAKE_CMD)
execute_process(COMMAND ${CCPP_DATAFILE_CMAKE_CMD}
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
OUTPUT_VARIABLE CCPP_CAPS
RESULT_VARIABLE RES
Expand Down
4 changes: 3 additions & 1 deletion test/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
# add_subdirectory(advection_test)

add_subdirectory(advection_test)
add_subdirectory(capgen_test)
# add_subdirectory(ddthost_test)
# add_subdirectory(var_compatability_test)
48 changes: 18 additions & 30 deletions test/advection_test/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,22 +1,15 @@

#------------------------------------------------------------------------------
#
# Set where the CCPP Framework lives
#
#------------------------------------------------------------------------------
get_filename_component(TEST_ROOT "${CMAKE_SOURCE_DIR}" DIRECTORY)
get_filename_component(CCPP_ROOT "${TEST_ROOT}" DIRECTORY)
#------------------------------------------------------------------------------
#
# Create list of SCHEME_FILES, HOST_FILES, and SUITE_FILES
# Paths should be relative to CMAKE_SOURCE_DIR (this file's directory)
#
#------------------------------------------------------------------------------
list(APPEND SCHEME_FILES "cld_suite_files.txt")
list(APPEND SCHEME_FILES_ERROR "cld_suite_files_error.txt")
list(APPEND HOST_FILES "test_host_data" "test_host_mod")
list(APPEND SUITE_FILES "cld_suite.xml")
list(APPEND SUITE_FILES_ERROR "cld_suite_error.xml")
set(SCHEME_FILES "cld_suite_files.txt")
set(SCHEME_FILES_ERROR "cld_suite_files_error.txt")
set(HOST_FILES "test_host_data" "test_host_mod")
set(SUITE_FILES "cld_suite.xml")
set(SUITE_FILES_ERROR "cld_suite_error.xml")
# HOST is the name of the executable we will build.
# We assume there are files ${HOST}.meta and ${HOST}.F90 in CMAKE_SOURCE_DIR
set(HOST "test_host")
Expand All @@ -28,35 +21,34 @@ set(HOST "test_host")
#------------------------------------------------------------------------------

# By default, generated caps go in ccpp subdir
set(CCPP_CAP_FILES "${CMAKE_CURRENT_BINARY_DIR}/ccpp" CACHE
STRING "Location of CCPP-generated cap files")
set(CCPP_CAP_FILES "${CMAKE_CURRENT_BINARY_DIR}/ccpp")

set(CCPP_FRAMEWORK ${CMAKE_SOURCE_DIR}/scripts)

# Create metadata and source file lists
foreach(FILE ${SCHEME_FILES})
file(STRINGS ${FILE} FILENAMES)
file(STRINGS "${FILE}" FILENAMES)
list(TRANSFORM FILENAMES REPLACE ".meta" ".F90")
foreach(filename ${FILENAMES})
file(REAL_PATH "${filename}" ABS_PATH)
list(APPEND LIBRARY_LIST ${ABS_PATH})
list(APPEND ADVECTION_LIBRARY_LIST "${ABS_PATH}")
endforeach()
endforeach()

foreach(FILE ${HOST_FILES})
list(APPEND HOST_METADATA "${FILE}.meta")
list(APPEND ADVECTION_HOST_METADATA "${FILE}.meta")
# target_sources prefers absolute pathnames
file(REAL_PATH "${FILE}.F90" ABS_PATH)
list(APPEND LIBRARY_LIST "${ABS_PATH}")
list(APPEND ADVECTION_LIBRARY_LIST "${ABS_PATH}")
endforeach()

list(APPEND HOST_METADATA "${HOST}.meta")
list(APPEND ADVECTION_HOST_METADATA "${HOST}.meta")

# Run ccpp_capgen that we expect to fail
ccpp_capgen(CAPGEN_EXPECT_THROW_ERROR ON
CAPGEN_DEBUG ON
VERBOSITY ${CCPP_VERBOSITY}
HOSTFILES ${HOST_METADATA}
HOSTFILES ${ADVECTION_HOST_METADATA}
SCHEMEFILES ${SCHEME_FILES_ERROR}
SUITES ${SUITE_FILES_ERROR}
HOST_NAME "test_host"
Expand All @@ -65,7 +57,7 @@ ccpp_capgen(CAPGEN_EXPECT_THROW_ERROR ON
# Run ccpp_capgen
ccpp_capgen(CAPGEN_DEBUG ON
VERBOSITY ${CCPP_VERBOSITY}
HOSTFILES ${HOST_METADATA}
HOSTFILES ${ADVECTION_HOST_METADATA}
SCHEMEFILES ${SCHEME_FILES}
SUITES ${SUITE_FILES}
HOST_NAME "test_host"
Expand All @@ -75,14 +67,10 @@ ccpp_capgen(CAPGEN_DEBUG ON
ccpp_datafile(DATATABLE "${CCPP_CAP_FILES}/datatable.xml"
REPORT_NAME "--ccpp-files")

list(APPEND LIBRARY_LIST ${CCPP_CAPS_LIST})
add_library(TESTLIB OBJECT ${LIBRARY_LIST})
add_executable(${HOST} ${HOST}.F90 $<TARGET_OBJECTS:TESTLIB>)

target_include_directories(${HOST} PUBLIC ${CCPP_CAP_FILES})
list(APPEND ADVECTION_LIBRARY_LIST ${CCPP_CAPS_LIST})
add_library(ADVECTION_TESTLIB OBJECT ${ADVECTION_LIBRARY_LIST})
add_executable(advection_${HOST} ${HOST}.F90 $<TARGET_OBJECTS:ADVECTION_TESTLIB>)

set_target_properties(${HOST} PROPERTIES
COMPILE_FLAGS "${CMAKE_Fortran_FLAGS}"
LINK_FLAGS "${CMAKE_Fortran_FLAGS}")
target_include_directories(advection_${HOST} PRIVATE ${CCPP_CAP_FILES})

add_test(NAME advection_${HOST} COMMAND ${HOST})
add_test(NAME advection_${HOST} COMMAND advection_${HOST})
37 changes: 16 additions & 21 deletions test/capgen_test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,16 @@
# Paths should be relative to CMAKE_SOURCE_DIR (this file's directory)
#
#------------------------------------------------------------------------------
list(APPEND SCHEME_FILES "temp_scheme_files.txt" "ddt_suite_files.txt")
list(APPEND HOST_FILES "test_host_data" "test_host_mod")
list(APPEND SUITE_FILES "ddt_suite.xml" "temp_suite.xml")
set(SCHEME_FILES "temp_scheme_files.txt" "ddt_suite_files.txt")
set(HOST_FILES "test_host_data" "test_host_mod")
set(SUITE_FILES "ddt_suite.xml" "temp_suite.xml")

# HOST is the name of the executable we will build.
# We assume there are files ${HOST}.meta and ${HOST}.F90 in CMAKE_SOURCE_DIR
set(HOST "test_host")

# By default, generated caps go in ccpp subdir
set(CCPP_CAP_FILES "${CMAKE_CURRENT_BINARY_DIR}/ccpp" CACHE
STRING "Location of CCPP-generated cap files")
set(CCPP_CAP_FILES "${CMAKE_CURRENT_BINARY_DIR}/ccpp")

set(CCPP_FRAMEWORK ${CMAKE_SOURCE_DIR}/scripts)

Expand All @@ -24,24 +23,24 @@ foreach(SCHEME_FILE ${SCHEME_FILES})
file(STRINGS ${SCHEME_FILE} FILENAMES)
foreach(filename ${FILENAMES})
string(REPLACE ".meta" ".F90" TEMP "${filename}")
file(REAL_PATH ${TEMP} ABS_PATH)
list(APPEND LIBRARY_LIST ${ABS_PATH})
file(REAL_PATH "${TEMP}" ABS_PATH)
list(APPEND CAPGEN_LIBRARY_LIST "${ABS_PATH}")
endforeach()
endforeach()

foreach(FILE ${HOST_FILES})
list(APPEND HOST_METADATA "${FILE}.meta")
list(APPEND CAPGEN_HOST_METADATA "${FILE}.meta")
# target_sources prefers absolute pathnames
file(REAL_PATH "${FILE}.F90" ABS_PATH)
list(APPEND LIBRARY_LIST "${ABS_PATH}")
endforeach(FILE)
list(APPEND CAPGEN_LIBRARY_LIST "${ABS_PATH}")
endforeach()

list(APPEND HOST_METADATA "${HOST}.meta")
list(APPEND CAPGEN_HOST_METADATA "${HOST}.meta")

message(STATUS "CCPP_VERBOSITY = ${CCPP_VERBOSITY}")
ccpp_capgen(CAPGEN_DEBUG ON
VERBOSITY ${CCPP_VERBOSITY}
HOSTFILES ${HOST_METADATA}
HOSTFILES ${CAPGEN_HOST_METADATA}
SCHEMEFILES ${SCHEME_FILES}
SUITES ${SUITE_FILES}
HOST_NAME "test_host"
Expand All @@ -52,14 +51,10 @@ ccpp_datafile(DATATABLE "${CCPP_CAP_FILES}/datatable.xml"
REPORT_NAME "--ccpp-files")

message(STATUS "Adding ${CCPP_CAPS_LIST} to library list")
list(APPEND LIBRARY_LIST ${CCPP_CAPS_LIST})
add_library(TESTLIB OBJECT ${LIBRARY_LIST})
add_executable(${HOST} ${HOST}.F90 $<TARGET_OBJECTS:TESTLIB>)

target_include_directories(${HOST} PRIVATE ${CCPP_CAP_FILES})
list(APPEND CAPGEN_LIBRARY_LIST ${CCPP_CAPS_LIST})
add_library(CAPGEN_TESTLIB OBJECT ${CAPGEN_LIBRARY_LIST})
add_executable(capgen_${HOST} ${HOST}.F90 $<TARGET_OBJECTS:CAPGEN_TESTLIB>)

set_target_properties(${HOST} PROPERTIES
COMPILE_FLAGS "${CMAKE_Fortran_FLAGS}"
LINK_FLAGS "${CMAKE_Fortran_FLAGS}")
target_include_directories(capgen_${HOST} PRIVATE ${CCPP_CAP_FILES})

add_test(NAME capgen_${HOST} COMMAND ${HOST})
add_test(NAME capgen_${HOST} COMMAND capgen_${HOST})

0 comments on commit d6218a3

Please sign in to comment.