Skip to content
Snippets Groups Projects
CMakeLists.txt 7.26 KiB
Newer Older
  • Learn to ignore specific revisions
  • add_library(plutils STATIC "")
    
    Debolskiy Andrey's avatar
    Debolskiy Andrey committed
    target_sources(plutils
            PRIVATE
            plutils.c
            PUBLIC
            plutils.h
            )
    include_directories(plutils
    
            PUBLIC
            $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/${INSTALL_INCLUDEDIR}>
            $<INSTALL_INTERFACE:${INSTALL_INCLUDEDIR}>)
    
    Ivan Tsybulin's avatar
    Ivan Tsybulin committed
    install(
            TARGETS
            plutils
            ARCHIVE
            DESTINATION ${INSTALL_LIBDIR}
            COMPONENT lib
            RUNTIME
            DESTINATION ${INSTALL_BINDIR}
            COMPONENT bin
            LIBRARY
            DESTINATION ${INSTALL_LIBDIR}
            COMPONENT lib
            PUBLIC_HEADER
            DESTINATION ${INSTALL_INCLUDEDIR}
            COMPONENT dev
    )
    
    Debolskiy Andrey's avatar
    Debolskiy Andrey committed
    #INCLUDE(plutils/CMakeLists.txt)
    
    if(BUILD_SHARED_LIBS)
    
        add_library(parlibc-shared SHARED "")
        target_sources(parlibc-shared
                PRIVATE
    
                parlib.c
                bexchange.c
                transpose.c
    
                parlib.h)
    
        target_include_directories(parlibc-shared
                PUBLIC
                $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/${INSTALL_INCLUDEDIR}>
                $<INSTALL_INTERFACE:${INSTALL_INCLUDEDIR}>
                )
        target_link_libraries(parlibc-shared
                PRIVATE
                plutils
                PUBLIC
                $<$<BOOL:${MPI_FOUND}>:MPI::MPI_C>)
    
        set_target_properties(parlibc-shared
                PROPERTIES
                POSITION_INDEPENDENT_CODE 1
                VISIBILITY_INLINES_HIDDEN 1
                SOVERSION ${PROJECT_VERSION_MAJOR}
                OUTPUT_NAME "parlib"
                PUBLIC_HEADER "parlib.h"
                MACOSX_RPATH ON
                )
    endif(BUILD_SHARED_LIBS)
    
    if(BUILD_STATIC_LIBS)
    
    
    add_library(parlibc-static STATIC "")
        target_sources(parlibc-static
                PRIVATE
                parlib.c
                bexchange.c
                transpose.c
                PUBLIC
                parlib.h)
    
    set_target_properties(parlibc-static
            PROPERTIES
            POSITION_INDEPENDENT_CODE 1
            SOVERSION ${PROJECT_VERSION_MAJOR}
            ARCHIVE_OUTPUT_NAME "parlib"
            PUBLIC_HEADER "parlib.h"
            )
    target_link_libraries(parlibc-static
            PRIVATE
            plutils
            PUBLIC
            $<$<BOOL:${MPI_FOUND}>:MPI::MPI_C>)
    target_include_directories(parlibc-static
            PUBLIC
            $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/${INSTALL_INCLUDEDIR}>
            $<INSTALL_INTERFACE:${INSTALL_INCLUDEDIR}>
            )
    endif(BUILD_STATIC_LIBS)
    #if (CMAKE_BUILD_TYPE)
    #    file(COPY parlib.h
    #            DESTINATION
    #            ${CMAKE_BINARY_DIR}/include)
    #endif()
    #install(TARGETS parlibc-static DESTINATION  ${CMAKE_BINARY_DIR}/lib)
    
    
    if( BUILD_FORT_LIBS )
    if(BUILD_STATIC_LIBS)
    
        if(FORTRANUNDERSCORE)
            add_definitions(-DFORTRANUNDERSCORE)
        elseif(FORTRANDOUBLEUNDERSCORE)
            add_definitions(-DFORTRANDOUBLEUNDERSCORE)
    
        endif()
    
        include(FortranCInterface)
        FortranCInterface_VERIFY()
        FortranCInterface_HEADER(${CMAKE_CURRENT_SOURCE_DIR}/FC.h MACRO_NAMESPACE "FC_")
        message(STATUS "FORTRAN_C_INTEFACE TEST:    ${FortranCInterface_VERIFIED_C}")
        add_definitions(-DFC_MANGLE=1)
    
        add_library(parlibf-static STATIC "")
        target_sources( parlibf-static
                PRIVATE
    
                parlibf.c
                bexchangef.c
                transposef.c
                FC.h
    
                parlibf.h)
    
        target_link_libraries(parlibf-static
                PRIVATE
                plutils
                PUBLIC
                MPI::MPI_C
                parlibc-static)
        set_target_properties(parlibf-static
                PROPERTIES
                ARCHIVE_OUTPUT_NAME "parlibf"
                PUBLIC_HEADER "parlibf.h"
                LINKER_LANGUAGE Fortran
                )
        target_include_directories(parlibf-static
                PUBLIC
                $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/${INSTALL_INCLUDEDIR}>
                $<INSTALL_INTERFACE:${INSTALL_INCLUDEDIR}>
                )
    endif(BUILD_STATIC_LIBS)
        if(BUILD_SHARED_LIBS)
    
        add_library(parlibf-shared SHARED "")
        target_sources(parlibf-shared
                PRIVATE
    
                parlibf.c
                bexchangef.c
                transposef.c
                FC.h
    
                parlibf.h)
    
        target_link_libraries(parlibf-shared
                PRIVATE
                plutils
                PRIVATE
                PUBLIC
                MPI::MPI_C
                parlibc-shared)
    
        set_target_properties(parlibf-shared
                PROPERTIES
                POSITION_INDEPENDENT_CODE 1
                VISIBILITY_INLINES_HIDDEN 1
                SOVERSION ${PROJECT_VERSION_MAJOR}
                OUTPUT_NAME "parlibf"
                PUBLIC_HEADER "parlibf.h"
                MACOSX_RPATH ON
                LINKER_LANGUAGE Fortran
                )
    
        target_include_directories(parlibf-shared
                PUBLIC
                $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/${INSTALL_INCLUDEDIR}>
                $<INSTALL_INTERFACE:${INSTALL_INCLUDEDIR}>
                )
    endif(BUILD_SHARED_LIBS)
    
    endif(BUILD_FORT_LIBS)
    
    #~TESTS
    if(BUILD_FORT_LIBS)
    if(BUILD_SHARED_LIBS)
    
    Ivan Tsybulin's avatar
    Ivan Tsybulin committed
    add_executable(parlibf_test_shared parlibf_test.F90)
    
    target_link_libraries(parlibf_test_shared
            parlibf-shared)
    endif(BUILD_SHARED_LIBS)
    if(BUILD_STATIC_LIBS)
    
    Ivan Tsybulin's avatar
    Ivan Tsybulin committed
        add_executable(parlibf_test_static parlibf_test.F90)
    
        target_link_libraries(parlibf_test_static
                parlibf-static)
    endif(BUILD_STATIC_LIBS)
    endif(BUILD_FORT_LIBS)
    if(BUILD_SHARED_LIBS)
        add_executable(parlibc_test_shared parlibc-test.c)
    target_link_libraries(parlibc_test_shared
            parlibc-shared)
    endif(BUILD_SHARED_LIBS)
    if(BUILD_STATIC_LIBS)
        add_executable(parlibc_test_static parlibc-test.c)
        target_link_libraries(parlibc_test_static
                parlibc-static)
    endif(BUILD_STATIC_LIBS)
    #Installation
    if(BUILD_STATIC_LIBS)
    install(
            TARGETS
            parlibc-static
            ARCHIVE
            DESTINATION ${INSTALL_LIBDIR}
            COMPONENT lib
            RUNTIME
            DESTINATION ${INSTALL_BINDIR}
            COMPONENT bin
            LIBRARY
            DESTINATION ${INSTALL_LIBDIR}
            COMPONENT lib
            PUBLIC_HEADER
            DESTINATION ${INSTALL_INCLUDEDIR}
            COMPONENT dev
    )
    endif(BUILD_STATIC_LIBS)
    if(BUILD_SHARED_LIBS)
    install(
            TARGETS
            parlibc-shared
            ARCHIVE
            DESTINATION ${INSTALL_LIBDIR}
            COMPONENT lib
            RUNTIME
            DESTINATION ${INSTALL_BINDIR}
            COMPONENT bin
            LIBRARY
            DESTINATION ${INSTALL_LIBDIR}
            COMPONENT lib
            PUBLIC_HEADER
            DESTINATION ${INSTALL_INCLUDEDIR}
            COMPONENT dev
    )
    endif(BUILD_SHARED_LIBS)
    
    if( BUILD_FORT_LIBS )
    if(BUILD_STATIC_LIBS)
    install(
            TARGETS
            parlibf-static
            ARCHIVE
            DESTINATION ${INSTALL_LIBDIR}
            COMPONENT lib
            RUNTIME
            DESTINATION ${INSTALL_BINDIR}
            COMPONENT bin
            LIBRARY
            DESTINATION ${INSTALL_LIBDIR}
            COMPONENT lib
            PUBLIC_HEADER
            DESTINATION ${INSTALL_INCLUDEDIR}
            COMPONENT dev
    )
    endif(BUILD_STATIC_LIBS)
    if(BUILD_SHARED_LIBS)
        install(
                TARGETS
                parlibf-shared
                ARCHIVE
                DESTINATION ${INSTALL_LIBDIR}
                COMPONENT lib
                RUNTIME
                DESTINATION ${INSTALL_BINDIR}
                COMPONENT bin
                LIBRARY
                DESTINATION ${INSTALL_LIBDIR}
                COMPONENT lib
                PUBLIC_HEADER
                DESTINATION ${INSTALL_INCLUDEDIR}
                COMPONENT dev
        )
    endif(BUILD_SHARED_LIBS)
    endif(BUILD_FORT_LIBS)
    
    #adding man pages
    
    Ivan Tsybulin's avatar
    Ivan Tsybulin committed
    add_subdirectory(man)