From 40d8518253c2566fe9ba947c2e1fbce160a55940 Mon Sep 17 00:00:00 2001 From: xavier Date: Sun, 23 May 2021 16:51:22 +0200 Subject: [PATCH 1/2] apply -flto and -ffunction-sections when compiling libc++ --- src/libcxx.zig | 4 ++++ src/libunwind.zig | 2 ++ 2 files changed, 6 insertions(+) diff --git a/src/libcxx.zig b/src/libcxx.zig index e235403d40..39c5fabedd 100644 --- a/src/libcxx.zig +++ b/src/libcxx.zig @@ -174,6 +174,8 @@ pub fn buildLibCXX(comp: *Compilation) !void { .want_tsan = comp.bin_file.options.tsan, .want_pic = comp.bin_file.options.pic, .want_pie = comp.bin_file.options.pie, + .want_lto = comp.bin_file.options.lto, + .function_sections = comp.bin_file.options.function_sections, .emit_h = null, .strip = comp.compilerRtStrip(), .is_native_os = comp.bin_file.options.is_native_os, @@ -292,6 +294,8 @@ pub fn buildLibCXXABI(comp: *Compilation) !void { .want_tsan = comp.bin_file.options.tsan, .want_pic = comp.bin_file.options.pic, .want_pie = comp.bin_file.options.pie, + .want_lto = comp.bin_file.options.lto, + .function_sections = comp.bin_file.options.function_sections, .emit_h = null, .strip = comp.compilerRtStrip(), .is_native_os = comp.bin_file.options.is_native_os, diff --git a/src/libunwind.zig b/src/libunwind.zig index c2d0475d6f..7e1fe3f9b7 100644 --- a/src/libunwind.zig +++ b/src/libunwind.zig @@ -113,6 +113,8 @@ pub fn buildStaticLib(comp: *Compilation) !void { .want_tsan = false, .want_pic = comp.bin_file.options.pic, .want_pie = comp.bin_file.options.pie, + .want_lto = comp.bin_file.options.lto, + .function_sections = comp.bin_file.options.function_sections, .emit_h = null, .strip = comp.compilerRtStrip(), .is_native_os = comp.bin_file.options.is_native_os, From a6e65f3a0ea4f8315be50f91338e4526b006f9d8 Mon Sep 17 00:00:00 2001 From: xavier Date: Sun, 23 May 2021 16:53:47 +0200 Subject: [PATCH 2/2] keep statically linked libc++ symbols hidden. --- src/libcxx.zig | 5 ++++- src/libunwind.zig | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/libcxx.zig b/src/libcxx.zig index 39c5fabedd..4816637e2d 100644 --- a/src/libcxx.zig +++ b/src/libcxx.zig @@ -129,6 +129,8 @@ pub fn buildLibCXX(comp: *Compilation) !void { try cflags.append("-D_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS"); try cflags.append("-D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS"); try cflags.append("-D_LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS"); + try cflags.append("-fvisibility=hidden"); + try cflags.append("-fvisibility-inlines-hidden"); if (target.abi.isMusl()) { try cflags.append("-D_LIBCPP_HAS_MUSL_LIBC"); @@ -144,7 +146,6 @@ pub fn buildLibCXX(comp: *Compilation) !void { try cflags.append("-fPIC"); } try cflags.append("-nostdinc++"); - try cflags.append("-fvisibility-inlines-hidden"); try cflags.append("-std=c++14"); try cflags.append("-Wno-user-defined-literals"); @@ -249,6 +250,8 @@ pub fn buildLibCXXABI(comp: *Compilation) !void { try cflags.append("-D_LIBCXXABI_BUILDING_LIBRARY"); try cflags.append("-D_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS"); try cflags.append("-D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS"); + try cflags.append("-fvisibility=hidden"); + try cflags.append("-fvisibility-inlines-hidden"); if (target.abi.isMusl()) { try cflags.append("-D_LIBCPP_HAS_MUSL_LIBC"); diff --git a/src/libunwind.zig b/src/libunwind.zig index 7e1fe3f9b7..d918249544 100644 --- a/src/libunwind.zig +++ b/src/libunwind.zig @@ -69,6 +69,8 @@ pub fn buildStaticLib(comp: *Compilation) !void { } try cflags.append("-D_LIBUNWIND_DISABLE_VISIBILITY_ANNOTATIONS"); try cflags.append("-Wa,--noexecstack"); + try cflags.append("-fvisibility=hidden"); + try cflags.append("-fvisibility-inlines-hidden"); // This is intentionally always defined because the macro definition means, should it only // build for the target specified by compiler defines. Since we pass -target the compiler