Skip to content

Commit e6db78f

Browse files
authored
Add comments about WIN32 support (#39)
1 parent 3d4b2a2 commit e6db78f

File tree

3 files changed

+44
-15
lines changed

3 files changed

+44
-15
lines changed

CMakeLists.txt

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,22 @@
11
cmake_minimum_required(VERSION 3.10)
22

3-
find_program(CLANG_FOUND clang)
4-
find_program(CLANGXX_FOUND clang++)
5-
if (CLANG_FOUND AND CLANGXX_FOUND)
6-
set(CMAKE_C_COMPILER ${CLANG_FOUND})
7-
set(CMAKE_CXX_COMPILER ${CLANGXX_FOUND})
8-
else()
9-
message(FATAL_ERROR "Clang and Clang++ are required!")
10-
endif()
3+
# NOTES
4+
#
5+
# HOW TO CHANGE THE COMPILER?
6+
# If you want to use specific compiler, consider using -C | --cc | --cxx cmake-js flags.
7+
#
8+
# WINDOWS AND MINGW ISSUES?
9+
# cmake-js doesn't support MinGW Makefiles -> https://github.com/cmake-js/cmake-js/issues/195
10+
# /DELAYLOAD:NODE.EXE: No such file or directory -> https://github.com/cmake-js/cmake-js/issues/200
11+
# cmake-js adds /DELAYLOAD:NODE.EXE + there is not an easy solution -> Move to node-gyp
12+
# I've played with paths + setting the CMAKE_SHARED_LINKER_FLAGS but all that is N/A.
13+
# The following does not work because CMake changes the string to be Windows path.
14+
# set(CMAKE_SHARED_LINKER_FLAGS "/DELAYLOAD:/c/Program\\ Files/nodejs/node.exe")
1115

1216
project(nodemgclient VERSION 0.1.0)
1317

18+
find_package(OpenSSL REQUIRED)
19+
1420
set(CMAKE_C_STANDARD 11)
1521
set(CMAKE_CXX_STANDARD 17)
1622
set(C_STANDARD_REQUIRED ON)
@@ -27,7 +33,13 @@ set_project_warnings(project_warnings)
2733

2834
include(ExternalProject)
2935

30-
# Add mgclient as a library.
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.
3143
ExternalProject_Add(mgclient-proj
3244
PREFIX mgclient
3345
GIT_REPOSITORY https://github.com/memgraph/mgclient.git
@@ -39,18 +51,27 @@ ExternalProject_Get_Property(mgclient-proj install_dir)
3951
set(MGCLIENT_ROOT ${install_dir})
4052
set(MGCLIENT_INCLUDE_DIRS ${MGCLIENT_ROOT}/include
4153
CACHE INTERNAL "Path to mgclient include directory")
42-
set(MGCLIENT_LIBRARY_PATH ${MGCLIENT_ROOT}/lib/libmgclient.so)
54+
if (UNIX AND NOT APPLE)
55+
set(MGCLIENT_LIBRARY_PATH ${MGCLIENT_ROOT}/lib/libmgclient.so)
56+
elseif (WIN32 AND MINGW)
57+
set(MGCLIENT_LIBRARY_PATH ${MGCLIENT_ROOT}/lib/libmgclient.dll)
58+
endif()
59+
message(STATUS "MGCLIENT_LIBRARY_PATH: ${MGCLIENT_LIBRARY_PATH}")
4360
set(MGCLIENT_LIBRARY mgclient-lib)
4461
add_library(${MGCLIENT_LIBRARY} SHARED IMPORTED)
45-
set_target_properties(${MGCLIENT_LIBRARY} PROPERTIES
46-
IMPORTED_LOCATION ${MGCLIENT_LIBRARY_PATH})
62+
set_property(TARGET ${MGCLIENT_LIBRARY} PROPERTY IMPORTED_LOCATION ${MGCLIENT_LIBRARY_PATH})
63+
if (WIN32 AND MINGW)
64+
set_property(TARGET ${MGCLIENT_LIBRARY} PROPERTY IMPORTED_IMPLIB ${MGCLIENT_ROOT}/lib/libmgclient.dll.a)
65+
endif()
4766
add_dependencies(${MGCLIENT_LIBRARY} mgclient-proj)
67+
message(STATUS "MGCLIENT_LIBRARY: ${MGCLIENT_LIBRARY}")
4868

4969
# Define the addon.
5070
include_directories(${CMAKE_JS_INC})
5171
set(SOURCE_FILES src/addon.cpp src/connection.cpp src/glue.cpp
5272
src/record.cpp src/cursor.cpp)
5373
add_library(${PROJECT_NAME} SHARED ${SOURCE_FILES} ${CMAKE_JS_SRC})
74+
add_dependencies(${PROJECT_NAME} ${MGCLIENT_LIBRARY})
5475
set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "" SUFFIX ".node")
5576
target_link_libraries(${PROJECT_NAME} PRIVATE
5677
${CMAKE_JS_LIB} ${MGCLIENT_LIBRARY}
@@ -66,7 +87,7 @@ execute_process(COMMAND node -p "require('node-addon-api').include"
6687
OUTPUT_VARIABLE NODE_ADDON_API_DIR)
6788
string(REPLACE "\n" "" NODE_ADDON_API_DIR ${NODE_ADDON_API_DIR})
6889
string(REPLACE "\"" "" NODE_ADDON_API_DIR ${NODE_ADDON_API_DIR})
69-
target_include_directories(${PROJECT_NAME} SYSTEM PRIVATE ${NODE_ADDON_API_DIR})
90+
target_include_directories(${PROJECT_NAME} SYSTEM PRIVATE "${NODE_ADDON_API_DIR}")
7091

7192
# Added because of BigInt support.
7293
add_definitions(-DNAPI_EXPERIMENTAL)

README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,11 @@ npm run build:release
4444
```
4545

4646
To run tests, [Docker](https://docs.docker.com/engine/install) is required.
47+
48+
## Windows
49+
50+
NOTE: Not yet possible under MinGW.
51+
52+
If installing OpenSSL package from
53+
https://slproweb.com/products/Win32OpenSSL.html, make sure to use the full one
54+
because of the header files.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
"url": "https://github.com/memgraph/nodemgclient.git"
2121
},
2222
"scripts": {
23-
"build:release": "npx cmake-js configure --debug=false --generator='Unix Makefiles' && npx cmake-js compile",
24-
"build:debug": "npx cmake-js configure --debug=true --generator='Unix Makefiles' && npx cmake-js compile",
23+
"build:release": "npx cmake-js configure --debug=false && npx cmake-js compile",
24+
"build:debug": "npx cmake-js configure --debug=true && npx cmake-js compile",
2525
"lint": "npx eslint -c .eslintrc.js './{src,test,lib,example}/**/*.js'",
2626
"lint:fix": "npx eslint -c .eslintrc.js --fix './{src,test,lib,example}/**/*.js'",
2727
"test": "npx jest",

0 commit comments

Comments
 (0)