11cmake_minimum_required (VERSION 3.10)
22
3- # NOTES
4- #
5- # HOW TO CHANGE THE COMPILER?
3+ #### NOTES:
4+ # * HOW TO CHANGE THE COMPILER?
65# If you want to use specific compiler, consider using -C | --cc | --cxx cmake-js flags.
7- #
8- # WINDOWS AND MINGW ISSUES?
6+ # * WINDOWS AND MINGW ISSUES?
97# cmake-js doesn't support MinGW Makefiles -> https://github.com/cmake-js/cmake-js/issues/195
108# /DELAYLOAD:NODE.EXE: No such file or directory -> https://github.com/cmake-js/cmake-js/issues/200
119# cmake-js adds /DELAYLOAD:NODE.EXE + there is not an easy solution -> Move to node-gyp
@@ -15,6 +13,13 @@ cmake_minimum_required(VERSION 3.10)
1513
1614project (nodemgclient VERSION 0.1.0)
1715
16+ if (WIN32 AND MINGW)
17+ message (FATAL_ERROR "ON WINDOWS BUILD UNDER MINGW NOT YET POSSIBLE" )
18+ elseif (APPLE )
19+ message (FATAL_ERROR "ON APPLE BUILD NOT YET POSSIBLE" )
20+ endif ()
21+
22+ include (ExternalProject)
1823find_package (OpenSSL REQUIRED)
1924
2025set (CMAKE_C_STANDARD 11)
@@ -31,60 +36,50 @@ add_library(project_warnings INTERFACE)
3136include (cmake/CompilerWarnings.cmake)
3237set_project_warnings(project_warnings)
3338
34- include (ExternalProject)
35-
36- if (WIN32 AND MINGW)
37- message (FATAL_ERROR "ON WINDOWS BUILD UNDER MINGW NOT YES POSSIBLE" )
38- elseif (APPLE )
39- message (FATAL_ERROR "ON APPLE BUILD NOT YET POSSIBLE" )
40- endif ()
41-
42- # Add mgclient as an imported library.
43- ExternalProject_Add(mgclient-proj
44- PREFIX mgclient
45- GIT_REPOSITORY https://github.com/memgraph/mgclient.git
46- GIT_TAG v1.3.0
47- CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>"
48- "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} "
49- "-DBUILD_CPP_BINDINGS=ON"
50- INSTALL_DIR "${PROJECT_BINARY_DIR} /mgclient" )
51- ExternalProject_Get_Property(mgclient-proj install_dir)
52- set (MGCLIENT_ROOT ${install_dir} )
53- set (MGCLIENT_INCLUDE_DIRS ${MGCLIENT_ROOT} /include
54- CACHE INTERNAL "Path to mgclient include directory" )
39+ set (MGCLIENT_GIT_TAG "v1.3.0" CACHE STRING "mgclient git tag" )
40+ set (MGCLIENT_LIBRARY mgclient-lib)
41+ set (MGCLIENT_INSTALL_DIR ${CMAKE_BINARY_DIR} /mgclient)
42+ set (MGCLIENT_INCLUDE_DIRS ${MGCLIENT_INSTALL_DIR} /include )
5543if (UNIX AND NOT APPLE )
56- set (MGCLIENT_LIBRARY_PATH ${MGCLIENT_ROOT } /lib/libmgclient.so)
57- elseif (WIN32 AND MINGW )
58- set (MGCLIENT_LIBRARY_PATH ${MGCLIENT_ROOT } /lib/libmgclient .dll)
44+ set (MGCLIENT_LIBRARY_PATH ${MGCLIENT_INSTALL_DIR } /lib/libmgclient.so)
45+ elseif (WIN32 )
46+ set (MGCLIENT_LIBRARY_PATH ${MGCLIENT_INSTALL_DIR } /lib/mgclient .dll)
5947endif ()
60- message (STATUS "MGCLIENT_LIBRARY_PATH: ${MGCLIENT_LIBRARY_PATH} " )
61- set (MGCLIENT_LIBRARY mgclient-lib)
48+ ExternalProject_Add(mgclient-proj
49+ PREFIX mgclient-proj
50+ GIT_REPOSITORY https://github.com/memgraph/mgclient.git
51+ GIT_TAG "${MGCLIENT_GIT_TAG} "
52+ CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX=${MGCLIENT_INSTALL_DIR} "
53+ "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} "
54+ "-DBUILD_CPP_BINDINGS=ON"
55+ "-DCMAKE_POSITION_INDEPENDENT_CODE=ON"
56+ BUILD_BYPRODUCTS "${MGCLIENT_LIBRARY_PATH} "
57+ INSTALL_DIR "${PROJECT_BINARY_DIR} /mgclient"
58+ )
6259add_library (${MGCLIENT_LIBRARY} SHARED IMPORTED )
60+ target_compile_definitions (${MGCLIENT_LIBRARY} INTERFACE mgclient_shared_EXPORTS)
6361set_property (TARGET ${MGCLIENT_LIBRARY} PROPERTY IMPORTED_LOCATION ${MGCLIENT_LIBRARY_PATH} )
64- if (WIN32 AND MINGW )
65- set_property (TARGET ${MGCLIENT_LIBRARY} PROPERTY IMPORTED_IMPLIB ${MGCLIENT_ROOT } /lib/libmgclient.dll.a )
62+ if (WIN32 )
63+ set_property (TARGET ${MGCLIENT_LIBRARY} PROPERTY IMPORTED_IMPLIB ${MGCLIENT_INSTALL_DIR } /lib/mgclient.lib )
6664endif ()
6765add_dependencies (${MGCLIENT_LIBRARY} mgclient-proj)
68- message (STATUS "MGCLIENT_LIBRARY: ${MGCLIENT_LIBRARY} " )
6966
7067# Define the addon.
7168include_directories (${CMAKE_JS_INC} )
72- set (SOURCE_FILES src/addon.cpp
73- src/client.cpp
74- src/glue.cpp)
69+ set (SOURCE_FILES src/addon.cpp src/client.cpp src/glue.cpp)
7570add_library (${PROJECT_NAME} SHARED ${SOURCE_FILES} ${CMAKE_JS_SRC} )
71+ target_compile_definitions (${PROJECT_NAME} PRIVATE -Dmgclient_shared_EXPORTS)
7672add_dependencies (${PROJECT_NAME} ${MGCLIENT_LIBRARY} )
7773set_target_properties (${PROJECT_NAME} PROPERTIES PREFIX "" SUFFIX ".node" )
78- target_link_libraries (${PROJECT_NAME} PRIVATE
79- ${CMAKE_JS_LIB} ${MGCLIENT_LIBRARY}
80- project_warnings project_options)
74+ target_link_libraries (${PROJECT_NAME} PRIVATE ${CMAKE_JS_LIB} ${MGCLIENT_LIBRARY} project_warnings project_options)
75+ if (WIN32 )
76+ target_link_libraries (${PROJECT_NAME} PRIVATE Ws2_32)
77+ endif ()
8178target_include_directories (${PROJECT_NAME} PRIVATE ${MGCLIENT_INCLUDE_DIRS} )
82- target_compile_options (${PROJECT_NAME} PRIVATE "" )
8379# C++ mgclient throws, which means this project has to enable exceptions. If at
8480# any time we decide to disable exceptions with the combination of NAPI_THROW +
8581# std::nullopt in case of an error, the code should work as is.
8682add_definitions (-DNAPI_CPP_EXCEPTIONS)
87-
8883# Include N-API wrappers.
8984execute_process (COMMAND node -p "require('node-addon-api').include"
9085 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
0 commit comments