-
Notifications
You must be signed in to change notification settings - Fork 37.7k
depends: Make it possible to build Boost dependency using a clang toolset (./b2 toolset=clang) #18308
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
Conversation
…ther than gcc (./b2 toolset=gcc)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Tested 43b1bb5 on Linux Mint 19.3:
$ g++ --version | grep g++
g++ (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
$ clang++ --version | grep clang
clang version 6.0.0-1ubuntu2 (tags/RELEASE_600/final)
$ rm -rf depends/built/x86_64-pc-linux-gnu/boost
$ make -C depends NO_QT=1 NO_UPNP=1 NO_WALLET=1 NO_QR=1 NO_ZMQ=1 > ~/default-log
$ rm -rf depends/built/x86_64-pc-linux-gnu/boost
$ make -C depends NO_QT=1 NO_UPNP=1 NO_WALLET=1 NO_QR=1 NO_ZMQ=1 CC=clang CXX=clang++ > ~/clang-log
$ diff -u ~/default-log ~/clang-log
--- /home/hebasto/default-log 2020-03-10 20:54:11.728978765 +0200
+++ /home/hebasto/clang-log 2020-03-10 20:51:48.789642887 +0200
@@ -87,49 +87,45 @@
mkdir -p "bin.v2/libs/filesystem/build"
-common.mkdir bin.v2/libs/system
-
- mkdir -p "bin.v2/libs/system"
-
common.mkdir bin.v2/libs/filesystem/build/gcc-7.5.0
mkdir -p "bin.v2/libs/filesystem/build/gcc-7.5.0"
-common.mkdir bin.v2/libs/system/build
+common.mkdir bin.v2/libs/system
- mkdir -p "bin.v2/libs/system/build"
+ mkdir -p "bin.v2/libs/system"
common.mkdir bin.v2/libs/filesystem/build/gcc-7.5.0/release
mkdir -p "bin.v2/libs/filesystem/build/gcc-7.5.0/release"
-common.mkdir bin.v2/libs/system/build/gcc-7.5.0
+common.mkdir bin.v2/libs/system/build
- mkdir -p "bin.v2/libs/system/build/gcc-7.5.0"
+ mkdir -p "bin.v2/libs/system/build"
common.mkdir bin.v2/libs/filesystem/build/gcc-7.5.0/release/link-static
mkdir -p "bin.v2/libs/filesystem/build/gcc-7.5.0/release/link-static"
-common.mkdir bin.v2/libs/system/build/gcc-7.5.0/release
+common.mkdir bin.v2/libs/system/build/gcc-7.5.0
- mkdir -p "bin.v2/libs/system/build/gcc-7.5.0/release"
+ mkdir -p "bin.v2/libs/system/build/gcc-7.5.0"
common.mkdir bin.v2/libs/filesystem/build/gcc-7.5.0/release/link-static/threading-multi
mkdir -p "bin.v2/libs/filesystem/build/gcc-7.5.0/release/link-static/threading-multi"
-common.mkdir bin.v2/libs/system/build/gcc-7.5.0/release/link-static
+common.mkdir bin.v2/libs/system/build/gcc-7.5.0/release
- mkdir -p "bin.v2/libs/system/build/gcc-7.5.0/release/link-static"
+ mkdir -p "bin.v2/libs/system/build/gcc-7.5.0/release"
common.mkdir bin.v2/libs/filesystem/build/gcc-7.5.0/release/link-static/threading-multi/visibility-hidden
mkdir -p "bin.v2/libs/filesystem/build/gcc-7.5.0/release/link-static/threading-multi/visibility-hidden"
-common.mkdir bin.v2/libs/system/build/gcc-7.5.0/release/link-static/threading-multi
+common.mkdir bin.v2/libs/system/build/gcc-7.5.0/release/link-static
- mkdir -p "bin.v2/libs/system/build/gcc-7.5.0/release/link-static/threading-multi"
+ mkdir -p "bin.v2/libs/system/build/gcc-7.5.0/release/link-static"
gcc.compile.c++ bin.v2/libs/filesystem/build/gcc-7.5.0/release/link-static/threading-multi/visibility-hidden/codecvt_error_category.o
@@ -159,6 +155,10 @@
"g++" "-m64" -fvisibility-inlines-hidden -std=c++11 -fvisibility=hidden -fPIC -I/home/hebasto/GitHub/bitcoin/depends/x86_64-pc-linux-gnu/include -m64 -pthread -O3 -finline-functions -Wno-inline -Wall -fvisibility=hidden -DBOOST_ALL_NO_LIB=1 -DBOOST_FILESYSTEM_STATIC_LINK=1 -DNDEBUG -I"." -c -o "bin.v2/libs/filesystem/build/gcc-7.5.0/release/link-static/threading-multi/visibility-hidden/windows_file_codecvt.o" "libs/filesystem/src/windows_file_codecvt.cpp"
+common.mkdir bin.v2/libs/system/build/gcc-7.5.0/release/link-static/threading-multi
+
+ mkdir -p "bin.v2/libs/system/build/gcc-7.5.0/release/link-static/threading-multi"
+
common.mkdir bin.v2/libs/system/build/gcc-7.5.0/release/link-static/threading-multi/visibility-hidden
mkdir -p "bin.v2/libs/system/build/gcc-7.5.0/release/link-static/threading-multi/visibility-hidden"
It seems clang++
, even CXX=clang++
is passed, is not used.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ACK 43b1bb5, tested on Linux Mint 19.3: depends compiled with boost_toolset_linux='clang' boost_cxx='clang++'
command line options, then make && make check
.
I see your point. I opened #15914 and my issue is fixed as long as I have a way to build Boost using Clang by setting environment variables :) I've now updated #15914 to clarify that. I don't know enough about how the depends build system is supposed to work so I'll let someone else tackle the interaction between |
Concept ACK. I understand that this solves your immediate problem, but also think that heeding CXX/CC instead of needing boost-specific environment magic (please document this!) would be more consistent. |
This seems reasonable to do if it doesn't break anything like our gitian or guix builds, which is why I pinged fanquake and dongcarl. For the next release, 0.21, there won't be any boost hopefully. |
@hebasto @laanwj Pushed another commit. The following should now work:
Please note that |
On macOS 10.15.3 I don't see any difference with 0f111aa, which I assume is good news, because it always uses clang.
|
Going to look into fixing this at a more fundamental level... The |
@dongcarl Excellent news! I'd be glad to close this PR as soon as we have a better alternative. Don't hesitate to ping me for review :) |
f0d7ed1 depends: Propagate only specific CLI variables to sub-makes (Carl Dong) 0a33803 depends: boost: Use clang toolset if clang in CXX (Carl Dong) 1ce74bc depends: boost: Split target-os from toolset (Carl Dong) 2d4e480 depends: boost: Specify toolset to bootstrap.sh (Carl Dong) 3d6603e depends: Propagate well-known vars into depends (Carl Dong) Pull request description: From: #18308 (comment) The following monstrosity is quite useful when invoked inside `depends`, and reviewers can use it to compare the behaviour of this change against master. ```bash make print-{{,{host,{,{i686,x86_64,riscv64}_}linux}_}{CC,CXX},boost_{cc,cxx}} ``` It would also be helpful to make sure that setting `HOST`, `CC`, and `CXX` does the right thing. The 3 hosts I found offered good coverage were: `{x86_64,i686,riscv64}-linux-gnu`. As we special-case the `x86_64` and `i686` hosts in `depends/hosts/linux.mk`, and `riscv64` is a sanity check for a non-special-cased host. ACKs for top commit: hebasto: ACK f0d7ed1, tested on Linux Mint 19.3 (x86_64): practicalswift: ACK f0d7ed1 -- patch looks correct laanwj: Code review and concept ACK f0d7ed1 ryanofsky: Code review ACK f0d7ed1. Changes since last review: adding comment explaining check for predefined make variables, dropping freetype commit, adding commit whitelisting overrides for recursive makes Tree-SHA512: b6b8e76f713c26a0add6cd685824e2f5639109236ee9f89338f7c79cb1b1f2c3897bfb62b80b023d6d1943b5a6eb282a2f827f1f499c5e556eca015d6635fa65
f0d7ed1 depends: Propagate only specific CLI variables to sub-makes (Carl Dong) 0a33803 depends: boost: Use clang toolset if clang in CXX (Carl Dong) 1ce74bc depends: boost: Split target-os from toolset (Carl Dong) 2d4e480 depends: boost: Specify toolset to bootstrap.sh (Carl Dong) 3d6603e depends: Propagate well-known vars into depends (Carl Dong) Pull request description: From: bitcoin#18308 (comment) The following monstrosity is quite useful when invoked inside `depends`, and reviewers can use it to compare the behaviour of this change against master. ```bash make print-{{,{host,{,{i686,x86_64,riscv64}_}linux}_}{CC,CXX},boost_{cc,cxx}} ``` It would also be helpful to make sure that setting `HOST`, `CC`, and `CXX` does the right thing. The 3 hosts I found offered good coverage were: `{x86_64,i686,riscv64}-linux-gnu`. As we special-case the `x86_64` and `i686` hosts in `depends/hosts/linux.mk`, and `riscv64` is a sanity check for a non-special-cased host. ACKs for top commit: hebasto: ACK f0d7ed1, tested on Linux Mint 19.3 (x86_64): practicalswift: ACK f0d7ed1 -- patch looks correct laanwj: Code review and concept ACK f0d7ed1 ryanofsky: Code review ACK f0d7ed1. Changes since last review: adding comment explaining check for predefined make variables, dropping freetype commit, adding commit whitelisting overrides for recursive makes Tree-SHA512: b6b8e76f713c26a0add6cd685824e2f5639109236ee9f89338f7c79cb1b1f2c3897bfb62b80b023d6d1943b5a6eb282a2f827f1f499c5e556eca015d6635fa65
Make it possible to build Boost dependency using a clang toolset (
./b2 toolset=clang
).Submitted as a separate pull as required by MarcoFalke in #18288 (comment).
Fixes #15914.