cmake_minimum_required(VERSION 3.24)

set(CMAKE_CXX_STANDARD 17)

set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS 1)
set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreaded)


project(ads-utils)


if (WIN32)
  find_library(ADS_LIB NAMES TcAdsDll libTcAdsDll PATHS "C:\\Program Files (x86)\\Beckhoff\\TwinCAT\\AdsApi\\TcAdsDll\\Lib\\x64")
endif()

if (UNIX AND NOT APPLE)
  find_library(ADS_LIB NAMES AdsLib REQUIRED)
endif()


set(lib_src
  src/ads_data_type_entry.cpp
  src/ads_state_change.cpp
  src/ads_symbol_entry.cpp
  src/ads_symbol_upload_info_2.cpp
  src/ads_symbol.cpp
  src/ads.cpp
  src/create_handles.cpp
  src/error_codes.cpp
  src/read.cpp
  src/reader.cpp
  src/release_handles.cpp
  src/symbol_table_change.cpp
  src/write.cpp
)

if (WIN32)
  add_library(ads-utils STATIC ${lib_src})
endif()

if (UNIX AND NOT APPLE)
  add_library(ads-utils SHARED ${lib_src})
endif()

set_target_properties(ads-utils PROPERTIES VERSION 1.0.0)

target_include_directories(ads-utils PUBLIC ${PROJECT_SOURCE_DIR}/include)

#if (WIN32)
#  target_compile_options(ads-utils PRIVATE -Wall)
#endif()

if (UNIX AND NOT APPLE)
  target_compile_options(ads-utils PRIVATE -Wall -Wextra -pedantic -fPIC)
endif()

target_link_libraries(ads-utils PUBLIC ${ADS_LIB})

include(GNUInstallDirs)

install(TARGETS ads-utils
  RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}    # Usually bin/
  LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}    # Usually lib/
  ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}    # Usually lib/
)

install(DIRECTORY ${PROJECT_SOURCE_DIR}/include/ DESTINATION include/ads-utils)


add_executable(ads-utils-test src/main.cpp)

#if (WIN32)
#  target_compile_options(ads-utils-test PRIVATE -Wall)
#endif()

if (UNIX AND NOT APPLE)
  target_compile_options(ads-utils-test PRIVATE -Wall -Wextra -pedantic)
endif()

target_link_libraries(ads-utils-test PRIVATE ads-utils)
