#file(GLOB HARKLIB_SRCS *.cc node/*.cc)
set(HARKLIB_SRCS basenode.cc
    data.cc
    dataproxy-map.cc
    dataproxy.cc
    datasink.cc
    datasource.cc
    dispatch.cc
    error.cc
    forwarding-dataproxy.cc
    hark-lib.cc
    input.cc
    logger.cc
    network.cc
    node.cc
    nodedef.cc
    object.cc
    queueing-dataproxy.cc
    source.cc
    tensor.cc
    terminal.cc
    timepoint.cc
    tf.cc
    threads.cc

    node/AND.cc
    node/OR.cc
    node/NOT.cc
    node/NOP.cc
    node/Greater.cc
    node/GreaterEqual.cc
    node/Smaller.cc
    node/SmallerEqual.cc
    node/Equal.cc
    node/Delay.cc
    node/IterCount.cc
    node/Sleep.cc
    node/IF.cc
    node/Iterate.cc

    node/AudioStreamFromMemory.cc
    node/AudioStreamFromWave.cc

    node/CMChannelSelector.cc
    node/CMConjEachElement.cc
    node/CMDivideEachElement.cc
    node/CMIdentityMatrix.cc
    node/CMInverseMatrix.cc
    node/CMLoad.cc
    node/CMMakerFromFFT.cc
    node/CMMakerFromFFTwithFlag.cc
    node/CMMultiplyEachElement.cc
    node/CMMultiplyMatrix.cc
    node/CMSave.cc

    node/CalcSpecAddPower.cc
    node/CalcSpecSubGain.cc
    node/ChannelSelector.cc

    node/CombineSource.cc
    node/CombineMap.cc

    node/Constant.cc

    node/Delta.cc

    node/DisplayLocalization.cc
    #node/EstimationTransferFunction.cpp
    #node/EstimateTF.cc
    node/FeatureRemover.cc
    node/InputStream.cc
    #node/LocalizationFunction.cc
    #node/LocalizationFunctionMUSIC.cc
    node/LocalizationMUSIC.cc
    node/LocalizeMUSIC.cc
    node/MSLSExtraction.cc
    node/MelFilterBank.cc
    node/MultiFFT.cc
    node/MultiGain.cc
    node/PreEmphasis.cc
    node/Print.cc
    node/PublishData.cc
    node/SaveFeatures.cc
    node/SaveWavePCM.cc
    node/SemiBlindICA.cc
    node/SourceTracker.cc
    node/SpectralGainFilter.cc
    node/SpectralMeanNormalizationIncremental.cc
    node/SpeechRecognitionClient.cc
    node/SubscribeData.cc
    node/SubscriberFLAC.cc
    node/Synthesize.cc
    node/VADPyAnnote.cc
    node/VADZC.cc
)

# # set option
# if(CMAKE_VERSION VERSION_LESS "3.1")
#   #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
#   target_compile_options(${PROJECT_NAME} PUBLIC "-std=c++11")
# else()
#   set(CMAKE_CXX_STANDARD 11)
# endif()

set(CXX_STANDARD 11)
if(USES_LIBTORCH)
  set(CXX_STANDARD 14)
  find_package(Torch REQUIRED)
  # target_compile_definitions(${PROJECT_NAME} PRIVATE HARKLIB_USES_LIBTORCH=1)
endif()

find_package(Threads REQUIRED)
find_package(fmt REQUIRED)

if(MSVC)
    #add_library(${PROJECT_NAME} SHARED ${HARKLIB_SRCS})
    add_library(${PROJECT_NAME} ${HARKLIB_SRCS})
else()
  add_library(${PROJECT_NAME} SHARED ${HARKLIB_SRCS})
endif()

target_include_directories(${PROJECT_NAME} PRIVATE ../include PUBLIC ${EIGEN_PATH} ${OPTIONAL_INCLUDES})
target_link_libraries(${PROJECT_NAME} PUBLIC Threads::Threads PRIVATE Eigen3::Eigen fmt::fmt "${TORCH_LIBRARIES}" "${OPTIONAL_LIBRARIES}")

set_target_properties(${PROJECT_NAME} PROPERTIES
    CXX_STANDARD ${CXX_STANDARD}
    CXX_STANDARD_REQUIRED YES
    CXX_EXTENSIONS NO
)

# set platform specific options
target_compile_options(${PROJECT_NAME} PUBLIC
  $<$<CXX_COMPILER_ID:MSVC>:/Zc:__cplusplus>
)

if(USES_LIBTORCH)
  target_compile_definitions(${PROJECT_NAME} PRIVATE HARKLIB_USES_LIBTORCH=1)
endif()

install(TARGETS ${PROJECT_NAME}
        DESTINATION lib
        EXPORT ${PROJECT_NAME})

# install(EXPORT ${PROJECT_NAME}
#         FILE ${PROJECT_NAME}-config.cmake
#         DESTINATION lib/cmake/${PROJECT_NAME})
