build: set CMAKE_VISIBILITY_INLINES_HIDDEN in REDUCE_EXPORTS #35795

pull fanquake wants to merge 1 commits into bitcoin:master from fanquake:add_CMAKE_VISIBILITY_INLINES_HIDDEN changing 1 files +1 −0
  1. fanquake commented at 5:32 PM on July 24, 2026: member

    This was originally part of the CMake switchover, but was removed because it was an addition, rather than a port. Add it now.

    See https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Dialect-Options.html#index-fvisibility-inlines-hidden:

    This switch declares that the user does not attempt to compare pointers to inline functions or methods where the addresses of the two functions are taken in different shared objects.

    The effect of this is that GCC may, effectively, mark inline methods with attribute ((visibility ("hidden"))) so that they do not appear in the export table of a DSO

    See also https://cmake.org/cmake/help/latest/prop_tgt/VISIBILITY_INLINES_HIDDEN.html.

    When building for macOS, this will also enable -fvisibility-inlines-hidden-static-local-var.

  2. build: set CMAKE_VISIBILITY_INLINES_HIDDEN in REDUCE_EXPORTS
    This was originally part of the CMake switchover, but was removed
    because it was an addition, rather than a port. Add it now.
    
    > This switch declares that the user does not attempt to compare pointers
    > to inline functions or methods where the addresses of the two functions
    > are taken in different shared objects.
    
    > The effect of this is that GCC may, effectively, mark inline methods
    > with __attribute__ ((visibility ("hidden"))) so that they do not appear
    > in the export table of a DSO
    
    See https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Dialect-Options.html.
    
    See also
    https://cmake.org/cmake/help/latest/prop_tgt/VISIBILITY_INLINES_HIDDEN.html.
    
    Co-authored-by: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com>
    3f313a774b
  3. DrahtBot added the label Build system on Jul 24, 2026
  4. DrahtBot commented at 5:32 PM on July 24, 2026: contributor

    <!--e57a25ab6845829454e8d69fc972939a-->

    The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

    <!--006a51241073e994b41acfe9ec718e94-->

    Code Coverage & Benchmarks

    For details see: https://corecheck.dev/bitcoin/bitcoin/pulls/35795.

    <!--021abf342d371248e50ceaed478a90ca-->

    Reviews

    See the guideline and AI policy for information on the review process.

    Type Reviewers
    ACK purpleKarrot, 151henry151, hebasto

    If your review is incorrectly listed, please copy-paste <code>&lt;!--meta-tag:bot-skip--&gt;</code> into the comment that the bot should ignore.

    <!--5faf32d7da4f0f540f40219e4f7537a3-->

  5. fanquake commented at 5:32 PM on July 24, 2026: member
  6. hebasto commented at 9:40 AM on July 26, 2026: member

    Concept ACK.

    The size of libbitcoinkernel.so is reduced as expected. For example, on Fedora 44 (GCC 16.1.1, no debug info):

    $ ls -l build-master/lib/*.so
    -rwxr-xr-x. 1 hebasto hebasto 4820640 Jul 26 09:33 build-master/lib/libbitcoinkernel.so
    $ ls -l build-pr35795/lib/*.so
    -rwxr-xr-x. 1 hebasto hebasto 4800160 Jul 26 09:47 build-pr35795/lib/libbitcoinkernel.so
    

    The most affected section is .dynstr:

    $ objdump -h build-master/lib/libbitcoinkernel.so | grep \.dynstr
      7 .dynstr       0000882b  0000000000265980  0000000000265980  00265980  2**0
    $ objdump -h build-pr35795/lib/libbitcoinkernel.so | grep \.dynstr
      7 .dynstr       0000576c  0000000000264768  0000000000264768  00264768  2**0
    

    It seems worth noting in the PR description and/or the commit message that when building for macOS, Clang also applies -fvisibility-inlines-hidden-static-local-var.

  7. hebasto commented at 9:40 AM on July 26, 2026: member
  8. purpleKarrot commented at 11:27 AM on July 26, 2026: contributor

    ACK 3f313a774bec86c09bd8b7151288306ff615e047

  9. DrahtBot requested review from hebasto on Jul 26, 2026
  10. 151henry151 commented at 5:37 AM on July 27, 2026: contributor

    Tested ACK 3f313a774bec86c09bd8b7151288306ff615e047

    Debian 13 / GCC 14.2.0, built parent and tip with REDUCE_EXPORTS=ON (and BUILD_KERNEL_LIB / BUILD_SHARED_LIBS).

    $ ls -l build-master/lib/libbitcoinkernel.so build-pr/lib/libbitcoinkernel.so
    -rwxr-xr-x 1 henry henry 7058424 build-master/lib/libbitcoinkernel.so
    -rwxr-xr-x 1 henry henry 7037944 build-pr/lib/libbitcoinkernel.so
    
    $ nm -D --defined-only build-master/lib/libbitcoinkernel.so | wc -l
    378
    $ nm -D --defined-only build-pr/lib/libbitcoinkernel.so | wc -l
    213
    

    The 134 btck_* exports are identical; the dropped symbols are libstdc++ inlines. -fvisibility-inlines-hidden only appears when REDUCE_EXPORTS is on. test_bitcoin passed.

  11. fanquake commented at 3:43 PM on July 28, 2026: member

    Guix Build (aarch64):

    e4acfec0a7b50116cb293cad101a9a26f9f6be7c2101e828b8142db0b3983f63  guix-build-3f313a774bec/output/aarch64-linux-gnu/SHA256SUMS.part
    432514b49a563301895572700f99d2b737a845118f2f85f6d8c2e605e2aae5df  guix-build-3f313a774bec/output/aarch64-linux-gnu/bitcoin-3f313a774bec-aarch64-linux-gnu-debug.tar.gz
    e4dd9f96a3717abd29dedbc0e02b267486cbf520cc50c542a2709afbf6253a96  guix-build-3f313a774bec/output/aarch64-linux-gnu/bitcoin-3f313a774bec-aarch64-linux-gnu.tar.gz
    ac36fc53927ebefe24bbc89f4ef0607c91505dc12d63a42f35cdc33afcfa31f0  guix-build-3f313a774bec/output/arm-linux-gnueabihf/SHA256SUMS.part
    182befb1e189da9fe6e41819987f25fd0026040d2ceb520e6b1b2a62f453b222  guix-build-3f313a774bec/output/arm-linux-gnueabihf/bitcoin-3f313a774bec-arm-linux-gnueabihf-debug.tar.gz
    15bcda77d1ad7d652412bd12918cced79ad25e429a606176809d9423b864051a  guix-build-3f313a774bec/output/arm-linux-gnueabihf/bitcoin-3f313a774bec-arm-linux-gnueabihf.tar.gz
    d9c2e32d32d7aedc77219195d4cbbf828e160dbf605cf18a168b0eb657b3deb5  guix-build-3f313a774bec/output/arm64-apple-darwin/SHA256SUMS.part
    3806a9fbec91830590f6f35cc298f874885ec883e4caaef17ec9b6c61561595b  guix-build-3f313a774bec/output/arm64-apple-darwin/bitcoin-3f313a774bec-arm64-apple-darwin-codesigning.tar.gz
    62cc2b799fbc1b1c05a3e179c233578080630863342aa97390c18a69372b62e2  guix-build-3f313a774bec/output/arm64-apple-darwin/bitcoin-3f313a774bec-arm64-apple-darwin-unsigned.tar.gz
    26a26030b967f50f6204b8c6193b33c194812cc8cb4ceacc00ec79397d31a854  guix-build-3f313a774bec/output/arm64-apple-darwin/bitcoin-3f313a774bec-arm64-apple-darwin-unsigned.zip
    5673f3a6e49c8491f465732b9184ac78fd9a0d7e04c30f63ea15ed589e9c1b05  guix-build-3f313a774bec/output/dist-archive/bitcoin-3f313a774bec.tar.gz
    c9b67ad05c8ca8ceabd70070ea535d22eaae0f71b9ab331646104c0bc4fabe61  guix-build-3f313a774bec/output/powerpc64-linux-gnu/SHA256SUMS.part
    b37dab3ae5b289fa8f6738a5709928d20008ec7fb218652c14963d05eb4f845e  guix-build-3f313a774bec/output/powerpc64-linux-gnu/bitcoin-3f313a774bec-powerpc64-linux-gnu-debug.tar.gz
    7ca9b582e09424135abe0177b2e4b75ddc819e9f9b37194ed3f16fbc027c6e08  guix-build-3f313a774bec/output/powerpc64-linux-gnu/bitcoin-3f313a774bec-powerpc64-linux-gnu.tar.gz
    3a89b59065a215e0df6ee694894ea1043548f9180c249487d6dc29ef2425c108  guix-build-3f313a774bec/output/riscv64-linux-gnu/SHA256SUMS.part
    5586e28b25e1c93f39c2ba4152b15d00fc2636b305062f40649f5063a903558e  guix-build-3f313a774bec/output/riscv64-linux-gnu/bitcoin-3f313a774bec-riscv64-linux-gnu-debug.tar.gz
    5ed34a0388ad67e6fa038a17e6b09b53ff87f1dc560fcd3fb5604f15df2f47be  guix-build-3f313a774bec/output/riscv64-linux-gnu/bitcoin-3f313a774bec-riscv64-linux-gnu.tar.gz
    dfa179480646a68daec635378625d3befc9aa0096c7ad7bc4bab7da45158d3e9  guix-build-3f313a774bec/output/x86_64-apple-darwin/SHA256SUMS.part
    fd9adb3ae6eed212bcb3b123df2dfa942b800900dcc2b3c6b3f422f408d841ad  guix-build-3f313a774bec/output/x86_64-apple-darwin/bitcoin-3f313a774bec-x86_64-apple-darwin-codesigning.tar.gz
    e10e28f2947c83ec52d96bddefb8ce86e60944bee0d1bf375acdadcf268528bd  guix-build-3f313a774bec/output/x86_64-apple-darwin/bitcoin-3f313a774bec-x86_64-apple-darwin-unsigned.tar.gz
    2e41084f2e67688d2db7b7bef120638c78b9b04ff716d0d31cb4bbaaefebabd6  guix-build-3f313a774bec/output/x86_64-apple-darwin/bitcoin-3f313a774bec-x86_64-apple-darwin-unsigned.zip
    1533905d96440fd26f7d64a79c724d1c53e16c074b716ab2229e70515569627f  guix-build-3f313a774bec/output/x86_64-linux-gnu/SHA256SUMS.part
    cbcfbabc8aa87b639729bb56715a741f17719cca87e7d8aa3459b5415fe27ae7  guix-build-3f313a774bec/output/x86_64-linux-gnu/bitcoin-3f313a774bec-x86_64-linux-gnu-debug.tar.gz
    db1aaaa582a050daf99801bac35cfb34460a27a5743999ad58f996b8b212bfd1  guix-build-3f313a774bec/output/x86_64-linux-gnu/bitcoin-3f313a774bec-x86_64-linux-gnu.tar.gz
    efe3cb57f00b2e63b41863672ed9f6740c715e8023d43f714db4325d8b414b23  guix-build-3f313a774bec/output/x86_64-w64-mingw32/SHA256SUMS.part
    0a760baa9071f01ec26f999538dbb92d94a39cdfb9bbe27b361d622e03b78556  guix-build-3f313a774bec/output/x86_64-w64-mingw32/bitcoin-3f313a774bec-win64-codesigning.tar.gz
    ac6a2ae0fc93fcd940b930a837bfba52e383ca8df957b1482dc5fcf438cabf2f  guix-build-3f313a774bec/output/x86_64-w64-mingw32/bitcoin-3f313a774bec-win64-debug.zip
    1e42a9a5c0efb492a695ba3ef2eaf91e5db534098814c56b7a5c046cc3a51f4e  guix-build-3f313a774bec/output/x86_64-w64-mingw32/bitcoin-3f313a774bec-win64-setup-unsigned.exe
    d8e37338ae37bf67e01b364ac037cd77cb45a2948a30083fbcf434dbf2f5440d  guix-build-3f313a774bec/output/x86_64-w64-mingw32/bitcoin-3f313a774bec-win64-unsigned.zip
    
  12. hebasto commented at 10:11 AM on July 29, 2026: member

    My Guix build:

    x86_64
    e4acfec0a7b50116cb293cad101a9a26f9f6be7c2101e828b8142db0b3983f63  guix-build-3f313a774bec/output/aarch64-linux-gnu/SHA256SUMS.part
    432514b49a563301895572700f99d2b737a845118f2f85f6d8c2e605e2aae5df  guix-build-3f313a774bec/output/aarch64-linux-gnu/bitcoin-3f313a774bec-aarch64-linux-gnu-debug.tar.gz
    e4dd9f96a3717abd29dedbc0e02b267486cbf520cc50c542a2709afbf6253a96  guix-build-3f313a774bec/output/aarch64-linux-gnu/bitcoin-3f313a774bec-aarch64-linux-gnu.tar.gz
    ac36fc53927ebefe24bbc89f4ef0607c91505dc12d63a42f35cdc33afcfa31f0  guix-build-3f313a774bec/output/arm-linux-gnueabihf/SHA256SUMS.part
    182befb1e189da9fe6e41819987f25fd0026040d2ceb520e6b1b2a62f453b222  guix-build-3f313a774bec/output/arm-linux-gnueabihf/bitcoin-3f313a774bec-arm-linux-gnueabihf-debug.tar.gz
    15bcda77d1ad7d652412bd12918cced79ad25e429a606176809d9423b864051a  guix-build-3f313a774bec/output/arm-linux-gnueabihf/bitcoin-3f313a774bec-arm-linux-gnueabihf.tar.gz
    d9c2e32d32d7aedc77219195d4cbbf828e160dbf605cf18a168b0eb657b3deb5  guix-build-3f313a774bec/output/arm64-apple-darwin/SHA256SUMS.part
    3806a9fbec91830590f6f35cc298f874885ec883e4caaef17ec9b6c61561595b  guix-build-3f313a774bec/output/arm64-apple-darwin/bitcoin-3f313a774bec-arm64-apple-darwin-codesigning.tar.gz
    62cc2b799fbc1b1c05a3e179c233578080630863342aa97390c18a69372b62e2  guix-build-3f313a774bec/output/arm64-apple-darwin/bitcoin-3f313a774bec-arm64-apple-darwin-unsigned.tar.gz
    26a26030b967f50f6204b8c6193b33c194812cc8cb4ceacc00ec79397d31a854  guix-build-3f313a774bec/output/arm64-apple-darwin/bitcoin-3f313a774bec-arm64-apple-darwin-unsigned.zip
    5673f3a6e49c8491f465732b9184ac78fd9a0d7e04c30f63ea15ed589e9c1b05  guix-build-3f313a774bec/output/dist-archive/bitcoin-3f313a774bec.tar.gz
    c9b67ad05c8ca8ceabd70070ea535d22eaae0f71b9ab331646104c0bc4fabe61  guix-build-3f313a774bec/output/powerpc64-linux-gnu/SHA256SUMS.part
    b37dab3ae5b289fa8f6738a5709928d20008ec7fb218652c14963d05eb4f845e  guix-build-3f313a774bec/output/powerpc64-linux-gnu/bitcoin-3f313a774bec-powerpc64-linux-gnu-debug.tar.gz
    7ca9b582e09424135abe0177b2e4b75ddc819e9f9b37194ed3f16fbc027c6e08  guix-build-3f313a774bec/output/powerpc64-linux-gnu/bitcoin-3f313a774bec-powerpc64-linux-gnu.tar.gz
    3a89b59065a215e0df6ee694894ea1043548f9180c249487d6dc29ef2425c108  guix-build-3f313a774bec/output/riscv64-linux-gnu/SHA256SUMS.part
    5586e28b25e1c93f39c2ba4152b15d00fc2636b305062f40649f5063a903558e  guix-build-3f313a774bec/output/riscv64-linux-gnu/bitcoin-3f313a774bec-riscv64-linux-gnu-debug.tar.gz
    5ed34a0388ad67e6fa038a17e6b09b53ff87f1dc560fcd3fb5604f15df2f47be  guix-build-3f313a774bec/output/riscv64-linux-gnu/bitcoin-3f313a774bec-riscv64-linux-gnu.tar.gz
    dfa179480646a68daec635378625d3befc9aa0096c7ad7bc4bab7da45158d3e9  guix-build-3f313a774bec/output/x86_64-apple-darwin/SHA256SUMS.part
    fd9adb3ae6eed212bcb3b123df2dfa942b800900dcc2b3c6b3f422f408d841ad  guix-build-3f313a774bec/output/x86_64-apple-darwin/bitcoin-3f313a774bec-x86_64-apple-darwin-codesigning.tar.gz
    e10e28f2947c83ec52d96bddefb8ce86e60944bee0d1bf375acdadcf268528bd  guix-build-3f313a774bec/output/x86_64-apple-darwin/bitcoin-3f313a774bec-x86_64-apple-darwin-unsigned.tar.gz
    2e41084f2e67688d2db7b7bef120638c78b9b04ff716d0d31cb4bbaaefebabd6  guix-build-3f313a774bec/output/x86_64-apple-darwin/bitcoin-3f313a774bec-x86_64-apple-darwin-unsigned.zip
    1533905d96440fd26f7d64a79c724d1c53e16c074b716ab2229e70515569627f  guix-build-3f313a774bec/output/x86_64-linux-gnu/SHA256SUMS.part
    cbcfbabc8aa87b639729bb56715a741f17719cca87e7d8aa3459b5415fe27ae7  guix-build-3f313a774bec/output/x86_64-linux-gnu/bitcoin-3f313a774bec-x86_64-linux-gnu-debug.tar.gz
    db1aaaa582a050daf99801bac35cfb34460a27a5743999ad58f996b8b212bfd1  guix-build-3f313a774bec/output/x86_64-linux-gnu/bitcoin-3f313a774bec-x86_64-linux-gnu.tar.gz
    efe3cb57f00b2e63b41863672ed9f6740c715e8023d43f714db4325d8b414b23  guix-build-3f313a774bec/output/x86_64-w64-mingw32/SHA256SUMS.part
    0a760baa9071f01ec26f999538dbb92d94a39cdfb9bbe27b361d622e03b78556  guix-build-3f313a774bec/output/x86_64-w64-mingw32/bitcoin-3f313a774bec-win64-codesigning.tar.gz
    ac6a2ae0fc93fcd940b930a837bfba52e383ca8df957b1482dc5fcf438cabf2f  guix-build-3f313a774bec/output/x86_64-w64-mingw32/bitcoin-3f313a774bec-win64-debug.zip
    1e42a9a5c0efb492a695ba3ef2eaf91e5db534098814c56b7a5c046cc3a51f4e  guix-build-3f313a774bec/output/x86_64-w64-mingw32/bitcoin-3f313a774bec-win64-setup-unsigned.exe
    d8e37338ae37bf67e01b364ac037cd77cb45a2948a30083fbcf434dbf2f5440d  guix-build-3f313a774bec/output/x86_64-w64-mingw32/bitcoin-3f313a774bec-win64-unsigned.zip
    
  13. DrahtBot requested review from hebasto on Jul 29, 2026
  14. hebasto approved
  15. hebasto commented at 10:13 AM on July 29, 2026: member

    ACK 3f313a774bec86c09bd8b7151288306ff615e047.

  16. hebasto merged this on Jul 29, 2026
  17. hebasto closed this on Jul 29, 2026

  18. fanquake deleted the branch on Jul 29, 2026

github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2026-07-31 20:50 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me