Skip to content
Snippets Groups Projects
CMakeLists.txt 2.42 KiB
Newer Older
数学の武士's avatar
数学の武士 committed
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 ()

数学の武士's avatar
数学の武士 committed
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
)

数学の武士's avatar
.  
数学の武士 committed
    includeF/sfx_def.fi
)

数学の武士's avatar
数学の武士 committed
if(INCLUDE_CXX)
    set(SOURCES_C 
        srcC/SubFunctionsWrapper.c
    )

    set(SOURCES_CXX 
数学の武士's avatar
.  
数学の武士 committed
            srcCXX/Flux.cpp
            srcCXX/FluxComputeFunc.cpp
            srcCXX/SubFunctions.cpp
数学の武士's avatar
数学の武士 committed
    )
    set(HEADERS_CXX 
数学の武士's avatar
.  
数学の武士 committed
            includeCXX/Flux.h
            includeCXX/FluxComputeFunc.h
            includeCXX/SubFunctions.h
数学の武士's avatar
数学の武士 committed
        )
endif(INCLUDE_CXX)

if(INCLUDE_CUDA)
    set(SOURCES_CU 
数学の武士's avatar
.  
数学の武士 committed
        srcCU/FluxComputeFunc.cu
数学の武士's avatar
数学の武士 committed
    )
    set(HEADERS_CU
数学の武士's avatar
.  
数学の武士 committed
        includeCU/FluxComputeFunc.cuh
数学の武士's avatar
数学の武士 committed
    )
endif(INCLUDE_CUDA)

数学の武士's avatar
.  
数学の武士 committed
if(INCLUDE_CXX OR INCLUDE_CUDA)
数学の武士's avatar
.  
数学の武士 committed
        srcCXX/MemoryProcessing.cpp
    )
数学の武士's avatar
.  
数学の武士 committed
        includeCXX/MemoryProcessing.h
        includeCXX/TemplateParameters.h
    )
数学の武士's avatar
数学の武士 committed

数学の武士's avatar
.  
数学の武士 committed
    if(INCLUDE_CUDA)
数学の武士's avatar
.  
数学の武士 committed
            srcCU/MemoryProcessing.cu
        )
        set(MEMPROC_HEADERS_CU
            includeCU/MemoryProcessing.cuh
        )
    endif(INCLUDE_CUDA)
endif(INCLUDE_CXX OR INCLUDE_CUDA)
数学の武士's avatar
数学の武士 committed

数学の武士's avatar
.  
数学の武士 committed
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 ")
数学の武士's avatar
数学の武士 committed
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)