Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enable macOS cross-compilation #4148

Merged
merged 11 commits into from
Dec 11, 2019
Merged

Enable macOS cross-compilation #4148

merged 11 commits into from
Dec 11, 2019

Conversation

str4d
Copy link
Contributor

@str4d str4d commented Oct 6, 2019

Includes code cherry-picked from the following upstream PRs:

Build instructions:

@str4d str4d added A-build Area: Build system O-macos Operating system: macOS portability labels Oct 6, 2019
@str4d str4d requested a review from mdr0id October 6, 2019 03:18
Copy link
Contributor

@mdr0id mdr0id left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am able to build successfully and will continue testing on native Mac in the AM.

Copy link
Contributor

@daira daira left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

utACK


define $(package)_set_vars
$(package)_config_opts=--target=$(host) --disable-lto-support
$(package)_ldflags+=-Wl,-rpath=\\$$$$$$$$\$$$$$$$$ORIGIN/../lib
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add a comment explaining the escaping.

@@ -10,10 +10,12 @@ $(package)_sha256_hash_freebsd=20d062493d01f1816014fe9dbe883bda06f1828a6ddbfb7ee

# Mapping from GCC canonical hosts to Rust targets
# If a mapping is not present, we assume they are identical
$(package)_rust_target_x86_64-apple-darwin11=x86_64-apple-darwin
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's this going to need to be continually updated for new macOS versions?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We would add additional mappings to the same Rust target.

@daira
Copy link
Contributor

daira commented Oct 9, 2019

Re: bitcoin/bitcoin#9891 , an alternative would be to require the fixed version of ld64.

@defuse
Copy link
Contributor

defuse commented Oct 16, 2019

When I tried to build it I ran into an error similar to this one, I worked around it by symlinking /usr/lib/libtinfo.so.5 to /usr/lib/libtinfo.so.6. Next I got a bunch of errors, starting with...

make[5]: Entering directory '/home/firexware/zcash/zcash/depends/work/build/x86_64-apple-darwin11/native_cctools/807d6fd1be5d2224872e381870c0a75387fe05e6-53854c2fbe5/cctools/ld64/src/ld/parsers'
/bin/sh ../../../../libtool  --tag=CXX   --mode=compile /home/firexware/zcash/zcash/depends/work/build/x86_64-apple-darwin11/native_cctools/807d6fd1be5d2224872e381870c0a75387fe05e6-53854c2fbe5/toolchain/bin/clang++ -DPACKAGE_NAME=\"cctools\" -DPACKAGE_TARNAME=\"cctools\" -DPACKAGE_VERSION=\"877.8\" -DPACKAGE_STRING=\"cctools\ 877.8\" -DPACKAGE_BUGREPORT=\"t.poechtrager@gmail.com\" -DPACKAGE_URL=\"\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DEMULATED_HOST_CPU_TYPE=16777223 -DEMULATED_HOST_CPU_SUBTYPE=3 -D__STDC_LIMIT_MACROS=1 -D__STDC_CONSTANT_MACROS=1 -DHAVE_EXECINFO_H=1 -DHAVE_UUID_UUID_H=1 -I.   -I/home/firexware/zcash/zcash/depends/x86_64-apple-darwin11/native/include     -D__DARWIN_UNIX03 -Wall -Wno-long-long -Wno-import -Wno-format -Wno-deprecated -Wno-unused-variable -Wno-unused-private-field -Wno-unused-function -Wno-invalid-offsetof -Wno-int-conversion -Wno-char-subscripts -Wno-shift-negative-value  -D__LITTLE_ENDIAN__=1 -I../../../../include -I../../../../include/foreign -I../../../../ld64/src/abstraction -I../../../../ld64/src/ld -I../../../../ld64/src/3rd -I../../../../ld64/src -O3 -std=c++0x  -fblocks -c -o libParsers_la-archive_file.lo `test -f 'archive_file.cpp' || echo './'`archive_file.cpp
libtool: compile:  /home/firexware/zcash/zcash/depends/work/build/x86_64-apple-darwin11/native_cctools/807d6fd1be5d2224872e381870c0a75387fe05e6-53854c2fbe5/toolchain/bin/clang++ -DPACKAGE_NAME=\"cctools\" -DPACKAGE_TARNAME=\"cctools\" -DPACKAGE_VERSION=\"877.8\" "-DPACKAGE_STRING=\"cctools 877.8\"" -DPACKAGE_BUGREPORT=\"t.poechtrager@gmail.com\" -DPACKAGE_URL=\"\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DEMULATED_HOST_CPU_TYPE=16777223 -DEMULATED_HOST_CPU_SUBTYPE=3 -D__STDC_LIMIT_MACROS=1 -D__STDC_CONSTANT_MACROS=1 -DHAVE_EXECINFO_H=1 -DHAVE_UUID_UUID_H=1 -I. -I/home/firexware/zcash/zcash/depends/x86_64-apple-darwin11/native/include -D__DARWIN_UNIX03 -Wall -Wno-long-long -Wno-import -Wno-format -Wno-deprecated -Wno-unused-variable -Wno-unused-private-field -Wno-unused-function -Wno-invalid-offsetof -Wno-int-conversion -Wno-char-subscripts -Wno-shift-negative-value -D__LITTLE_ENDIAN__=1 -I../../../../include -I../../../../include/foreign -I../../../../ld64/src/abstraction -I../../../../ld64/src/ld -I../../../../ld64/src/3rd -I../../../../ld64/src -O3 -std=c++0x -fblocks -c archive_file.cpp  -fPIC -DPIC -o .libs/libParsers_la-archive_file.o
In file included from archive_file.cpp:32:
In file included from /usr/lib64/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../include/c++/9.2.0/vector:60:
In file included from /usr/lib64/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../include/c++/9.2.0/bits/stl_algobase.h:64:
In file included from /usr/lib64/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../include/c++/9.2.0/bits/stl_pair.h:59:
In file included from /usr/lib64/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../include/c++/9.2.0/bits/move.h:55:
/usr/lib64/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../include/c++/9.2.0/type_traits:1018:48: error: '_Tp' does not refer to a value
      : public __bool_constant<__is_assignable(_Tp, _Up)>
                                               ^
/usr/lib64/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../include/c++/9.2.0/type_traits:1016:21: note: declared here
  template<typename _Tp, typename _Up>
                    ^
/usr/lib64/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../include/c++/9.2.0/type_traits:1018:53: error: '_Up' does not refer to a value
      : public __bool_constant<__is_assignable(_Tp, _Up)>
                                                    ^
/usr/lib64/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../include/c++/9.2.0/type_traits:1016:35: note: declared here
  template<typename _Tp, typename _Up>
                                  ^
/usr/lib64/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../include/c++/9.2.0/type_traits:1019:5: error: expected class name
    { };
    ^
/usr/lib64/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../include/c++/9.2.0/type_traits:132:31: error: no member named 'value' in 'std::is_copy_assignable<std::_Rb_tree_node_base *>'
    : public conditional<_B1::value, _B2, _B1>::type
                         ~~~~~^
/usr/lib64/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../include/c++/9.2.0/bits/stl_pair.h:379:3: note: in instantiation of template class 'std::__and_<std::is_copy_assignable<std::_Rb_tree_node_base *>,
      std::is_copy_assignable<std::_Rb_tree_node_base *> >' requested here
                __and_<is_copy_assignable<_T1>,
                ^
/usr/lib64/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../include/c++/9.2.0/bits/stl_tree.h:2086:5: note: in instantiation of template class 'std::pair<std::_Rb_tree_node_base *, std::_Rb_tree_node_base *>' requested here
    _M_get_insert_unique_pos(const key_type& __k)
    ^
In file included from archive_file.cpp:32:
In file included from /usr/lib64/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../include/c++/9.2.0/vector:60:
In file included from /usr/lib64/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../include/c++/9.2.0/bits/stl_algobase.h:64:
In file included from /usr/lib64/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../include/c++/9.2.0/bits/stl_pair.h:59:
In file included from /usr/lib64/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../include/c++/9.2.0/bits/move.h:55:
/usr/lib64/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../include/c++/9.2.0/type_traits:132:31: error: no member named 'value' in 'std::is_move_assignable<std::_Rb_tree_node_base *>'
    : public conditional<_B1::value, _B2, _B1>::type
                         ~~~~~^
...

I'm on Arch Linux.

@zkbot
Copy link
Contributor

zkbot commented Nov 6, 2019

☔ The latest upstream changes (presumably #4160) made this pull request unmergeable. Please resolve the merge conflicts.

str4d and others added 11 commits December 10, 2019 20:38
…ntly use."

This partially reverts commit 86551dc
to bring back native_cctools for cross-compiling macOS.
Checksums were being verified after download, but not again before extraction

Zcash: Only cctools changes
clang: 3.7.1
cctools: 877.8
ld64: 253.9

Zcash: Second part of f25209a from
upstream (we merged the first part in zcash#2697).
ld64 is threaded, and uses a worker for each CPU to parse input files. But
there's a bug in the parser causing dependencies to be calculated differently
based on which files have already been parsed.

As a result, builders with more CPUs are more likely to see non-determinism.

This looks to have been fixed in a newer version of ld64, so just disable
threading for now. There's no noticible slowdown.
For normal users, --no-same-owner is default, but not so for root, where
it is assumed that root can change ownership willy-nilly. This is not
the case for privilege-limited container environments where we gaslight
the process into thinking it's root.

Zcash: Excludes QT changes
Some dependency sources were downloaded via http, even though https (SSL/TLS) options are available.
Even if we potentially check the integrity of the downloaded files via hash comparison, we should make
use of this additional security layer.

Zcash:
native_cctools.mk
This sidesteps the problem where the atomics check tries to run a test
binary, which cannot be performed during cross compilation. We should
replace this with a better solution in future.

Part of zcash#3710.
The build environment is applied to the entire configured build_cmds
section, but it doesn't carry over past the && between the gmock and
gtest builds. This causes problems when cross-compiling for darwin, as
the correctly-configured clang++ is provided in the build environment.
This reverts commit 734e594.

It appears that this was fixing a single issue with the FreeBSD build,
while b6d0996 addressed the underlying
cause. However, the change in this commit overrides the underlying fix
when cross-compiling for Darwin.
@str4d
Copy link
Contributor Author

str4d commented Dec 10, 2019

Rebased to fix merge conflict (i.e. update Rust version).

I'm on Arch Linux.

I don't think we need to support cross-compiling from every Linux platform; as long as it can be done from our usual Debian-based platforms then I think this is sufficient.

I confirmed that I can build this branch on Ubuntu 18.04.3 LTS inside WSL. I do get a bunch of ld warnings:

[...]
ld: warning: direct access in ___cxx_global_var_init.12 to global weak symbol guard variable for libzcash::IncrementalMerkleTree<32ul, libzcash::PedersenHash>::emptyroots means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in libzcash::IncrementalMerkleTree<29ul, libzcash::SHA256Compress>::empty_root() to global weak symbol libzcash::IncrementalMerkleTree<29ul, libzcash::SHA256Compress>::emptyroots means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in libzcash::IncrementalMerkleTree<32ul, libzcash::PedersenHash>::empty_root() to global weak symbol libzcash::IncrementalMerkleTree<32ul, libzcash::PedersenHash>::emptyroots means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in libzcash::NoteDecryption<585ul>::decrypt(std::__1::array<unsigned char, 601ul> const&, uint256 const&, uint256 const&, unsigned char) const to global weak symbol typeinfo for libzcash::note_decryption_failed means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in libzcash::PaymentDisclosureNoteDecryption<585ul>::decryptWithEsk(std::__1::array<unsigned char, 601ul> const&, uint256 const&, uint256 const&, uint256 const&, unsigned char) const to global weak symbol typeinfo for libzcash::note_decryption_failed means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in uint256 Hash<std::__1::__wrap_iter<char*> >(std::__1::__wrap_iter<char*>, std::__1::__wrap_iter<char*>) to global weak symbol Hash<std::__1::__wrap_iter<char*> >(std::__1::__wrap_iter<char*>, std::__1::__wrap_iter<char*>)::pblank means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in void boost::throw_exception<boost::bad_optional_access>(boost::bad_optional_access const&) to global weak symbol typeinfo for boost::wrapexcept<boost::bad_optional_access> means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::bad_optional_access> >::rethrow() const to global weak symbol typeinfo for boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::bad_optional_access> > means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in boost::system::detail::system_category_default_error_condition_posix(int) to global weak symbol boost::system::system_category()::system_category_instance means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in boost::system::detail::system_category_default_error_condition_posix(int) to global weak symbol boost::system::generic_category()::generic_category_instance means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in boost::system::generic_category() to global weak symbol boost::system::generic_category()::generic_category_instance means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in boost::system::generic_category() to global weak symbol guard variable for boost::system::generic_category()::generic_category_instance means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in boost::system::generic_category() to global weak symbol boost::system::generic_category()::generic_category_instance means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in boost::system::generic_category() to global weak symbol guard variable for boost::system::generic_category()::generic_category_instance means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in boost::system::generic_category() to global weak symbol guard variable for boost::system::generic_category()::generic_category_instance means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in boost::system::system_category() to global weak symbol boost::system::system_category()::system_category_instance means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in boost::system::system_category() to global weak symbol guard variable for boost::system::system_category()::system_category_instance means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in boost::system::system_category() to global weak symbol boost::system::system_category()::system_category_instance means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in boost::system::system_category() to global weak symbol guard variable for boost::system::system_category()::system_category_instance means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in boost::system::system_category() to global weak symbol guard variable for boost::system::system_category()::system_category_instance means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in LockedPageManager::Instance() to global weak symbol LockedPageManager::CreateInstance() means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.

but the binaries are built and linked, so we can figure the above out later.

@str4d str4d added the S-scratching-an-itch Status: Something we haven't planned for a sprint but are doing anyway label Dec 10, 2019
@str4d str4d added this to the Core Sprint 2019-49 milestone Dec 10, 2019
@mdr0id
Copy link
Contributor

mdr0id commented Dec 11, 2019

testACK for ARM (from ubuntu 18.04 and 19.04 ):

marsh@pop-os:~/ARM_zcash/zcash$ file ./src/zcashd
./src/zcashd: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (GNU/Linux), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=3b4580e9bf267be574194987973403b50e24ec85, for GNU/Linux 3.7.0, with debug_info, not stripped
marsh@pop-os:~/ARM_zcash/zcash$ file ./src/zcash-cli
./src/zcash-cli: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (GNU/Linux), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=2cccb954f5bb909852d7e8c48aa97cf5dd93db81, for GNU/Linux 3.7.0, with debug_info, not stripped
marsh@pop-os:~/ARM_zcash/zcash$ file ./src/zcash-tx
./src/zcash-tx: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (GNU/Linux), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=1bd9750ad646e3a6995793aada420c332634a51c, for GNU/Linux 3.7.0, with debug_info, not stripped
marsh@pop-os:~/ARM_zcash/zcash$ file ./src/zcash-gtest
./src/zcash-gtest: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (GNU/Linux), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=f27db35c7035d8a69a87a89a575437850fc44b44, for GNU/Linux 3.7.0, with debug_info, not stripped

Important note: Binary used from ubuntu 19.04 does not work on bare metal ARM64, however the binary from the Ubuntu 18.04 system runs on bare metal ARM64...ODROID N2 syncing now on mainnet for Blossom

@mdr0id
Copy link
Contributor

mdr0id commented Dec 11, 2019

testACK for MacOS cross compile (from ubuntu 18.04; ubuntu 19.04 failed to cross compile for Mac):

mtron@woot:~/ARM_MAC_zcash/zcash/src$ file zcashd
zcashd: Mach-O 64-bit x86_64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|WEAK_DEFINES|BINDS_TO_WEAK|PIE|HAS_TLV_DESCRIPTORS>
mtron@woot:~/ARM_MAC_zcash/zcash/src$ file zcash-cli
zcash-cli: Mach-O 64-bit x86_64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|WEAK_DEFINES|BINDS_TO_WEAK|PIE>
mtron@woot:~/ARM_MAC_zcash/zcash/src$ file zcash-gtest
zcash-gtest: Mach-O 64-bit x86_64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|WEAK_DEFINES|BINDS_TO_WEAK|PIE|HAS_TLV_DESCRIPTORS>
mtron@woot:~/ARM_MAC_zcash/zcash/src$ file zcash-tx
zcash-tx: Mach-O 64-bit x86_64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|WEAK_DEFINES|BINDS_TO_WEAK|PIE|HAS_TLV_DESCRIPTORS>

@mdr0id mdr0id self-requested a review December 11, 2019 05:24
Copy link
Contributor

@mdr0id mdr0id left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

testedACK ; see comments above on specifics for worker pool update

@mdr0id
Copy link
Contributor

mdr0id commented Dec 11, 2019

@zkbot r+

@zkbot
Copy link
Contributor

zkbot commented Dec 11, 2019

📌 Commit adb4748 has been approved by mdr0id

@zkbot
Copy link
Contributor

zkbot commented Dec 11, 2019

⌛ Testing commit adb4748 with merge a96942e...

zkbot added a commit that referenced this pull request Dec 11, 2019
Enable macOS cross-compilation

Includes code cherry-picked from the following upstream PRs:

- bitcoin/bitcoin#7809
  - The `native_cctools` fix.
- bitcoin/bitcoin#8210
  - The macOS toolchain bump.
- bitcoin/bitcoin#9891
- bitcoin/bitcoin#15581
  - The `tar` change.
- bitcoin/bitcoin#16049
  - The `native_cctools` change.

Build instructions:
- Fetch `MacOSX10.11.sdk` from e.g. https://github.com/phracker/MacOSX-SDKs/releases
- Extract it into `depends/SDKs` (creating that folder first)
- `HOST=x86_64-apple-darwin11 ./zcutil/build.sh`
@zkbot
Copy link
Contributor

zkbot commented Dec 11, 2019

☀️ Test successful - pr-merge
Approved by: mdr0id
Pushing a96942e to master...

@zkbot zkbot merged commit adb4748 into zcash:master Dec 11, 2019
@daira
Copy link
Contributor

daira commented Dec 11, 2019

To fix those linker warnings, I think you need to add either -fvisibility=default, or -fvisibility=hidden -fvisibility-inlines-hidden, to the compiler (C and C++) flags for Zcash and all dependencies. See https://stackoverflow.com/questions/9894961/strange-warnings-from-the-linker-ld and https://stackoverflow.com/questions/8685045/xcode-with-boost-linkerid-warning-about-visibility-settings .

Here are the Apple docs for those options: https://developer.apple.com/library/archive/documentation/DeveloperTools/Conceptual/CppRuntimeEnv/Articles/SymbolVisibility.html

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-build Area: Build system O-macos Operating system: macOS portability S-scratching-an-itch Status: Something we haven't planned for a sprint but are doing anyway
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants