1
+ cmake_minimum_required (VERSION 3.11)
2
+ set (CMAKE_CXX_STANDARD 11)
3
+
4
+ project (node-addon-api)
5
+
6
+ set (DISABLE_DEPRECATED_DEFAULT "false" )
7
+
8
+
9
+ message ("================================================================================" )
10
+
11
+ # NODE_VERSION_*
12
+ execute_process (COMMAND node -p "process.version" OUTPUT_VARIABLE NODE_VERSION)
13
+ string (STRIP "${NODE_VERSION} " NODE_VERSION) # remove new line at end
14
+ STRING (REGEX MATCH "^v([^\. ]+)\. ([^\. ]+)\. ([^\. ]+)$" NODE_VERSION "${NODE_VERSION} " )
15
+ set (NODE_VERSION_MAJOR ${CMAKE_MATCH_1} )
16
+ set (NODE_VERSION_MINOR ${CMAKE_MATCH_2} )
17
+ set (NODE_VERSION_PATCH ${CMAKE_MATCH_3} )
18
+ set (NODE_VERSION_SEMVER "${NODE_VERSION_MAJOR} .${NODE_VERSION_MINOR} .${NODE_VERSION_PATCH} " )
19
+
20
+ message ("NODE_VERSION = ${NODE_VERSION} " )
21
+ message ("NODE_VERSION_SEMVER = ${NODE_VERSION_SEMVER} " )
22
+ message ("NODE_VERSION_MAJOR = ${NODE_VERSION_MAJOR} " )
23
+ message ("NODE_VERSION_MINOR = ${NODE_VERSION_MINOR} " )
24
+ message ("NODE_VERSION_PATCH = ${NODE_VERSION_PATCH} " )
25
+
26
+
27
+ # NAPI_VERSION
28
+ execute_process (COMMAND node -p "process.env['npm_config_NAPI_VERSION'] || ''" OUTPUT_VARIABLE NAPI_VERSION)
29
+ string (STRIP "${NAPI_VERSION} " NAPI_VERSION) # remove new line at end
30
+
31
+ message ("NAPI_VERSION = ${NAPI_VERSION} " )
32
+
33
+
34
+ # NODE_API_BUILTIN
35
+ set (NODE_API_BUILTIN "false" )
36
+ if (("${NODE_VERSION_SEMVER} " VERSION_GREATER_EQUAL "9.0.0" )
37
+ OR ((${NODE_VERSION_MAJOR} EQUAL 8) AND ("${NODE_VERSION_SEMVER} " VERSION_GREATER_EQUAL "8.6.0" ))
38
+ OR ((${NODE_VERSION_MAJOR} EQUAL 6) AND ("${NODE_VERSION_SEMVER} " VERSION_GREATER_EQUAL "6.15.0" ))
39
+ OR ((${NODE_VERSION_MAJOR} EQUAL 6) AND ("${NODE_VERSION_SEMVER} " VERSION_GREATER_EQUAL "6.14.2" ))
40
+ )
41
+ set (NODE_API_BUILTIN "true" )
42
+ else ()
43
+ set (NAPI_VERSION 1)
44
+ endif ()
45
+
46
+ message ("NODE_API_BUILTIN = ${NODE_API_BUILTIN} " )
47
+
48
+
49
+ # disable_deprecated
50
+ execute_process (COMMAND node -p "process.env['npm_config_disable_deprecated'] || ''" OUTPUT_VARIABLE DISABLE_DEPRECATED)
51
+ string (STRIP "${DISABLE_DEPRECATED} " DISABLE_DEPRECATED) # remove new line at end
52
+
53
+ if (NOT "${DISABLE_DEPRECATED} " STREQUAL "true" )
54
+ set (DISABLE_DEPRECATED "${DISABLE_DEPRECATED_DEFAULT} " )
55
+ endif ()
56
+
57
+ message ("disable_deprecated = ${DISABLE_DEPRECATED} " )
58
+
59
+
60
+ # SOURCE_FILES
61
+ file (GLOB SOURCE_FILES "src/*.test.cc" )
62
+ # SOURCE_FILES will be logged later
63
+
64
+
65
+ # NAPI_VERSION* compile options
66
+ if (NOT "${NAPI_VERSION} " STREQUAL "" )
67
+ set (DEFINITIONS_VERSION -DNAPI_VERSION=${NAPI_VERSION} )
68
+ else ()
69
+ set (DEFINITIONS_VERSION -DNAPI_EXPERIMENTAL)
70
+ endif ()
71
+
72
+ message ("DEFINITIONS_VERSION = ${DEFINITIONS_VERSION} " )
73
+ add_definitions ("${DEFINITIONS_VERSION} " )
74
+
75
+
76
+ # DISABLE_DEPRECATED compile options, source files
77
+ if ("${DISABLE_DEPRECATED} " STREQUAL "true" )
78
+ set (COMPILE_OPTIONS_DISABLE_DEPRECATED -DNODE_ADDON_API_DISABLE_DEPRECATED)
79
+ add_compile_options ("${COMPILE_OPTIONS_DISABLE_DEPRECATED} " )
80
+ message ("COMPILE_OPTIONS_DISABLE_DEPRECATED = ${COMPILE_OPTIONS_DISABLE_DEPRECATED} " )
81
+ endif ()
82
+
83
+
84
+ #env.json configure
85
+ set (NAPI_MODULES_FLAG "false" )
86
+ if ((NOT "${NODE_API_BUILTIN} " STREQUAL "true" ) AND ("${NODE_VERSION_MAJOR} " STREQUAL 8))
87
+ set (NAPI_MODULES_FLAG "true" )
88
+ endif ()
89
+
90
+ configure_file ("${CMAKE_SOURCE_DIR} /env.json.in" "${CMAKE_BINARY_DIR} /env.json" )
91
+
92
+
93
+ # include directories
94
+ set (INCLUDE_DIRECTORIES "${INCLUDE_DIRECTORIES} " "${CMAKE_SOURCE_DIR} /.." "${CMAKE_JS_INC} " )
95
+ include_directories ("${INCLUDE_DIRECTORIES} " )
96
+
97
+
98
+ # use builtin node api or compile shipped for old node versions
99
+ if ("${NODE_API_BUILTIN} " STREQUAL "true" )
100
+ # set(INCLUDE_DIRECTORIES "${INCLUDE_DIRECTORIES}" "${CMAKE_SOURCE_DIR}/../external-napi")
101
+ else ()
102
+ add_subdirectory ("${CMAKE_SOURCE_DIR} /../src" "${CMAKE_SOURCE_DIR} /build-node-api" )
103
+ include_directories ("${INCLUDE_DIRECTORIES} " ) # need to update
104
+ endif ()
105
+
106
+
107
+ string (REPLACE ";" "\n " SOURCE_FILES_LIST "${SOURCE_FILES} " )
108
+ message ("================================================================================" )
109
+ message ("INCLUDE_DIRECTORIES:" )
110
+ message ("${INCLUDE_DIRECTORIES} " )
111
+ message ("================================================================================" )
112
+ message ("SOURCE_FILES:" )
113
+ message ("${SOURCE_FILES_LIST} " )
114
+ message ("================================================================================" )
115
+
116
+ # C/CXX flags
117
+ set (FLAGS "-Werror -Wall -Wextra -Wpedantic -Wunused-parameter" )
118
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLAGS} " )
119
+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAGS} " )
120
+
121
+ message ("CMAKE_C_FLAGS = ${CMAKE_C_FLAGS} " )
122
+ message ("CMAKE_CXX_FLAGS = ${CMAKE_CXX_FLAGS} " )
123
+ message ("================================================================================" )
124
+
125
+ # library binding
126
+ add_library (binding SHARED ${SOURCE_FILES} )
127
+ target_compile_options (binding PRIVATE -DNAPI_CPP_EXCEPTIONS)
128
+ set_target_properties (binding PROPERTIES PREFIX "" SUFFIX ".node" )
129
+ target_link_libraries (binding "${BINDING_LINK_LIBRARIES} " )
130
+
131
+ # library binding_noexcept
132
+ add_library (binding_noexcept SHARED ${SOURCE_FILES} )
133
+ target_compile_options (binding_noexcept PRIVATE -DNAPI_DISABLE_CPP_EXCEPTIONS)
134
+ set_target_properties (binding_noexcept PROPERTIES PREFIX "" SUFFIX ".node" )
135
+ target_link_libraries (binding_noexcept "${BINDING_LINK_LIBRARIES} " )
0 commit comments