Skip to content
Snippets Groups Projects
CMakeLists.txt 3.63 KiB
if ("${BUILD_LIB}" STREQUAL "yes")

    set(LIB_TYPE "STATIC")
    if (DEPENDENCIES_LINK_TYPE STREQUAL "shared")
        set(LIB_TYPE "SHARED")
    endif ()

    add_library(
            exprtk_wrap

            ${LIB_TYPE}

            General/ExprtkWrapper.cpp
    )

    target_include_directories(
            exprtk_wrap

            PRIVATE
            ${EXPRTK_INCLUDE_DIR}
            ${Boost_INCLUDE_DIRS}
            ${SRC_DIR}
    )

    target_link_libraries(
            exprtk_wrap

            PRIVATE
            ${Boost_LIBRARIES}
    )

    add_library(
            lib4neuro

            ${LIB_TYPE}

            Neuron/Neuron.cpp
            Neuron/NeuronBinary.cpp
            Neuron/NeuronConstant.cpp
            Neuron/NeuronLinear.cpp
            Neuron/NeuronLogistic.cpp
            Network/NeuralNetwork.cpp
            Network/NeuralNetworkSum.cpp
            NetConnection/ConnectionFunctionGeneral.cpp
            NetConnection/ConnectionFunctionIdentity.cpp
            LearningMethods/LearningMethods.cpp
            LearningMethods/ParticleSwarm.cpp
            LearningMethods/GradientDescent.cpp
            LearningMethods/LevenbergMarquardt.cpp
            LearningMethods/GradientDescentBB.cpp
            DataSet/DataSet.cpp
            ErrorFunction/ErrorFunctions.cpp
            Solvers/DESolver.cpp
            CSVReader/CSVReader.cpp
            CrossValidator/CrossValidator.cpp
            NormalizationStrategy/NormalizationStrategy.cpp
            LearningMethods/GradientDescentSingleItem.cpp
            LearningMethods/LearningSequence.cpp
            LearningMethods/RandomSolution.cpp
            LearningMethods/KalmanFilter.cpp
    )

    # FileSystem C++ library - has to be linked manually in GCC-8
    set(CXX_FILESYSTEM_LIB "")
    if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
        set(CXX_FILESYSTEM_LIB "stdc++fs")
    endif ()

    # Detect Threading library
    set(THREADS_PREFER_PTHREAD_FLAG ON)
    find_package(Threads REQUIRED)

    # GFortran linking
    set(GFORT "")
    #if(NOT WIN32)
    #    set(GFORT gfortran)
    #endif()

    target_link_libraries(
        lib4neuro

        PRIVATE
            exprtk_wrap
            Threads::Threads
            ${Boost_LIBRARIES}
            ${CXX_FILESYSTEM_LIB}
            ${OpenBLAS_LIBRARIES}
            ${BLAS_LIBRARIES}
            ${LAPACK_LIBRARIES}
            ${GFORT}
    )

    target_include_directories(
        lib4neuro

        PUBLIC
        ${ROOT_DIR}/include

        PRIVATE
        ${EXPRTK_INCLUDE_DIR}
        ${SRC_DIR}
        ${Boost_INCLUDE_DIRS}
        ${ARMADILLO_INCLUDE_DIR}
    )

    set_target_properties(
        lib4neuro

        PROPERTIES
        ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib"
        LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib"
        RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin"
    )

    set(PREFIX "")
    #    if(WIN32)
    #        set(PREFIX "lib")
    #    endif()
    if (WIN32 AND "${DEPENDENCIES_LINK_TYPE}" STREQUAL "shared")
        add_library(${PREFIX}boost_unit_test STATIC boost_test_lib_dummy.cpp)
    elseif ("${DEPENDENCIES_LINK_TYPE}" STREQUAL "static")
        add_library(${PREFIX}boost_unit_test STATIC boost_test_lib_dummy.cpp)
    elseif ("${DEPENDENCIES_LINK_TYPE}" STREQUAL "shared")
        add_library(${PREFIX}boost_unit_test SHARED boost_test_lib_dummy.cpp)
    endif ()

    target_include_directories(
        ${PREFIX}boost_unit_test

        PRIVATE
        ${Boost_INCLUDE_DIRS}
    )

endif ()

if ("${BUILD_TESTS}" STREQUAL "yes")
    add_subdirectory(tests unit-tests)
endif ()

if ("${BUILD_EXAMPLES}" STREQUAL "yes")
    add_subdirectory(examples examples)
endif ()