Skip to content

Commit

Permalink
build: cmake-js
Browse files Browse the repository at this point in the history
Ref: #422
  • Loading branch information
DaAitch committed Dec 29, 2018
1 parent d8e9c22 commit 98cc0c3
Show file tree
Hide file tree
Showing 84 changed files with 329 additions and 276 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,5 @@
/node_modules
/build

# old npm versions
/npm-debug.log
2 changes: 1 addition & 1 deletion .npmrc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
package-lock=false
package-lock=false
7 changes: 0 additions & 7 deletions external-napi/node_api.h

This file was deleted.

8 changes: 4 additions & 4 deletions napi-inl.h
Original file line number Diff line number Diff line change
Expand Up @@ -339,11 +339,11 @@ inline bool Value::IsNumber() const {

// currently experimental guard with version of NAPI_VERSION that it is
// released in once it is no longer experimental
#if (NAPI_VERSION > 2147483646)
#if (NAPI_VERSION == NAPI_VERSION_EXPERIMENTAL)
inline bool Value::IsBigInt() const {
return Type() == napi_bigint;
}
#endif // NAPI_EXPERIMENTAL
#endif // NAPI_VERSION == NAPI_VERSION_EXPERIMENTAL

inline bool Value::IsString() const {
return Type() == napi_string;
Expand Down Expand Up @@ -563,7 +563,7 @@ inline double Number::DoubleValue() const {

// currently experimental guard with version of NAPI_VERSION that it is
// released in once it is no longer experimental
#if (NAPI_VERSION > 2147483646)
#if (NAPI_VERSION == NAPI_VERSION_EXPERIMENTAL)
////////////////////////////////////////////////////////////////////////////////
// BigInt Class
////////////////////////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -624,7 +624,7 @@ inline void BigInt::ToWords(int* sign_bit, size_t* word_count, uint64_t* words)
_env, _value, sign_bit, word_count, words);
NAPI_THROW_IF_FAILED_VOID(_env, status);
}
#endif // NAPI_EXPERIMENTAL
#endif // NAPI_VERSION == NAPI_VERSION_EXPERIMENTAL

////////////////////////////////////////////////////////////////////////////////
// Name class
Expand Down
22 changes: 12 additions & 10 deletions napi.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
#ifndef SRC_NAPI_H_
#define SRC_NAPI_H_

#define NAPI_VERSION_EXPERIMENTAL 2147483647

#include "node_api.h"
#include <functional>
#include <initializer_list>
Expand Down Expand Up @@ -54,9 +56,9 @@ namespace Napi {
class Number;
// currently experimental guard with version of NAPI_VERSION that it is
// released in once it is no longer experimental
#if (NAPI_VERSION > 2147483646)
#if (NAPI_VERSION == NAPI_VERSION_EXPERIMENTAL)
class BigInt;
#endif // NAPI_EXPERIMENTAL
#endif // NAPI_VERSION == NAPI_VERSION_EXPERIMENTAL
class String;
class Object;
class Array;
Expand All @@ -79,10 +81,10 @@ namespace Napi {
typedef TypedArrayOf<double> Float64Array; ///< Typed-array of 64-bit floating-point values
// currently experimental guard with version of NAPI_VERSION that it is
// released in once it is no longer experimental
#if (NAPI_VERSION > 2147483646)
#if (NAPI_VERSION == NAPI_VERSION_EXPERIMENTAL)
typedef TypedArrayOf<int64_t> BigInt64Array; ///< Typed array of signed 64-bit integers
typedef TypedArrayOf<uint64_t> BigUint64Array; ///< Typed array of unsigned 64-bit integers
#endif // NAPI_EXPERIMENTAL
#endif // NAPI_VERSION == NAPI_VERSION_EXPERIMENTAL

/// Defines the signature of a N-API C++ module's registration callback (init) function.
typedef Object (*ModuleRegisterCallback)(Env env, Object exports);
Expand Down Expand Up @@ -184,9 +186,9 @@ namespace Napi {
bool IsNumber() const; ///< Tests if a value is a JavaScript number.
// currently experimental guard with version of NAPI_VERSION that it is
// released in once it is no longer experimental
#if (NAPI_VERSION > 2147483646)
#if (NAPI_VERSION == NAPI_VERSION_EXPERIMENTAL)
bool IsBigInt() const; ///< Tests if a value is a JavaScript bigint.
#endif // NAPI_EXPERIMENTAL
#endif // NAPI_VERSION == NAPI_VERSION_EXPERIMENTAL
bool IsString() const; ///< Tests if a value is a JavaScript string.
bool IsSymbol() const; ///< Tests if a value is a JavaScript symbol.
bool IsArray() const; ///< Tests if a value is a JavaScript array.
Expand Down Expand Up @@ -258,7 +260,7 @@ namespace Napi {

// currently experimental guard with version of NAPI_VERSION that it is
// released in once it is no longer experimental
#if (NAPI_VERSION > 2147483646)
#if (NAPI_VERSION == NAPI_VERSION_EXPERIMENTAL)
/// A JavaScript bigint value.
class BigInt : public Value {
public:
Expand Down Expand Up @@ -297,7 +299,7 @@ namespace Napi {
/// be needed to store this BigInt (i.e. the return value of `WordCount()`).
void ToWords(int* sign_bit, size_t* word_count, uint64_t* words);
};
#endif // NAPI_EXPERIMENTAL
#endif // NAPI_VERSION == NAPI_VERSION_EXPERIMENTAL

/// A JavaScript string or symbol value (that can be used as a property name).
class Name : public Value {
Expand Down Expand Up @@ -764,10 +766,10 @@ namespace Napi {
: std::is_same<T, double>::value ? napi_float64_array
// currently experimental guard with version of NAPI_VERSION that it is
// released in once it is no longer experimental
#if (NAPI_VERSION > 2147483646)
#if (NAPI_VERSION == NAPI_VERSION_EXPERIMENTAL)
: std::is_same<T, int64_t>::value ? napi_bigint64_array
: std::is_same<T, uint64_t>::value ? napi_biguint64_array
#endif // NAPI_EXPERIMENTAL
#endif // NAPI_VERSION == NAPI_VERSION_EXPERIMENTAL
: unknown_array_type;
}
/// !endcond
Expand Down
12 changes: 11 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,18 @@
"url": "git://github.com/nodejs/node-addon-api.git"
},
"scripts": {
"pretest": "node-gyp rebuild -C test",
"clean": "cmake-js clean -d test",

"test": "node test",
"test:debug": "node test",
"test:debug:dev": "node test",
"test:release:dev": "node test",

"pretest": "cmake-js rebuild -d test",
"pretest:debug": "cmake-js rebuild --debug -d test",
"pretest:release:dev": "cmake-js build -d test",
"pretest:debug:dev": "cmake-js build --debug -d test",

"doc": "doxygen doc/Doxyfile"
},
"version": "1.6.2"
Expand Down
14 changes: 14 additions & 0 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
cmake_minimum_required(VERSION 3.11)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_POSITION_INDEPENDENT_CODE ON) # -fPIC flag

# TODO: "${CMAKE_SOURCE_DIR}/../src" is unclean
set(INCLUDE_DIRECTORIES "${INCLUDE_DIRECTORIES}" "${CMAKE_SOURCE_DIR}/../src" PARENT_SCOPE)

if(NOT "${NAPI_VERSION}" STREQUAL "")
add_definitions(-DNAPI_VERSION=${NAPI_VERSION})
endif()

add_library(node-api STATIC node_api.cc node_internals.cc)
target_compile_options(node-api PRIVATE -DEXTERNAL_NAPI)
set(BINDING_LINK_LIBRARIES "${BINDING_LINK_LIBRARIES}" node-api PARENT_SCOPE)
2 changes: 0 additions & 2 deletions src/node_api.cc
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@
#include "node_api.h"
#include "node_internals.h"

#define NAPI_VERSION 1

static
napi_status napi_set_last_error(napi_env env, napi_status error_code,
uint32_t engine_error_code = 0,
Expand Down
21 changes: 0 additions & 21 deletions src/node_api.gyp

This file was deleted.

Empty file removed src/nothing.c
Empty file.
4 changes: 2 additions & 2 deletions test/.gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
build/
src/
/build
/build-node-api
135 changes: 135 additions & 0 deletions test/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
cmake_minimum_required(VERSION 3.11)
set(CMAKE_CXX_STANDARD 11)

project (node-addon-api)

set(DISABLE_DEPRECATED_DEFAULT "false")


message("================================================================================")

# NODE_VERSION_*
execute_process(COMMAND node -p "process.version" OUTPUT_VARIABLE NODE_VERSION)
string(STRIP "${NODE_VERSION}" NODE_VERSION) # remove new line at end
STRING(REGEX MATCH "^v([^\.]+)\.([^\.]+)\.([^\.]+)$" NODE_VERSION "${NODE_VERSION}")
set(NODE_VERSION_MAJOR ${CMAKE_MATCH_1})
set(NODE_VERSION_MINOR ${CMAKE_MATCH_2})
set(NODE_VERSION_PATCH ${CMAKE_MATCH_3})
set(NODE_VERSION_SEMVER "${NODE_VERSION_MAJOR}.${NODE_VERSION_MINOR}.${NODE_VERSION_PATCH}")

message("NODE_VERSION = ${NODE_VERSION}")
message("NODE_VERSION_SEMVER = ${NODE_VERSION_SEMVER}")
message("NODE_VERSION_MAJOR = ${NODE_VERSION_MAJOR}")
message("NODE_VERSION_MINOR = ${NODE_VERSION_MINOR}")
message("NODE_VERSION_PATCH = ${NODE_VERSION_PATCH}")


# NAPI_VERSION
execute_process(COMMAND node -p "process.env['npm_config_NAPI_VERSION'] || ''" OUTPUT_VARIABLE NAPI_VERSION)
string(STRIP "${NAPI_VERSION}" NAPI_VERSION) # remove new line at end

message("NAPI_VERSION = ${NAPI_VERSION}")


# NODE_API_BUILTIN
set(NODE_API_BUILTIN "false")
if(("${NODE_VERSION_SEMVER}" VERSION_GREATER_EQUAL "9.0.0")
OR ((${NODE_VERSION_MAJOR} EQUAL 8) AND ("${NODE_VERSION_SEMVER}" VERSION_GREATER_EQUAL "8.6.0"))
OR ((${NODE_VERSION_MAJOR} EQUAL 6) AND ("${NODE_VERSION_SEMVER}" VERSION_GREATER_EQUAL "6.15.0"))
OR ((${NODE_VERSION_MAJOR} EQUAL 6) AND ("${NODE_VERSION_SEMVER}" VERSION_GREATER_EQUAL "6.14.2"))
)
set(NODE_API_BUILTIN "true")
else()
set(NAPI_VERSION 1)
endif()

message("NODE_API_BUILTIN = ${NODE_API_BUILTIN}")


# disable_deprecated
execute_process(COMMAND node -p "process.env['npm_config_disable_deprecated'] || ''" OUTPUT_VARIABLE DISABLE_DEPRECATED)
string(STRIP "${DISABLE_DEPRECATED}" DISABLE_DEPRECATED) # remove new line at end

if(NOT "${DISABLE_DEPRECATED}" STREQUAL "true")
set(DISABLE_DEPRECATED "${DISABLE_DEPRECATED_DEFAULT}")
endif()

message("disable_deprecated = ${DISABLE_DEPRECATED}")


# SOURCE_FILES
file(GLOB SOURCE_FILES "src/*.test.cc")
# SOURCE_FILES will be logged later


# NAPI_VERSION* compile options
if(NOT "${NAPI_VERSION}" STREQUAL "")
set(DEFINITIONS_VERSION -DNAPI_VERSION=${NAPI_VERSION})
else()
set(DEFINITIONS_VERSION -DNAPI_EXPERIMENTAL)
endif()

message("DEFINITIONS_VERSION = ${DEFINITIONS_VERSION}")
add_definitions("${DEFINITIONS_VERSION}")


# DISABLE_DEPRECATED compile options, source files
if ("${DISABLE_DEPRECATED}" STREQUAL "true")
set(COMPILE_OPTIONS_DISABLE_DEPRECATED -DNODE_ADDON_API_DISABLE_DEPRECATED)
add_compile_options("${COMPILE_OPTIONS_DISABLE_DEPRECATED}")
message("COMPILE_OPTIONS_DISABLE_DEPRECATED = ${COMPILE_OPTIONS_DISABLE_DEPRECATED}")
endif()


#env.json configure
set(NAPI_MODULES_FLAG "false")
if((NOT "${NODE_API_BUILTIN}" STREQUAL "true") AND ("${NODE_VERSION_MAJOR}" STREQUAL 8))
set(NAPI_MODULES_FLAG "true")
endif()

configure_file("${CMAKE_SOURCE_DIR}/env.json.in" "${CMAKE_BINARY_DIR}/env.json")


# include directories
set(INCLUDE_DIRECTORIES "${INCLUDE_DIRECTORIES}" "${CMAKE_SOURCE_DIR}/.." "${CMAKE_JS_INC}")
include_directories("${INCLUDE_DIRECTORIES}")


# use builtin node api or compile shipped for old node versions
if("${NODE_API_BUILTIN}" STREQUAL "true")
# set(INCLUDE_DIRECTORIES "${INCLUDE_DIRECTORIES}" "${CMAKE_SOURCE_DIR}/../external-napi")
else()
add_subdirectory("${CMAKE_SOURCE_DIR}/../src" "${CMAKE_SOURCE_DIR}/build-node-api")
include_directories("${INCLUDE_DIRECTORIES}") # need to update
endif()


string(REPLACE ";" "\n" SOURCE_FILES_LIST "${SOURCE_FILES}")
message("================================================================================")
message("INCLUDE_DIRECTORIES:")
message("${INCLUDE_DIRECTORIES}")
message("================================================================================")
message("SOURCE_FILES:")
message("${SOURCE_FILES_LIST}")
message("================================================================================")

# C/CXX flags
set(FLAGS "-Werror -Wall -Wextra -Wpedantic -Wunused-parameter")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAGS}")

message("CMAKE_C_FLAGS = ${CMAKE_C_FLAGS}")
message("CMAKE_CXX_FLAGS = ${CMAKE_CXX_FLAGS}")
message("================================================================================")

# library binding
add_library(binding SHARED ${SOURCE_FILES})
target_compile_options(binding PRIVATE -DNAPI_CPP_EXCEPTIONS)
set_target_properties(binding PROPERTIES PREFIX "" SUFFIX ".node")
target_link_libraries(binding "${BINDING_LINK_LIBRARIES}")

# library binding_noexcept
add_library(binding_noexcept SHARED ${SOURCE_FILES})
target_compile_options(binding_noexcept PRIVATE -DNAPI_DISABLE_CPP_EXCEPTIONS)
set_target_properties(binding_noexcept PROPERTIES PREFIX "" SUFFIX ".node")
target_link_libraries(binding_noexcept "${BINDING_LINK_LIBRARIES}")
Loading

0 comments on commit 98cc0c3

Please sign in to comment.