You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
3.2 KiB
71 lines
3.2 KiB
set(EXENAME odm) |
|
set(ACTIONLISTINC ${CMAKE_CURRENT_BINARY_DIR}/../include/actionlist.h) # Include actions files and define the actions classes list |
|
set(DATALISTINC ${CMAKE_CURRENT_BINARY_DIR}/../include/datalist.h) # Include data sources files and define the data sources classes list |
|
|
|
find_library(netcdf netcdf REQUIRED) |
|
find_package(OpenMP REQUIRED) |
|
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") |
|
|
|
file(GLOB srcs CONFIGURE_DEPENDS *.cpp) |
|
add_executable(${EXENAME} ${srcs} ${ACTIONLISTINC} ${SOURCELISTINC}) |
|
target_include_directories(${EXENAME} PRIVATE ../michlib/michlib ${CMAKE_CURRENT_BINARY_DIR}/../include) |
|
|
|
target_link_libraries(${EXENAME} ${linker_options} ${netcdf} OpenMP::OpenMP_CXX teos) |
|
set_target_properties(${EXENAME} PROPERTIES POSITION_INDEPENDENT_CODE ON) |
|
install(TARGETS ${EXENAME}) |
|
|
|
# Begin generation of actions list |
|
get_target_property(INCS ${EXENAME} INCLUDE_DIRECTORIES) |
|
list(TRANSFORM INCS PREPEND "-I") |
|
|
|
separate_arguments(excluded UNIX_COMMAND "${EXCLUDE_ACTIONS}") |
|
|
|
file(GLOB actfiles RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} CONFIGURE_DEPENDS ../actions/action*.h ../actions-add/action*.h) |
|
foreach(actfile ${actfiles}) |
|
execute_process(COMMAND ${CMAKE_CXX_COMPILER} ${INCS} -E -DGENACTIONLIST ${actfile} OUTPUT_VARIABLE outfull ERROR_VARIABLE err WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) |
|
string(REGEX MATCH "ADD ACTION CLASS: [^ ;\n]+" outstr "${outfull}") |
|
string(REGEX REPLACE ".+: " "" act "${outstr}") |
|
if(NOT (("${act}" EQUAL "") OR ("${act}" IN_LIST excluded))) |
|
message("Action: ${Yellow}${act}${ColorReset} in file ${actfile}") |
|
list(APPEND actlist ${act}) |
|
list(APPEND actfilelist ${actfile}) |
|
endif() |
|
endforeach(actfile) |
|
|
|
list(TRANSFORM actlist PREPEND "Action") |
|
string(REPLACE ";" "," actclist "${actlist}") |
|
file(WRITE ${ACTIONLISTINC} "#define ACTLIST ${actclist}\n") |
|
|
|
foreach(actfile ${actfilelist}) |
|
string(REGEX REPLACE "\.h$" ".cpp" actcpp "${actfile}") |
|
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${actcpp} ) |
|
target_sources(${EXENAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/${actcpp}) |
|
endif() |
|
file(APPEND ${ACTIONLISTINC} "#include \"${actfile}\"\n") |
|
endforeach(actfile) |
|
# End generation of actions list |
|
|
|
# Begin generation of data sources list |
|
separate_arguments(excluded UNIX_COMMAND "${EXCLUDE_SOURCES}") |
|
file(GLOB sourcefiles RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} CONFIGURE_DEPENDS ../sources/*.h ../sources-add/*.h) |
|
foreach(sourcefile ${sourcefiles}) |
|
string(REGEX REPLACE "(\.h$|.*/)" "" source "${sourcefile}") |
|
string(REGEX REPLACE "\.h$" ".cpp" sourcecpp "${sourcefile}") |
|
if(NOT (("${source}" EQUAL "") OR ("${source}" IN_LIST excluded))) |
|
message("Source: ${Cyan}${source}${ColorReset} in file ${sourcefile}") |
|
list(APPEND sourcelist ${source}) |
|
list(APPEND sourcefilelist ${sourcefile}) |
|
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${sourcecpp} ) |
|
target_sources(${EXENAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/${sourcecpp}) |
|
endif() |
|
endif() |
|
endforeach(sourcefile) |
|
|
|
list(TRANSFORM sourcelist APPEND "Data") |
|
string(REPLACE ";" "," sourceclist "${sourcelist}") |
|
file(WRITE ${DATALISTINC} "#define DATALIST ${sourceclist}\n") |
|
|
|
foreach(sourcefile ${sourcefilelist}) |
|
file(APPEND ${DATALISTINC} "#include \"${sourcefile}\"\n") |
|
endforeach(sourcefile) |
|
# End generation of sources list
|
|
|