diff --git a/ext/zstdruby/exports.txt b/ext/zstdruby/exports.txt new file mode 100644 index 0000000..f1607c0 --- /dev/null +++ b/ext/zstdruby/exports.txt @@ -0,0 +1 @@ +_Init_zstdruby \ No newline at end of file diff --git a/ext/zstdruby/extconf.rb b/ext/zstdruby/extconf.rb index f153b7e..4ed2b2d 100644 --- a/ext/zstdruby/extconf.rb +++ b/ext/zstdruby/extconf.rb @@ -2,9 +2,14 @@ have_func('rb_gc_mark_movable') -$CFLAGS = '-I. -O3 -std=c99 -DZSTD_STATIC_LINKING_ONLY -DZSTD_MULTITHREAD -pthread -DDEBUGLEVEL=0' +$CFLAGS = '-I. -O3 -std=c99 -DZSTD_STATIC_LINKING_ONLY -DZSTD_MULTITHREAD -pthread -DDEBUGLEVEL=0 -fvisibility=hidden -DZSTDLIB_VISIBLE=\'__attribute__((visibility("hidden")))\' -DZSTDLIB_HIDDEN=\'__attribute__((visibility("hidden")))\'' $CPPFLAGS += " -fdeclspec" if CONFIG['CXX'] =~ /clang/ +# macOS specific: Use exported_symbols_list to control symbol visibility +if RUBY_PLATFORM =~ /darwin/ + $LDFLAGS += " -exported_symbols_list #{File.expand_path('exports.txt', __dir__)}" +end + Dir.chdir File.expand_path('..', __FILE__) do $srcs = Dir['**/*.c', '**/*.S'] diff --git a/ext/zstdruby/main.c b/ext/zstdruby/main.c index e859fa0..5497b0e 100644 --- a/ext/zstdruby/main.c +++ b/ext/zstdruby/main.c @@ -8,7 +8,7 @@ void zstd_ruby_skippable_frame_init(void); void zstd_ruby_streaming_compress_init(void); void zstd_ruby_streaming_decompress_init(void); -void +RUBY_FUNC_EXPORTED void Init_zstdruby(void) { #ifdef HAVE_RB_EXT_RACTOR_SAFE