cmake_minimum_required(VERSION 3.0) option(INCLUDE_CUDA "GPU build in mode" OFF) option(INCLUDE_CXX "CXX build in mode" OFF) project(INMCM_sfx) enable_language(Fortran) if (SFX_CHECK_NAN) add_definitions(-DSFX_CHECK_NAN) endif () if(INCLUDE_CXX) set(RUN_MACRO -DINCLUDE_CXX) endif(INCLUDE_CXX) if(INCLUDE_CUDA) enable_language(CUDA) find_package(CUDA REQUIRED) include_directories(${CUDA_INCLUDE_DIRS}) set(RUN_MACRO -DINCLUDE_CUDA) set(INCLUDE_CXX ON) endif(INCLUDE_CUDA) if(INCLUDE_CXX) enable_language(C) enable_language(CXX) set(CMAKE_CXX_STANDARD 11) endif(INCLUDE_CXX) set(SOURCES_F srcF/sfx_data.f90 srcF/sfx_common.f90 srcF/sfx_esm.f90 srcF/sfx_esm_param.f90 srcF/sfx_log.f90 srcF/sfx_log_param.f90 srcF/sfx_main.f90 srcF/sfx_phys_const.f90 srcF/sfx_surface.f90 srcF/FCWrapper.F90 ) set(HEADERS_F includeF/sfx_def.fi ) if(INCLUDE_CXX) set(SOURCES_C srcC/SubFunctionsWrapper.c ) set(SOURCES_CXX srcCXX/Flux.cpp srcCXX/FluxComputeFunc.cpp srcCXX/SubFunctions.cpp ) set(HEADERS_CXX includeCXX/Flux.h includeCXX/FluxComputeFunc.h includeCXX/SubFunctions.h ) endif(INCLUDE_CXX) if(INCLUDE_CUDA) set(SOURCES_CU srcCU/FluxComputeFunc.cu ) set(HEADERS_CU includeCU/FluxComputeFunc.cuh ) endif(INCLUDE_CUDA) if(INCLUDE_CXX OR INCLUDE_CUDA) set(MEMPROC_SOURCES_CXX srcCXX/MemoryProcessing.cpp ) set(MEMPROC_HEADERS_CXX includeCXX/MemoryProcessing.h includeCXX/TemplateParameters.h ) if(INCLUDE_CUDA) set(MEMPROC_SOURCES_CU srcCU/MemoryProcessing.cu ) set(MEMPROC_HEADERS_CU includeCU/MemoryProcessing.cuh ) endif(INCLUDE_CUDA) endif(INCLUDE_CXX OR INCLUDE_CUDA) set(SOURCES ${MEMPROC_HEADERS_CU} ${MEMPROC_SOURCES_CU} ${MEMPROC_HEADERS_CXX} ${MEMPROC_SOURCES_CXX} ${HEADERS_CU} ${SOURCES_CU} ${HEADERS_CXX} ${SOURCES_CXX} ${SOURCES_C} ${HEADERS_F} ${SOURCES_F}) set(CMAKE_Fortran_FLAGS " -cpp ") add_executable(drag ${SOURCES}) add_definitions(${RUN_MACRO}) set_property(TARGET drag PROPERTY LINKER_LANGUAGE Fortran) #copy data on post build add_custom_command( TARGET drag POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/data ${CMAKE_CURRENT_BINARY_DIR}/data)