以前から薄々気付いてはいたのだが、error messageを見るに、LLVM/Clangでbuildした場合でもC/C++ standard libraryとしてGCCに付属するlibstdc++が使われている。GCC 9付属のlibstdc++がだめでも、LLVM/Clangに付属するlibc++なら大丈夫なのでは?と思い実験してみた所無事にbuildできた。
なお、GCC 9とLLVM/Clang 8ではdevelopment stageが異なるのでcodeのmature具合が違っていて当然な点、更にはexperimental packagesにtroubleがつきものなのは当然なので予め申し述べておく。Firefox nightlyのbuildもGCC 8に付属のlibstdc++なら正常にできる。
software environment
* Firefox nightly (Mercurial) → cset 454868:c60e6c0c2e23
* llvm-8:amd64/experimental 1:8~svn351401-1~exp1
* llvm-8-runtime:amd64/experimental 1:8~svn351401-1~exp1
* clang-8:amd64/experimental 1:8~svn351401-1~exp1
* lld-8:amd64/experimental 1:8~svn351401-1~exp1
* libc++-8-dev:amd64/experimental 1:8~svn351401-1~exp1
* libc++1-8:amd64/experimental 1:8~svn351401-1~exp1
build instruction
.mozconfigに以下の記述を行う:
export CC='clang-8 -stdlib=libc++'
export CXX='clang++-8 -stdlib=libc++'
ac_add_options --with-clang-path='/usr/lib/llvm-8/bin/clang'
ac_add_options --with-libclang-path='/usr/lib/llvm-8/lib'
ac_add_options --enable-linker=lld-8
ac_add_options --with-ccache=/usr/bin/ccache
今回の肝は、compilerを指定する最初の2行の"-stdlib=libc++"というoption (ただし、これをclang-8の側 (C++ではなくてC)に適用して良いのか、意味があるのかは不明)。Debian packageのclangはdefaultでlibstdc++ (GCC由来)を使うため、-stdlib optionでlibc++ (LLVM/Clang由来)を使うよう明示する。
また、standard libraryの変更とは直接関係ないが、ついでにFirefoxが用いるlibclangなどのpathを指定し、更にlinkerをbinutilsのldではなくLLVM/Clang由来のlldを用いるよう明示する (ほとんど気分の問題)。
あとはいつも通り:
./mach build
で暫く待つ。
0 件のコメント:
コメントを投稿