@lynx-js/lynx-library-headers 0.0.1-alpha.4 → 0.0.1-alpha.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -6
- package/cmake/lynx-library-headers.cmake +136 -0
- package/include/capi/lynx_env_capi.h +3 -0
- package/include/lynx/platform/embedder/public/capi/lynx_env_capi.h +3 -0
- package/include/lynx/platform/embedder/public/lynx_env.h +7 -0
- package/include/lynx_env.h +7 -0
- package/package.json +5 -1
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# @lynx-js/lynx-library-headers
|
|
2
2
|
|
|
3
3
|
Header package for Lynx embedder C/C++ API and weak N-API based native
|
|
4
|
-
libraries. This package
|
|
5
|
-
register libraries.
|
|
4
|
+
libraries. This package provides headers and CMake helpers; it does not
|
|
5
|
+
scaffold, build, or register libraries.
|
|
6
6
|
|
|
7
7
|
## Usage
|
|
8
8
|
|
|
@@ -12,10 +12,22 @@ native target include directories:
|
|
|
12
12
|
```js
|
|
13
13
|
const path = require('node:path');
|
|
14
14
|
const headersRoot = path.dirname(
|
|
15
|
-
require.resolve('@lynx-js/lynx-library-headers/package.json')
|
|
15
|
+
require.resolve('@lynx-js/lynx-library-headers/package.json')
|
|
16
16
|
);
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
+
For Windows Lynx native library builds, include the packaged CMake helper to
|
|
20
|
+
resolve the host runtime import library used by the generated native target:
|
|
21
|
+
|
|
22
|
+
```cmake
|
|
23
|
+
include("${headersRoot}/cmake/lynx-library-headers.cmake")
|
|
24
|
+
lynx_link_lynxtron_runtime(your_target)
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
The helper resolves the Windows import library from the runtime package
|
|
28
|
+
installed with `@lynx-js/lynx-library-headers`. You can override discovery with
|
|
29
|
+
`-DLYNXTRON_IMPORT_LIB=/path/to/lynxtron.dll.lib`.
|
|
30
|
+
|
|
19
31
|
The published package contains:
|
|
20
32
|
|
|
21
33
|
- Lynx embedder C API headers.
|
|
@@ -25,8 +37,10 @@ The published package contains:
|
|
|
25
37
|
- Lynx value C API headers required by the embedder C API.
|
|
26
38
|
- `lynx_extension.h` and `lynx/extension.h` convenience wrapper headers.
|
|
27
39
|
- `lynx/registration.h` for generic embedder static registration helpers.
|
|
40
|
+
- `cmake/lynx-library-headers.cmake` for resolving Windows runtime import
|
|
41
|
+
libraries used by Lynx native library builds.
|
|
28
42
|
|
|
29
|
-
|
|
43
|
+
Lynx native libraries use static registration from the native library:
|
|
30
44
|
|
|
31
45
|
```cpp
|
|
32
46
|
#include <lynx/registration.h>
|
|
@@ -47,7 +61,7 @@ Use `LYNX_REGISTER_NATIVE_MODULE` for Lynx weak N-API native modules and
|
|
|
47
61
|
both features should call both macros, keeping the native module and element
|
|
48
62
|
registrations separate.
|
|
49
63
|
|
|
50
|
-
|
|
51
|
-
|
|
64
|
+
A host runtime that loads the native library is enough for these static
|
|
65
|
+
registrations to run.
|
|
52
66
|
|
|
53
67
|
Run `npm run copy-headers` in this package when updating the source headers.
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
if(NOT COMMAND lynx_resolve_node_package)
|
|
2
|
+
function(lynx_resolve_node_package PACKAGE_NAME OUT_VAR)
|
|
3
|
+
if(NOT DEFINED NODE_EXECUTABLE)
|
|
4
|
+
find_program(NODE_EXECUTABLE NAMES node)
|
|
5
|
+
endif()
|
|
6
|
+
|
|
7
|
+
if(NOT NODE_EXECUTABLE)
|
|
8
|
+
message(FATAL_ERROR "Unable to find node. Install Node.js before configuring Lynx library targets.")
|
|
9
|
+
endif()
|
|
10
|
+
|
|
11
|
+
if(NOT DEFINED LYNX_LIBRARY_PACKAGE_ROOT)
|
|
12
|
+
set(LYNX_LIBRARY_PACKAGE_ROOT "${CMAKE_CURRENT_SOURCE_DIR}")
|
|
13
|
+
endif()
|
|
14
|
+
|
|
15
|
+
execute_process(
|
|
16
|
+
COMMAND
|
|
17
|
+
"${NODE_EXECUTABLE}"
|
|
18
|
+
-p
|
|
19
|
+
"require('node:path').dirname(require.resolve('${PACKAGE_NAME}/package.json'))"
|
|
20
|
+
WORKING_DIRECTORY "${LYNX_LIBRARY_PACKAGE_ROOT}"
|
|
21
|
+
RESULT_VARIABLE NODE_PACKAGE_RESULT
|
|
22
|
+
OUTPUT_VARIABLE NODE_PACKAGE_ROOT
|
|
23
|
+
ERROR_VARIABLE NODE_PACKAGE_ERROR
|
|
24
|
+
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
if(NOT NODE_PACKAGE_RESULT EQUAL 0 OR NOT NODE_PACKAGE_ROOT)
|
|
28
|
+
string(REPLACE "\n" " " NODE_PACKAGE_ERROR "${NODE_PACKAGE_ERROR}")
|
|
29
|
+
message(FATAL_ERROR "Unable to resolve ${PACKAGE_NAME}. Run npm install first. ${NODE_PACKAGE_ERROR}")
|
|
30
|
+
endif()
|
|
31
|
+
|
|
32
|
+
set(${OUT_VAR} "${NODE_PACKAGE_ROOT}" PARENT_SCOPE)
|
|
33
|
+
endfunction()
|
|
34
|
+
endif()
|
|
35
|
+
|
|
36
|
+
get_filename_component(
|
|
37
|
+
LYNX_LIBRARY_HEADERS_PACKAGE_ROOT
|
|
38
|
+
"${CMAKE_CURRENT_LIST_DIR}/.."
|
|
39
|
+
ABSOLUTE
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
function(lynx_resolve_lynxtron_import_library OUT_VAR)
|
|
43
|
+
if(NOT WIN32)
|
|
44
|
+
set(${OUT_VAR} "" PARENT_SCOPE)
|
|
45
|
+
return()
|
|
46
|
+
endif()
|
|
47
|
+
|
|
48
|
+
if(DEFINED LYNXTRON_IMPORT_LIB)
|
|
49
|
+
file(TO_CMAKE_PATH "${LYNXTRON_IMPORT_LIB}" LYNXTRON_IMPORT_LIB_PATH)
|
|
50
|
+
if(NOT EXISTS "${LYNXTRON_IMPORT_LIB_PATH}")
|
|
51
|
+
message(FATAL_ERROR "LYNXTRON_IMPORT_LIB does not exist: ${LYNXTRON_IMPORT_LIB_PATH}")
|
|
52
|
+
endif()
|
|
53
|
+
|
|
54
|
+
set(${OUT_VAR} "${LYNXTRON_IMPORT_LIB_PATH}" PARENT_SCOPE)
|
|
55
|
+
return()
|
|
56
|
+
endif()
|
|
57
|
+
|
|
58
|
+
if(NOT DEFINED NODE_EXECUTABLE)
|
|
59
|
+
find_program(NODE_EXECUTABLE NAMES node)
|
|
60
|
+
endif()
|
|
61
|
+
|
|
62
|
+
if(NOT NODE_EXECUTABLE)
|
|
63
|
+
message(FATAL_ERROR "Unable to find node. Install Node.js before linking Lynxtron native libraries.")
|
|
64
|
+
endif()
|
|
65
|
+
|
|
66
|
+
if(NOT DEFINED LYNX_LIBRARY_PACKAGE_ROOT)
|
|
67
|
+
set(LYNX_LIBRARY_PACKAGE_ROOT "${CMAKE_CURRENT_SOURCE_DIR}")
|
|
68
|
+
endif()
|
|
69
|
+
|
|
70
|
+
execute_process(
|
|
71
|
+
COMMAND
|
|
72
|
+
"${NODE_EXECUTABLE}"
|
|
73
|
+
-e
|
|
74
|
+
"const path=require('node:path');const {createRequire}=require('node:module');try{const r=createRequire(path.join(process.argv[1],'package.json'));const p=r('@lynx-js/lynxtron/native-paths');process.stdout.write(p.importLibraryPath||'')}catch(e){process.exit(1)}"
|
|
75
|
+
"${LYNX_LIBRARY_HEADERS_PACKAGE_ROOT}"
|
|
76
|
+
WORKING_DIRECTORY "${LYNX_LIBRARY_PACKAGE_ROOT}"
|
|
77
|
+
RESULT_VARIABLE LYNXTRON_NATIVE_PATHS_RESULT
|
|
78
|
+
OUTPUT_VARIABLE LYNXTRON_IMPORT_LIB_FROM_PACKAGE
|
|
79
|
+
ERROR_QUIET
|
|
80
|
+
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
if(LYNXTRON_NATIVE_PATHS_RESULT EQUAL 0 AND LYNXTRON_IMPORT_LIB_FROM_PACKAGE)
|
|
84
|
+
file(TO_CMAKE_PATH "${LYNXTRON_IMPORT_LIB_FROM_PACKAGE}" LYNXTRON_IMPORT_LIB_FROM_PACKAGE_PATH)
|
|
85
|
+
if(EXISTS "${LYNXTRON_IMPORT_LIB_FROM_PACKAGE_PATH}")
|
|
86
|
+
set(${OUT_VAR} "${LYNXTRON_IMPORT_LIB_FROM_PACKAGE_PATH}" PARENT_SCOPE)
|
|
87
|
+
return()
|
|
88
|
+
endif()
|
|
89
|
+
endif()
|
|
90
|
+
|
|
91
|
+
execute_process(
|
|
92
|
+
COMMAND
|
|
93
|
+
"${NODE_EXECUTABLE}"
|
|
94
|
+
-p
|
|
95
|
+
"const path=require('node:path');const {createRequire}=require('node:module');const r=createRequire(path.join(process.argv[1],'package.json'));let p;try{p=r.resolve('@lynx-js/lynxtron/package.json')}catch(e){p=r.resolve('@lynx-js/lynxtron')}path.dirname(p)"
|
|
96
|
+
"${LYNX_LIBRARY_HEADERS_PACKAGE_ROOT}"
|
|
97
|
+
WORKING_DIRECTORY "${LYNX_LIBRARY_PACKAGE_ROOT}"
|
|
98
|
+
RESULT_VARIABLE LYNXTRON_PACKAGE_ROOT_RESULT
|
|
99
|
+
OUTPUT_VARIABLE LYNXTRON_PACKAGE_ROOT
|
|
100
|
+
ERROR_VARIABLE LYNXTRON_PACKAGE_ROOT_ERROR
|
|
101
|
+
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
if(NOT LYNXTRON_PACKAGE_ROOT_RESULT EQUAL 0 OR NOT LYNXTRON_PACKAGE_ROOT)
|
|
105
|
+
string(REPLACE "\n" " " LYNXTRON_PACKAGE_ROOT_ERROR "${LYNXTRON_PACKAGE_ROOT_ERROR}")
|
|
106
|
+
message(FATAL_ERROR "Unable to resolve @lynx-js/lynxtron. Run npm install first. ${LYNXTRON_PACKAGE_ROOT_ERROR}")
|
|
107
|
+
endif()
|
|
108
|
+
|
|
109
|
+
set(LYNXTRON_IMPORT_LIB_CANDIDATES
|
|
110
|
+
"${LYNXTRON_PACKAGE_ROOT}/dist/lynxtron.dll.lib"
|
|
111
|
+
"${LYNXTRON_PACKAGE_ROOT}/dist/win32/x64/lynxtron.dll.lib"
|
|
112
|
+
"${LYNXTRON_PACKAGE_ROOT}/dist/win32/x64/lynxtron/lynxtron.dll.lib"
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
foreach(LYNXTRON_IMPORT_LIB_CANDIDATE IN LISTS LYNXTRON_IMPORT_LIB_CANDIDATES)
|
|
116
|
+
if(EXISTS "${LYNXTRON_IMPORT_LIB_CANDIDATE}")
|
|
117
|
+
set(${OUT_VAR} "${LYNXTRON_IMPORT_LIB_CANDIDATE}" PARENT_SCOPE)
|
|
118
|
+
return()
|
|
119
|
+
endif()
|
|
120
|
+
endforeach()
|
|
121
|
+
|
|
122
|
+
message(FATAL_ERROR
|
|
123
|
+
"Unable to find lynxtron.dll.lib under @lynx-js/lynxtron. "
|
|
124
|
+
"Run npm install so @lynx-js/lynxtron downloads the Windows runtime, "
|
|
125
|
+
"or pass -DLYNXTRON_IMPORT_LIB=/absolute/path/to/lynxtron.dll.lib."
|
|
126
|
+
)
|
|
127
|
+
endfunction()
|
|
128
|
+
|
|
129
|
+
function(lynx_link_lynxtron_runtime TARGET_NAME)
|
|
130
|
+
if(NOT WIN32)
|
|
131
|
+
return()
|
|
132
|
+
endif()
|
|
133
|
+
|
|
134
|
+
lynx_resolve_lynxtron_import_library(LYNXTRON_RESOLVED_IMPORT_LIB)
|
|
135
|
+
target_link_libraries("${TARGET_NAME}" PRIVATE "${LYNXTRON_RESOLVED_IMPORT_LIB}")
|
|
136
|
+
endfunction()
|
|
@@ -21,6 +21,7 @@ LYNX_CAPI_EXPORT const char* lynx_env_get_icu_data_path();
|
|
|
21
21
|
|
|
22
22
|
// Lynx devtools
|
|
23
23
|
typedef void (*lynx_env_open_card_callback)(void* user_data, const char* url);
|
|
24
|
+
typedef void (*lynx_env_close_card_callback)(void* user_data);
|
|
24
25
|
|
|
25
26
|
LYNX_CAPI_EXPORT void lynx_env_set_devtool_app_info(const char* name,
|
|
26
27
|
const char* value);
|
|
@@ -29,6 +30,8 @@ LYNX_CAPI_EXPORT int lynx_env_is_devtool_enabled();
|
|
|
29
30
|
LYNX_CAPI_EXPORT int lynx_env_connect_devtool(const char* url);
|
|
30
31
|
LYNX_CAPI_EXPORT void lynx_env_set_open_card_callback(
|
|
31
32
|
lynx_env_open_card_callback callback, void* user_data);
|
|
33
|
+
LYNX_CAPI_EXPORT void lynx_env_set_close_card_callback(
|
|
34
|
+
lynx_env_close_card_callback callback, void* user_data);
|
|
32
35
|
// logbox
|
|
33
36
|
LYNX_CAPI_EXPORT void lynx_env_enable_logbox(int enable);
|
|
34
37
|
LYNX_CAPI_EXPORT int lynx_env_is_logbox_enabled();
|
|
@@ -21,6 +21,7 @@ LYNX_CAPI_EXPORT const char* lynx_env_get_icu_data_path();
|
|
|
21
21
|
|
|
22
22
|
// Lynx devtools
|
|
23
23
|
typedef void (*lynx_env_open_card_callback)(void* user_data, const char* url);
|
|
24
|
+
typedef void (*lynx_env_close_card_callback)(void* user_data);
|
|
24
25
|
|
|
25
26
|
LYNX_CAPI_EXPORT void lynx_env_set_devtool_app_info(const char* name,
|
|
26
27
|
const char* value);
|
|
@@ -29,6 +30,8 @@ LYNX_CAPI_EXPORT int lynx_env_is_devtool_enabled();
|
|
|
29
30
|
LYNX_CAPI_EXPORT int lynx_env_connect_devtool(const char* url);
|
|
30
31
|
LYNX_CAPI_EXPORT void lynx_env_set_open_card_callback(
|
|
31
32
|
lynx_env_open_card_callback callback, void* user_data);
|
|
33
|
+
LYNX_CAPI_EXPORT void lynx_env_set_close_card_callback(
|
|
34
|
+
lynx_env_close_card_callback callback, void* user_data);
|
|
32
35
|
// logbox
|
|
33
36
|
LYNX_CAPI_EXPORT void lynx_env_enable_logbox(int enable);
|
|
34
37
|
LYNX_CAPI_EXPORT int lynx_env_is_logbox_enabled();
|
|
@@ -26,6 +26,8 @@ class LynxEnv {
|
|
|
26
26
|
bool ConnectDevtool(const char* url);
|
|
27
27
|
void SetOpenCardCallback(lynx_env_open_card_callback callback,
|
|
28
28
|
void* user_data);
|
|
29
|
+
void SetCloseCardCallback(lynx_env_close_card_callback callback,
|
|
30
|
+
void* user_data);
|
|
29
31
|
void SetLogboxEnabled(bool enable);
|
|
30
32
|
bool IsLogboxEnabled();
|
|
31
33
|
void RegisterNativeModule(const std::string& module_name,
|
|
@@ -78,6 +80,11 @@ inline void LynxEnv::SetOpenCardCallback(lynx_env_open_card_callback callback,
|
|
|
78
80
|
lynx_env_set_open_card_callback(callback, user_data);
|
|
79
81
|
}
|
|
80
82
|
|
|
83
|
+
inline void LynxEnv::SetCloseCardCallback(lynx_env_close_card_callback callback,
|
|
84
|
+
void* user_data) {
|
|
85
|
+
lynx_env_set_close_card_callback(callback, user_data);
|
|
86
|
+
}
|
|
87
|
+
|
|
81
88
|
inline void LynxEnv::SetLogboxEnabled(bool enable) {
|
|
82
89
|
lynx_env_enable_logbox(enable);
|
|
83
90
|
}
|
package/include/lynx_env.h
CHANGED
|
@@ -26,6 +26,8 @@ class LynxEnv {
|
|
|
26
26
|
bool ConnectDevtool(const char* url);
|
|
27
27
|
void SetOpenCardCallback(lynx_env_open_card_callback callback,
|
|
28
28
|
void* user_data);
|
|
29
|
+
void SetCloseCardCallback(lynx_env_close_card_callback callback,
|
|
30
|
+
void* user_data);
|
|
29
31
|
void SetLogboxEnabled(bool enable);
|
|
30
32
|
bool IsLogboxEnabled();
|
|
31
33
|
void RegisterNativeModule(const std::string& module_name,
|
|
@@ -78,6 +80,11 @@ inline void LynxEnv::SetOpenCardCallback(lynx_env_open_card_callback callback,
|
|
|
78
80
|
lynx_env_set_open_card_callback(callback, user_data);
|
|
79
81
|
}
|
|
80
82
|
|
|
83
|
+
inline void LynxEnv::SetCloseCardCallback(lynx_env_close_card_callback callback,
|
|
84
|
+
void* user_data) {
|
|
85
|
+
lynx_env_set_close_card_callback(callback, user_data);
|
|
86
|
+
}
|
|
87
|
+
|
|
81
88
|
inline void LynxEnv::SetLogboxEnabled(bool enable) {
|
|
82
89
|
lynx_env_enable_logbox(enable);
|
|
83
90
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lynx-js/lynx-library-headers",
|
|
3
3
|
"author": "Lynxtron Authors",
|
|
4
|
-
"version": "0.0.1-alpha.
|
|
4
|
+
"version": "0.0.1-alpha.7",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Lynx embedder C/C++ API and weak N-API headers for native libraries",
|
|
7
7
|
"repository": {
|
|
@@ -21,8 +21,12 @@
|
|
|
21
21
|
],
|
|
22
22
|
"files": [
|
|
23
23
|
"include/**/*",
|
|
24
|
+
"cmake/**/*",
|
|
24
25
|
"README.md"
|
|
25
26
|
],
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"@lynx-js/lynxtron": "0.0.1-alpha.7"
|
|
29
|
+
},
|
|
26
30
|
"engines": {
|
|
27
31
|
"node": ">=18"
|
|
28
32
|
}
|