cmake_minimum_required(VERSION 3.15)
project (kuzujs)

set(CMAKE_CXX_STANDARD 20)

add_definitions(-DNAPI_VERSION=5)
add_definitions(-DNODE_RUNTIME=node)
add_definitions(-DBUILDING_NODE_EXTENSION)

# Print CMAKE_CURRENT_SOURCE_DIR
execute_process(
  COMMAND npx cmake-js print-cmakejs-include 
  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 
  OUTPUT_VARIABLE CMAKE_JS_INC
)
execute_process(
  COMMAND npx cmake-js print-cmakejs-lib 
  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 
  OUTPUT_VARIABLE CMAKE_JS_LIB
)
execute_process(
  COMMAND npx cmake-js print-cmakejs-src
  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 
  OUTPUT_VARIABLE CMAKE_JS_SRC
)

string(STRIP ${CMAKE_JS_INC} CMAKE_JS_INC)
string(STRIP ${CMAKE_JS_LIB} CMAKE_JS_LIB)
string(STRIP ${CMAKE_JS_SRC} CMAKE_JS_SRC)

# Print CMAKE_JS variables
message(STATUS "CMake.js configurations: LIB=${CMAKE_JS_LIB}, INC=${CMAKE_JS_INC}, SRC=${CMAKE_JS_SRC}")

get_filename_component(NODE_ADDON_API_INCLUDE_PATH ./node_modules/node-addon-api ABSOLUTE)

include_directories(${CMAKE_JS_INC})
include_directories(${NODE_ADDON_API_INCLUDE_PATH})

file(GLOB CPP_SOURCE_FILES ./src_cpp/*)
file(GLOB JS_SOURCE_FILES ./src_js/*.js)
file(COPY ${JS_SOURCE_FILES} ${CMAKE_JS_SRC} DESTINATION  "${CMAKE_CURRENT_SOURCE_DIR}/build")

add_library(${PROJECT_NAME} SHARED ${CPP_SOURCE_FILES})
set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "" SUFFIX ".node")
set_target_properties(${PROJECT_NAME} 
  PROPERTIES
  LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/build" 
  ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/build")
if(APPLE)
  target_link_options(${PROJECT_NAME} PRIVATE -undefined dynamic_lookup)
endif()
target_link_libraries(${PROJECT_NAME} PRIVATE kuzu ${CMAKE_JS_LIB})
