Skip to content
Snippets Groups Projects
CMakeLists.txt 2.97 KiB
if ("${BUILD_TESTS}" STREQUAL "yes")
    add_subdirectory(tests unit-tests)
endif ()

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

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/ParticleSwarm.cpp
            LearningMethods/GradientDescent.cpp
            DataSet/DataSet.cpp
            ErrorFunction/ErrorFunctions.cpp
            Solvers/DESolver.cpp
            CSVReader/CSVReader.cpp
            CrossValidator/CrossValidator.cpp
            NormalizationStrategy/NormalizationStrategy.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 ()

    target_link_libraries(
            lib4neuro

            PRIVATE
            exprtk_wrap
            ${Boost_LIBRARIES}
            ${CXX_FILESYSTEM_LIB}
    )

    target_include_directories(
            lib4neuro

            PUBLIC
            ${ROOT_DIR}/include

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

    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 ()