cmake_minimum_required(VERSION 3.12)

project(plugin-datalayers)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

set(LIBRARY_OUTPUT_PATH "${CMAKE_BINARY_DIR}/plugins")

file(COPY ${CMAKE_SOURCE_DIR}/plugins/datalayers/datastorage.json DESTINATION ${CMAKE_BINARY_DIR}/plugins/schema/)

add_library(${PROJECT_NAME} SHARED
  datalayers_config.c
  datalayers_handle.c
  datalayers_plugin.c
  datalayers_plugin_intf.c
  ${CMAKE_SOURCE_DIR}/src/persist/datalayers/flight_sql_client.cpp
)

target_include_directories(${PROJECT_NAME} PRIVATE 
  ${CMAKE_SOURCE_DIR}/include/neuron
  ${CMAKE_SOURCE_DIR}/plugins/datalayers
  ${CMAKE_SOURCE_DIR}/src/persist/datalayers
)

set(ARROW_USE_STATIC_LIBS ON)
set(ARROW_STATIC_LIB TRUE)

find_package(Arrow REQUIRED)
find_package(ArrowFlight REQUIRED)
find_package(ArrowFlightSql REQUIRED)
find_package(gRPC REQUIRED)

target_link_libraries(${PROJECT_NAME}
  -Wl,--whole-archive
  gRPC::grpc++
  -Wl,--no-whole-archive
  Arrow::arrow_static
  ArrowFlight::arrow_flight_static
  ArrowFlightSql::arrow_flight_sql_static
  stdc++
  gflags
  ${CMAKE_THREAD_LIBS_INIT}
)

target_link_libraries(${PROJECT_NAME} neuron-base)
target_link_libraries(${PROJECT_NAME} ${CMAKE_THREAD_LIBS_INIT})