Skip to content
Snippets Groups Projects
CMakeLists.txt 2.43 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(INCLUDE_CXX OR INCLUDE_CUDA)
    set(MEMPROC_GIT http://tesla.parallel.ru/Lizzzka007/memory_processing.git)
    include(FetchContent)
    FetchContent_Declare(memory_processing                                   
    GIT_REPOSITORY ${MEMPROC_GIT}                                    
    GIT_TAG origin/main
    )
    FetchContent_MakeAvailable(memory_processing)                              
    add_library(memory_processing INTERFACE)
    target_compile_definitions(memory_processing INTERFACE INCLUDE_CUDA=${INCLUDE_CUDA})
endif(INCLUDE_CXX OR INCLUDE_CUDA)

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_def.fi
    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
)

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/Flux.cu
    srcCU/FluxComputeFunc.cu
    )
    set(HEADERS_CU
    includeCU/Flux.cuh
    includeCXX/FluxComputeFunc.cuh
    )
endif(INCLUDE_CUDA)

set(SOURCES ${HEADERS_CU} ${SOURCES_CU} ${HEADERS_CXX} ${SOURCES_CXX} ${SOURCES_C} ${SOURCES_F})

set(CMAKE_Fortran_FLAGS " -g -fbacktrace -ffpe-trap=zero,overflow,underflow -cpp ")
set(CMAKE_CXX_FLAGS " -g ")
set(CMAKE_C_FLAGS " -g ")

add_executable(drag ${SOURCES})
add_definitions(${RUN_MACRO})
set_property(TARGET drag PROPERTY LINKER_LANGUAGE Fortran)

if(INCLUDE_CXX OR INCLUDE_CUDA)
    target_include_directories(drag PUBLIC ${memory_processing_SOURCE_DIR}/include)
    target_link_libraries(drag memproc)
endif(INCLUDE_CXX OR INCLUDE_CUDA)