SET(CMAKE_EXPORT_COMPILE_COMMANDS true)
cmake_minimum_required(VERSION 3.18 FATAL_ERROR)

set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)

set(CMAKE_POSITION_INDEPENDENT_CODE ON)

set(LIB_VERSION 2.0.1)

if(UNIX AND NOT APPLE)
    set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined")
elseif(APPLE)
    set(CMAKE_SHARED_LINKER_FLAGS "-Wl")
endif()

enable_testing()


project(gds-sigp VERSION ${LIB_VERSION})

add_subdirectory(src)

add_library(gds-sigp SHARED
	#$<TARGET_OBJECTS:memmap>
    $<TARGET_OBJECTS:misc>
    #    $<TARGET_OBJECTS:option>
    $<TARGET_OBJECTS:thread>
    $<TARGET_OBJECTS:time>

    $<TARGET_OBJECTS:calibration>
    $<TARGET_OBJECTS:DVector>
    $<TARGET_OBJECTS:FilterIO>
    $<TARGET_OBJECTS:fSeries>
    $<TARGET_OBJECTS:FSpectrum>
    $<TARGET_OBJECTS:TSeries>
    $<TARGET_OBJECTS:Wavelet>

    $<TARGET_OBJECTS:fft>
    $<TARGET_OBJECTS:ltmatrix>
    $<TARGET_OBJECTS:math>
    $<TARGET_OBJECTS:random>
    $<TARGET_OBJECTS:wave>

    $<TARGET_OBJECTS:algo>
    $<TARGET_OBJECTS:BaseLine>
    $<TARGET_OBJECTS:Coherence>
    $<TARGET_OBJECTS:DecimateBy2>
    $<TARGET_OBJECTS:Decompose>
    $<TARGET_OBJECTS:Delay>
    $<TARGET_OBJECTS:EFCLineFilter>
    $<TARGET_OBJECTS:FDFilter>
    $<TARGET_OBJECTS:FilterBase>
    $<TARGET_OBJECTS:FilterDesign>
    $<TARGET_OBJECTS:FIRFilter>
    $<TARGET_OBJECTS:GateGen>
    $<TARGET_OBJECTS:IIRFilter>
    $<TARGET_OBJECTS:interpolate>
    $<TARGET_OBJECTS:Limiter>
    $<TARGET_OBJECTS:LinearSum>
    $<TARGET_OBJECTS:LineFilter>
    $<TARGET_OBJECTS:LPEFilter>
    $<TARGET_OBJECTS:math_ops>
    $<TARGET_OBJECTS:Mixer>
    $<TARGET_OBJECTS:MultiPipe>
    $<TARGET_OBJECTS:MultiRate>
    $<TARGET_OBJECTS:polyroot>
    $<TARGET_OBJECTS:resampler>
    $<TARGET_OBJECTS:RTXCorr>
    $<TARGET_OBJECTS:SweptSine>
    $<TARGET_OBJECTS:wavelet>
    $<TARGET_OBJECTS:WelchPSD>
    $<TARGET_OBJECTS:Window>
)

find_library(FFTW3_LIBS NAMES fftw3 REQUIRED)
find_library(FFTW3F_LIBS NAMES fftw3f REQUIRED)
find_library(EXPAT_LIBS NAMES expat REQUIRED)
find_library(Z_LIBS NAMES z REQUIRED)
find_library(PTHREAD NAMEX pthread REQUIRED)
MESSAGE(STATUS "FFTW3_LIBS = ${FFTW3_LIBS}")
MESSAGE(STATUS "FFTW3F_LIBS = ${FFTW3F_LIBS}")
MESSAGE(STATUS "Z_LIBS = ${Z_LIBS}")


set_property(TARGET gds-sigp PROPERTY CXX_STANDARD 20)

if(WIN32)
	SET(EXTRALIBS ws2_32)
else()
	SET(EXTRALIBS dl)
endif()

target_link_libraries(
    gds-sigp PUBLIC
    ${FFTW3_LIBS}
    ${FFTW3F_LIBS}
    ${EXPAT_LIBS}
    ${PTHREAD}
    ${Z_LIBS}
    ${EXTRALIBS}
)

install(TARGETS gds-sigp)
install(FILES "${CMAKE_BINARY_DIR}/src/config/PConfig.h"
  DESTINATION include/gds-sigp
)
