1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-22 15:24:46 -05:00
denoland-deno/cli/napi_sym
Luke Channings d2c8b5f087
fix(build) fix linux symbols export list format (#16313)
Fixes the error reported in #16304.

> = note:
/usr/bin/ld:/home/abotella/Projects/deno/cli/generated_symbol_exports_list_linux.def:1:
syntax error in dynamic list
          collect2: error: ld returned 1 exit status

This was caused by the format of the symbols list on Linux being
malformed (as the error implies).
The format is documented in ld's
[VERSION](https://sourceware.org/binutils/docs/ld/VERSION.html) as well
as:

>  --export-dynamic-symbol-list=file
           Specify a --export-dynamic-symbol for each pattern in the
           file.  The format of the file is the same as the version node
           without scope and node name.  See VERSION for more
           information.

Previously, the format for the Linux symbols list was simply a list of
symbols, now it follows the format:

```
{ symbol_name_a;  ...; symbol_name_z };
```
2022-10-17 00:53:35 +02:00
..
Cargo.toml chore(napi_sym): fix readme path (#16203) 2022-10-08 19:32:34 +05:30
generated_symbol_exports_list_linux.def fix(build) fix linux symbols export list format (#16313) 2022-10-17 00:53:35 +02:00
generated_symbol_exports_list_macos.def fix(build) fix linux symbols export list format (#16313) 2022-10-17 00:53:35 +02:00
generated_symbol_exports_list_windows.def fix(build) fix linux symbols export list format (#16313) 2022-10-17 00:53:35 +02:00
lib.rs fix(napi): move napi symbols file (#16179) 2022-10-07 09:21:43 +05:30
README.md refactor(build): better handle old glibc (#16238) 2022-10-15 20:51:04 +05:30
symbol_exports.json fix(napi): move napi symbols file (#16179) 2022-10-07 09:21:43 +05:30

napi_sym

A proc_macro for Deno's Node-API implementation. It does the following things:

  • Marks the symbol as #[no_mangle] and rewrites it as pub extern "C" $name.
  • Asserts that the function symbol is present in symbol_exports.json.
  • Maps deno_napi::Result to raw napi_result.
use deno_napi::{napi_value, Env, Error, Result};

#[napi_sym::napi_sym]
fn napi_get_boolean(
  env: *mut Env,
  value: bool,
  result: *mut napi_value,
) -> Result {
  let _env: &mut Env = env.as_mut().ok_or(Error::InvalidArg)?;
  // *result = ...
  Ok(())
}

symbol_exports.json

A file containing the symbols that need to be put into the executable's dynamic symbol table at link-time.

This is done using /DEF: on Windows, -exported_symbol,_ on macOS and --export-dynamic-symbol= on Linux. See cli/build.rs.

On Windows, you need to generate the .def file by running tools/napi/generate_symbols_lists.js.