diff options
author | 2022-05-11 03:45:00 -0700 | |
---|---|---|
committer | 2022-05-11 03:45:00 -0700 | |
commit | 247f4810c56c89e3a0fb5c2f87875a3923f5ab87 (patch) | |
tree | 65d339b4c113e4547f2351c148f8a8f043d8d118 | |
parent | 47b6dc9eea9ccf93e217bf61492af4d52ac7ef3f (diff) | |
download | bun-247f4810c56c89e3a0fb5c2f87875a3923f5ab87.tar.gz bun-247f4810c56c89e3a0fb5c2f87875a3923f5ab87.tar.zst bun-247f4810c56c89e3a0fb5c2f87875a3923f5ab87.zip |
Fix export symbols on Linux
-rw-r--r-- | Makefile | 8 | ||||
-rw-r--r-- | bench/ffi/plus100/plus100.bun.js | 10 | ||||
-rw-r--r-- | src/symbols.dyn | 127 | ||||
-rw-r--r-- | src/symbols.txt | 33 |
4 files changed, 153 insertions, 25 deletions
@@ -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 |