aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile8
-rw-r--r--bench/ffi/plus100/plus100.bun.js10
-rw-r--r--src/symbols.dyn127
-rw-r--r--src/symbols.txt33
4 files changed, 153 insertions, 25 deletions
diff --git a/Makefile b/Makefile
index cae8af742..cc272fdad 100644
--- a/Makefile
+++ b/Makefile
@@ -272,7 +272,8 @@ PLATFORM_LINKER_FLAGS =
ifeq ($(OS_NAME), darwin)
PLATFORM_LINKER_FLAGS += -DDU_DISABLE_RENAMING=1 \
-lstdc++ \
- -fno-keep-static-consts
+ -fno-keep-static-consts \
+ -exported_symbols_list $(realpath src/symbols.txt)
endif
@@ -331,7 +332,8 @@ PLATFORM_LINKER_FLAGS = $(CFLAGS) \
-Wl,-Bsymbolic-functions \
-fno-semantic-interposition \
-flto \
- -Wl,--allow-multiple-definition
+ -Wl,--allow-multiple-definition \
+ -Wl,--dynamic-list $(realpath src/symbols.dyn)
ARCHIVE_FILES_WITHOUT_LIBCRYPTO += $(BUN_DEPS_OUT_DIR)/libbacktrace.a
endif
@@ -345,7 +347,7 @@ BUN_LLD_FLAGS_WITHOUT_JSC = $(ARCHIVE_FILES) \
-BUN_LLD_FLAGS = $(BUN_LLD_FLAGS_WITHOUT_JSC) $(JSC_BINDINGS) ${ICU_FLAGS} -exported_symbols_list $(realpath src/symbols.txt)
+BUN_LLD_FLAGS = $(BUN_LLD_FLAGS_WITHOUT_JSC) $(JSC_BINDINGS) ${ICU_FLAGS}
CLANG_VERSION = $(shell $(CC) --version | awk '/version/ {for(i=1; i<=NF; i++){if($$i=="version"){split($$(i+1),v,".");print v[1]}}}')
diff --git a/bench/ffi/plus100/plus100.bun.js b/bench/ffi/plus100/plus100.bun.js
index 0322b8f01..d40b81ae3 100644
--- a/bench/ffi/plus100/plus100.bun.js
+++ b/bench/ffi/plus100/plus100.bun.js
@@ -1,5 +1,6 @@
import { run, bench, group, baseline } from "mitata";
import { dlopen, suffix } from "bun:ffi";
+import { readdirSync } from "fs";
const {
symbols: {
@@ -7,7 +8,7 @@ const {
noop,
},
close,
-} = dlopen(`./plus100.${suffix}`, {
+} = dlopen(`./plus100.dylib`, {
plus100: {
args: ["int32_t"],
returns: "int32_t",
@@ -16,9 +17,10 @@ const {
args: [],
},
});
-const napi = { exports: {} };
-process.dlopen(napi, "plus100-napi/package-template.darwin-arm64.node");
-const { plus100: plus100napi, noop: noopNapi } = napi.exports;
+const {
+ plus100: plus100napi,
+ noop: noopNapi,
+} = require("./plus100-napi/index.js");
group("plus100", () => {
bench("plus100(1) ffi", () => {
diff --git a/src/symbols.dyn b/src/symbols.dyn
new file mode 100644
index 000000000..7957ef59a
--- /dev/null
+++ b/src/symbols.dyn
@@ -0,0 +1,127 @@
+{
+ _napi_acquire_threadsafe_function;
+ _napi_add_async_cleanup_hook;
+ _napi_add_env_cleanup_hook;
+ _napi_add_finalizer;
+ _napi_adjust_external_memory;
+ _napi_call_function;
+ _napi_call_threadsafe_function;
+ _napi_cancel_async_work;
+ _napi_close_handle_scope;
+ _napi_coerce_to_bool;
+ _napi_coerce_to_number;
+ _napi_coerce_to_object;
+ _napi_coerce_to_string;
+ _napi_create_array_with_length;
+ _napi_create_array;
+ _napi_create_arraybuffer;
+ _napi_create_async_work;
+ _napi_create_bigint_int64;
+ _napi_create_bigint_uint64;
+ _napi_create_buffer_copy;
+ _napi_create_buffer;
+ _napi_create_dataview;
+ _napi_create_date;
+ _napi_create_double;
+ _napi_create_error;
+ _napi_create_external_arraybuffer;
+ _napi_create_external_buffer;
+ _napi_create_function;
+ _napi_create_int32;
+ _napi_create_int64;
+ _napi_create_object;
+ _napi_create_promise;
+ _napi_create_range_error;
+ _napi_create_reference;
+ _napi_create_string_latin1;
+ _napi_create_string_utf16;
+ _napi_create_string_utf8;
+ _napi_create_symbol;
+ _napi_create_threadsafe_function;
+ _napi_create_type_error;
+ _napi_create_typedarray;
+ _napi_create_uint32;
+ _napi_define_class;
+ _napi_define_properties;
+ _napi_delete_async_work;
+ _napi_delete_property;
+ _napi_delete_reference;
+ _napi_detach_arraybuffer;
+ _napi_fatal_error;
+ _napi_get_all_property_names;
+ _napi_get_and_clear_last_exception;
+ _napi_get_array_length;
+ _napi_get_arraybuffer_info;
+ _napi_get_boolean;
+ _napi_get_buffer_info;
+ _napi_get_cb_info;
+ _napi_get_dataview_info;
+ _napi_get_date_value;
+ _napi_get_element;
+ _napi_get_global;
+ _napi_get_last_error_info;
+ _napi_get_named_property;
+ _napi_get_new_target;
+ _napi_get_node_version;
+ _napi_get_null;
+ _napi_get_property;
+ _napi_get_prototype;
+ _napi_get_reference_value;
+ _napi_get_threadsafe_function_context;
+ _napi_get_typedarray_info;
+ _napi_get_undefined;
+ _napi_get_uv_event_loop;
+ _napi_get_value_bigint_int64;
+ _napi_get_value_bigint_uint64;
+ _napi_get_value_bool;
+ _napi_get_value_double;
+ _napi_get_value_int32;
+ _napi_get_value_int64;
+ _napi_get_value_string_latin1;
+ _napi_get_value_string_utf16;
+ _napi_get_value_string_utf8;
+ _napi_get_value_uint32;
+ _napi_get_version;
+ _napi_has_element;
+ _napi_has_named_property;
+ _napi_has_own_property;
+ _napi_has_property;
+ _napi_instanceof;
+ _napi_is_array;
+ _napi_is_arraybuffer;
+ _napi_is_buffer;
+ _napi_is_dataview;
+ _napi_is_date;
+ _napi_is_detached_arraybuffer;
+ _napi_is_error;
+ _napi_is_exception_pending;
+ _napi_is_promise;
+ _napi_is_typedarray;
+ _napi_module_register;
+ _napi_new_instance;
+ _napi_object_freeze;
+ _napi_object_seal;
+ _napi_open_handle_scope;
+ _napi_queue_async_work;
+ _napi_ref_threadsafe_function;
+ _napi_reference_ref;
+ _napi_reference_unref;
+ _napi_reject_deferred;
+ _napi_release_threadsafe_function;
+ _napi_remove_async_cleanup_hook;
+ _napi_remove_env_cleanup_hook;
+ _napi_resolve_deferred;
+ _napi_run_script;
+ _napi_set_element;
+ _napi_set_named_property;
+ _napi_set_property;
+ _napi_strict_equals;
+ _napi_throw_error;
+ _napi_throw_range_error;
+ _napi_throw_type_error;
+ _napi_throw;
+ _napi_typeof;
+ _napi_unref_threadsafe_function;
+ _napi_unwrap;
+ _napi_wrap;
+}; \ No newline at end of file
diff --git a/src/symbols.txt b/src/symbols.txt
index 2b2cd556e..3ac1fa843 100644
--- a/src/symbols.txt
+++ b/src/symbols.txt
@@ -1,7 +1,8 @@
-
_napi_acquire_threadsafe_function
_napi_add_async_cleanup_hook
_napi_add_env_cleanup_hook
+_napi_add_finalizer
+_napi_adjust_external_memory
_napi_call_function
_napi_call_threadsafe_function
_napi_cancel_async_work
@@ -9,6 +10,7 @@ _napi_close_handle_scope
_napi_coerce_to_bool
_napi_coerce_to_number
_napi_coerce_to_object
+_napi_coerce_to_string
_napi_create_array
_napi_create_array_with_length
_napi_create_arraybuffer
@@ -35,12 +37,18 @@ _napi_create_string_utf16
_napi_create_string_utf8
_napi_create_symbol
_napi_create_threadsafe_function
+_napi_create_type_error
_napi_create_typedarray
_napi_create_uint32
+_napi_define_class
+_napi_define_properties
_napi_delete_async_work
_napi_delete_property
+_napi_delete_reference
_napi_detach_arraybuffer
_napi_fatal_error
+_napi_get_all_property_names
+_napi_get_and_clear_last_exception
_napi_get_array_length
_napi_get_arraybuffer_info
_napi_get_boolean
@@ -50,12 +58,14 @@ _napi_get_dataview_info
_napi_get_date_value
_napi_get_element
_napi_get_global
+_napi_get_last_error_info
_napi_get_named_property
_napi_get_new_target
_napi_get_node_version
_napi_get_null
_napi_get_property
_napi_get_prototype
+_napi_get_reference_value
_napi_get_threadsafe_function_context
_napi_get_typedarray_info
_napi_get_undefined
@@ -83,6 +93,7 @@ _napi_is_dataview
_napi_is_date
_napi_is_detached_arraybuffer
_napi_is_error
+_napi_is_exception_pending
_napi_is_promise
_napi_is_typedarray
_napi_module_register
@@ -92,6 +103,8 @@ _napi_object_seal
_napi_open_handle_scope
_napi_queue_async_work
_napi_ref_threadsafe_function
+_napi_reference_ref
+_napi_reference_unref
_napi_reject_deferred
_napi_release_threadsafe_function
_napi_remove_async_cleanup_hook
@@ -108,21 +121,5 @@ _napi_throw_range_error
_napi_throw_type_error
_napi_typeof
_napi_unref_threadsafe_function
-_napi_coerce_to_string
-#_napi_delete_element
-_napi_get_all_property_names
-#_napi_make_callback
-_napi_define_class
-_napi_create_type_error
-_napi_define_properties
-_napi_wrap
_napi_unwrap
-_napi_reference_unref
-_napi_reference_ref
-_napi_get_reference_value
-_napi_delete_reference
-_napi_adjust_external_memory
-_napi_is_exception_pending
-_napi_get_and_clear_last_exception
-_napi_get_last_error_info
-_napi_add_finalizer \ No newline at end of file
+_napi_wrap