[blfs-support] Cups-2.2.7 with clang 6 installed

Christopher Gregory christopher.gregory at mail.com
Sun Jun 17 18:10:30 PDT 2018



> Sent: Thursday, June 14, 2018 at 12:16 AM
> From: "Wayne Blaszczyk" <wblaszcz at bigpond.net.au>
> To: "BLFS Support List" <blfs-support at lists.linuxfromscratch.org>
> Subject: Re: [blfs-support] Cups-2.2.7 with clang 6 installed
>
> On Sun, 2018-06-10 at 12:00 +1000, Wayne Blaszczyk wrote:
> > On Sun, 2018-06-10 at 09:54 +1000, Wayne Blaszczyk wrote:
> > > On Sat, 2018-06-09 at 11:46 +1000, Wayne Blaszczyk wrote:
> > > > On Fri, 2018-06-08 at 22:16 +0200, Christopher Gregory wrote:
> > > > > > Sent: Saturday, June 09, 2018 at 5:00 AM
> > > > > > From: "Ken Moffat" <zarniwhoop at ntlworld.com>
> > > > > > To: "BLFS Support List" <blfs-support at lists.linuxfromscratch.org>
> > > > > > Subject: Re: [blfs-support] Cups-2.2.7 with clang 6 installed
> > > > > > 
> > > > > > On Thu, Jun 07, 2018 at 09:56:05AM -0500, Bruce Dubbs wrote:
> > > > > > > On 06/07/2018 05:04 AM, Wayne Blaszczyk wrote:
> > > > > > > 
> > > > > > > > I build llvm and clang separately and use slightly different parameters to the book, hence why I didn't report this issue myself.
> > > > > > > > But looking at the configure script, (and I'm not expert reading these scripts), but to me it looks like if it finds clang++, it will use it rather than g++.
> > > > > > > > I would be interested in your configure output around this area:
> > > > > > > > 
> > > > > > > > checking for gcc option to accept ISO C89... none needed
> > > > > > > > checking how to run the C preprocessor... gcc -E
> > > > > > > > checking for clang++... clang++
> > > > > > > > checking whether we are using the GNU C++ compiler... yes
> > > > > > > > checking whether clang++ accepts -g... yes
> > > > > > > > checking for ranlib... ranlib
> > > > > > > > checking for ar... /usr/bin/ar
> > > > > > > > checking for chmod... /bin/chmod
> > > > > > > 
> > > > > > > Yes, I have the identical sequence on my log.
> > > > > > > 
> > > > > > 
> > > > > > As a long-time radeon user, what is in the book works for me too.
> > > > > > 
> > > > > > My LLVM uses
> > > > > > CC=gcc CXX=g++ \
> > > > > > cmake -DCMAKE_INSTALL_PREFIX=/usr           \
> > > > > >       -DLLVM_ENABLE_FFI=ON                  \
> > > > > >       -DCMAKE_BUILD_TYPE=Release            \
> > > > > >       -DLLVM_BUILD_LLVM_DYLIB=ON            \
> > > > > >       -DLLVM_LINK_LLVM_DYLIB=ON             \
> > > > > >       -DLLVM_TARGETS_TO_BUILD="host;AMDGPU" \
> > > > > >       -Wno-dev ..
> > > > > > 
> > > > > > and I do not build cups until after Xorg (but before the gtk
> > > > > > toolkits).
> > > > > > 
> > > > > > With systemd disabled and just passing CC=gcc to configure, the
> > > > > > output from cups at the start of make is:
> > > > > > 
> > > > > > config.status: creating config.h
> > > > > > Using ARCHFLAGS=
> > > > > > Using ALL_CFLAGS=-I.. -D_CUPS_SOURCE -O2 -march=native -I/usr/include/libusb-1.0 -I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/include -DDBUS_API_SUBJECT_TO_CHANGE -I/usr/include/p11-kit-1
> > > > > > -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_THREAD_SAFE -D_REENTRANT  
> > > > > > Using ALL_CXXFLAGS=-I.. -D_CUPS_SOURCE -O2 -march=native -I/usr/include/p11-kit-1 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_THREAD_SAFE -D_REENTRANT  
> > > > > > Using CC=gcc
> > > > > > Using CXX=gcc
> > > > > > Using DSOFLAGS=-L../cups  -Wl,-soname,all -shared -Wall -Wno-format-y2k -Wunused -fPIC -Os -g -fstack-protector -Wno-unused-result -Wsign-conversion -Wno-tautological-compare -Wno-format-
> > > > > > truncation -D_GNU_SOURCE
> > > > > > Using LDFLAGS=-L../cgi-bin -L../cups -L../filter -L../ppdc -L../scheduler -fPIE -pie -Wall -Wno-format-y2k -Wunused -fPIC -Os -g -fstack-protector -Wno-unused-result -Wsign-conversion -Wno-
> > > > > > tautological-compare -Wno-format-truncation -D_GNU_SOURCE
> > > > > > Using LIBS=-lcups   -lgnutls -lz -lpthread -lm -lcrypt   -lz
> > > > > > Making all in cups...
> > > > > > 
> > > > > > Curious why it doesn't work for you.
> > > > > > 
> > > > > > ĸen
> > > > > > -- 
> > > > > >               Keyboard not found, Press F1 to continue
> > > > > > -- 
> > > > > > http://lists.linuxfromscratch.org/listinfo/blfs-support
> > > > > > FAQ: http://www.linuxfromscratch.org/blfs/faq.html
> > > > > > Unsubscribe: See the above information page
> > > > > > 
> > > > > 
> > > > > Hello Ken,
> > > > > 
> > > > > Your not the only one who is curious by this.  It makes no sense that giving the exact same tar ball, and using the exact same method of building that two people get exactly the same error.
> > > > > 
> > > > > Wayne,  what version of the book are you using?  ie is it systemd or sysv?  I am just wondering if having systemd installed is some how or other messing things up.  I have had to use this
> > > > > CC=gcc
> > > > > CXX=g++ on quite a few packages this time round.
> > > > > 
> > > > > Regards,
> > > > > 
> > > > > Christopher.
> > > > 
> > > > 
> > > 
> > > 
> > > 
> > 
> > I've narrowed down the issue with building icu.
> > The build failure is due to the clang++ test.
> > The test is compiling conftest.cpp .
> > 
> > clang++ -c -O2 -W -Wall -pedantic -Wpointer-arith -Wwrite-strings -Wno-long-long conftest.cpp
> > 
> > This causes a stack dump.
> > By removing the -O2 parameter fixes this issue.
> > 
> > wblaszcz [ ~/tmp/clangTest ]$ clang++ -c -O2 -W -Wall -pedantic -Wpointer-arith -Wwrite-strings -Wno-long-long conftest.cpp
> > #0 0x0000000001409f6a llvm::sys::PrintStackTrace(llvm::raw_ostream&) (/usr/bin/clang-6.0+0x1409f6a)
> > #1 0x0000000001407fa6 llvm::sys::RunSignalHandlers() (/usr/bin/clang-6.0+0x1407fa6)
> > #2 0x00000000014080d8 SignalHandler(int) (/usr/bin/clang-6.0+0x14080d8)
> > #3 0x00007f5aceb7cf10 __restore_rt (/lib/libpthread.so.0+0x11f10)
> > #4 0x0000000000f60f15 llvm::PMTopLevelManager::addImmutablePass(llvm::ImmutablePass*) (/usr/bin/clang-6.0+0xf60f15)
> > #5 0x0000000000f62d9a llvm::PMTopLevelManager::schedulePass(llvm::Pass*) (/usr/bin/clang-6.0+0xf62d9a)
> > #6 0x00007f5accdfe4a2 llvm::PassManagerBuilder::addInitialAliasAnalysisPasses(llvm::legacy::PassManagerBase&) const (/usr/bin/../lib/libLLVM-6.0.so+0x119c4a2)
> > #7 0x00007f5accdfe5c6 llvm::PassManagerBuilder::populateFunctionPassManager(llvm::legacy::FunctionPassManager&) (/usr/bin/../lib/libLLVM-6.0.so+0x119c5c6)
> > #8 0x00000000015f0219 (anonymous namespace)::EmitAssemblyHelper::EmitAssembly(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream> >)
> > (/usr/bin/clang-6.0+0x15f0219)
> > #9 0x00000000015f2245 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&,
> > llvm::DataLayout const&, llvm::Module*, clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream> >) (/usr/bin/clang-6.0+0x15f2245)
> > #10 0x0000000001ef5e7f clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/usr/bin/clang-6.0+0x1ef5e7f)
> > #11 0x00000000021bc76a clang::ParseAST(clang::Sema&, bool, bool) (/usr/bin/clang-6.0+0x21bc76a)
> > #12 0x0000000001ef4e71 clang::CodeGenAction::ExecuteAction() (/usr/bin/clang-6.0+0x1ef4e71)
> > #13 0x00000000019d65b6 clang::FrontendAction::Execute() (/usr/bin/clang-6.0+0x19d65b6)
> > #14 0x000000000199f3cc clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/usr/bin/clang-6.0+0x199f3cc)
> > #15 0x0000000001a886fb clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/usr/bin/clang-6.0+0x1a886fb)
> > #16 0x00000000007cc118 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/usr/bin/clang-6.0+0x7cc118)
> > #17 0x0000000000788ff5 main (/usr/bin/clang-6.0+0x788ff5)
> > #18 0x00007f5acaf98a57 __libc_start_main /opt/wbBuild/var/sources/glibc-2.27/csu/../csu/libc-start.c:342:0
> > #19 0x00000000007c992a _start /opt/wbBuild/var/sources/glibc-2.27/csu/../sysdeps/x86_64/start.S:122:0
> > Stack dump:
> > 0.	Program arguments: /usr/bin/clang-6.0 -cc1 -triple x86_64-unknown-linux-gnu -emit-obj -disable-free -disable-llvm-verifier -discard-value-names -main-file-name conftest.cpp -mrelocation-
> > model static -mthread-model posix -fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables -fuse-init-array -target-cpu x86-64 -dwarf-column-info -debugger-tuning=gdb -momit-leaf-frame-
> > pointer 
> > -coverage-notes-file /home/wblaszcz/tmp/clangTest/conftest.gcno -resource-dir /usr/lib/clang/6.0.0 -internal-isystem /usr/bin/../lib/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../include/c++/7.3.0
> > -internal-isystem /usr/bin/../lib/gcc/x86_64-pc-linux-gnu/7.3.0/../../../../include/c++/7.3.0/x86_64-pc-linux-gnu -internal-isystem /usr/bin/../lib/gcc/x86_64-pc-linux-
> > gnu/7.3.0/../../../../include/c++/7.3.0/backward -internal-isystem /usr/local/include -internal-isystem /usr/lib/clang/6.0.0/include -internal-externc-isystem /include -internal-externc-isystem
> > /usr/include -O2 -W -Wall -Wpointer-arith -Wwrite-strings -Wno-long-long -pedantic -fdeprecated-macro -fdebug-compilation-dir /home/wblaszcz/tmp/clangTest -ferror-limit 19 -fmessage-length 169
> > -fobjc-
> > runtime=gcc -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -vectorize-loops -vectorize-slp -o conftest.o -x c++ conftest.cpp 
> > 1.	<eof> parser at end of file
> > clang-6.0: error: unable to execute command: Segmentation fault (core dumped)
> > clang-6.0: error: clang frontend command failed due to signal (use -v to see invocation)
> > clang version 6.0.0 (tags/RELEASE_600/final)
> > Target: x86_64-unknown-linux-gnu
> > Thread model: posix
> > InstalledDir: /usr/bin
> > clang-6.0: note: diagnostic msg: PLEASE submit a bug report to  and include the crash backtrace, preprocessed source, and associated run script.
> > clang-6.0: note: diagnostic msg: 
> > ********************
> > So the question is, why is clang++ failing with the -O2 option.
> > As mentioned before, my llvm/clang build is different to the book.
> > And I do not have any issues with building rust, mesa, or firefox.
> > 
> > Stepping back a bit, the bottom line is that if CC=gcc and/or CXX=g++ is not specified, then cups and icu will use clang instead of gcc if available.
> > Something that should be mentioned in the book?
> > 
> > Regards,
> > 
> > Regards,
> > Wayne
> > 
> > 
> 
> Hi All,
> 
> I've fixed my clang issue.
> I first removed -DCMAKE_SHARED_LINKER_FLAGS="-Wl,-Bsymbolic" from my llvm build.
> This did not fix anything, but in fact it broke my firefox build.
> After a bit of digging around, I notice that Fedora, Arch, and Gentoo had a lot of patches applied to their llvm builds, so I decided to patch as per the Arch build.
> So my cmake for llvm is now:
> cmake \
> CC=gcc CXX=g++ \
> -DCMAKE_INSTALL_PREFIX=/usr \
> -DLLVM_ENABLE_FFI=ON \
> -DCMAKE_BUILD_TYPE=Release \
> -DLLVM_BUILD_LLVM_DYLIB=ON \
> -DLLVM_LINK_LLVM_DYLIB=ON \
> -DLLVM_TARGETS_TO_BUILD="host" \
> -Wno-dev \
> ..
> and I've applied the following patches:
> 
> patch -Np1 -i ../PR35947-export-LLVMInitializeInstCombine-as-extern-C.patch
> patch -Np1 -i ../PR36417-DebugInfo-discard-invalid-DBG_VALUE-instructions.patch
> patch -Np1 -i ../PR36417-fixup-for-rL326769-RegState-Debug-is-being-truncated.patch
> patch -Np1 -i ../D44391-export-LLVM_DYLIB_COMPONENTS-in-LLVMConfig.cmake.patch
> patch -Np0 -i ../D44420-cmake-fix-a-typo-in-llvm_config-macro.patch
> 
> See https://git.archlinux.org/svntogit/packages.git/tree/trunk?h=packages/llvm
> 
> So now I can build icu without CC=gcc CXX=g++
> I can build cups without CC=gcc CXX=g++ (just to make it clear, It builds without CC=gcc)
> and firefox builds as it used to.
> 
> Although, icu and cups still uses clang in preference to gcc.
> I hope this helps others.
> 
> As a side note, Arch uses ninja for their llvm build, something which I have not tried out myself.
> 
> Regards,
> Wayne.
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> -- 
> http://lists.linuxfromscratch.org/listinfo/blfs-support
> FAQ: http://www.linuxfromscratch.org/blfs/faq.html
> Unsubscribe: See the above information page
> 

Well I too solved the issues.  Not that anyone maintaining the book cares as it does not happen to THEM, but the easy fix and solution for me was to build the whole of llvm, clang and rt with make -j1.  I do not care what the people with puffed up self-importance say, there is a RACE condition that occurs on SOME machines.  Yes Wayne fixed the issue with patches and modified instructions from arch, but even arch are skirting round things.  With my complete build notes, after I have completed this installation and made sure that none of the other packages that needed CC=gcc CXX=g++ require that any more, I will do another fresh installation using my notes and if it builds correctly again, I will know the reason that it failed was incomplete/inaccurate instructions on the LLVM page.

Christopher.


More information about the blfs-support mailing list