[llvm-dev] How to avoid building builtin files with '-m32' during building LLVM?

411 views
Skip to first unread message

刘可 via llvm-dev

unread,
Dec 1, 2021, 1:29:29 AM12/1/21
to llvm-dev
Hi, I got an error when I specified gcc8.3 toolchain to build LLVM13. Here is my host environment:
Debian9
gcc6.3
Manully built toolchain: gcc8.3

===============================================================================================
Here is my command:
$ CXX=/home/liuke.gehry/toolchain/x86_64-x86_64-gcc-830/bin/g++ CC=/home/liuke.gehry/toolchain/x86_64-x86_64-gcc-830/bin/gcc cmake -G Ninja -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;lld;lldb;openmp" -DLLVM_ENABLE_RUNTIMES="compiler-rt;libcxx;libcxxabi;libunwind" -DLLVM_TARGETS_TO_BUILD="X86;ARM;AArch64" -DCMAKE_BUILD_TYPE=Release  -DLLVM_BUILD_LLVM_DYLIB=ON -DLLVM_LINK_LLVM_DYLIB=ON -DCMAKE_CXX_LINK_FLAGS="-Wl,-rpath /home/liuke.gehry/toolchain/x86_64-x86_64-gcc-830/lib64 -L/home/liuke.gehry/toolchain/x86_64-x86_64-gcc-830/lib64 -Wl,-rpath /home/liuke.gehry/toolchain/x86_64-x86_64-gcc-830/sysroot/lib64 -L/home/liuke.gehry/toolchain/x86_64-x86_64-gcc-830/sysroot/lib64 -Wl,-dynamic-linker /home/liuke.gehry/toolchain/x86_64-x86_64-gcc-830/sysroot/lib64/ld-linux-x86-64.so.2 -L/home/liuke.gehry/toolchain/x86_64-x86_64-gcc-830/sysroot/lib64/ld-linux-x86-64.so.2" ../llvm
$ ninja

[99/302] Building C object CMakeFiles/clang_rt.builtins-i386.dir/floatsisf.c.o
FAILED: CMakeFiles/clang_rt.builtins-i386.dir/floatsisf.c.o
/home/liuke.gehry/llvm/llvm-project/build_with_gcc/./bin/clang --target=x86_64-unknown-linux-gnu -DVISIBILITY_HIDDEN  -O3 -DNDEBUG    -m32 -std=c11 -fPIC -fno-builtin -fvisibility=hidden -MD -MT CMakeFiles/clang_rt.builtins-i386.dir/floatsisf.c.o -MF CMakeFiles/clang_rt.builtins-i386.dir/floatsisf.c.o.d -o CMakeFiles/clang_rt.builtins-i386.dir/floatsisf.c.o   -c /home/liuke.gehry/llvm/llvm-project/compiler-rt/lib/builtins/floatsisf.c
In file included from /home/liuke.gehry/llvm/llvm-project/compiler-rt/lib/builtins/floatsisf.c:16:
In file included from /home/liuke.gehry/llvm/llvm-project/compiler-rt/lib/builtins/fp_lib.h:23:
In file included from /home/liuke.gehry/llvm/llvm-project/compiler-rt/lib/builtins/int_lib.h:93:
In file included from /data00/home/liuke.gehry/llvm/llvm-project/build_with_gcc/lib/clang/13.0.1/include/limits.h:21:
In file included from /usr/include/limits.h:25:
/usr/include/features.h:364:12: fatal error: 'sys/cdefs.h' file not found
#  include <sys/cdefs.h>
           ^~~~~~~~~~~~~
1 error generated.
===============================================================================================

I know I can solve it through 'apt install'. But I do not need 32-bits binary . How can I disable '-m32' when building builtins? Or is it a necessary process?

David Spickett via llvm-dev

unread,
Dec 1, 2021, 4:42:37 AM12/1/21
to 刘可, llvm-dev
Since your default target will be 64 bit I think you can set
COMPILER_RT_DEFAULT_TARGET_ONLY and it will just build 64 bit. If you
look for that option name in compiler-rt/cmake/base-config-ix.cmake
you'll see a check for it, then if it's not set it checks flags for
both 64 and 32 bit, which is what leads to trying to build both.

if(COMPILER_RT_DEFAULT_TARGET_ONLY)
add_default_target_arch(${COMPILER_RT_DEFAULT_TARGET_ARCH})
elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "i[2-6]86|x86|amd64")
if(NOT MSVC)
test_target_arch(x86_64 "" "-m64")
test_target_arch(i386 __i386__ "-m32")

I have not tested it myself but maybe that helps.

> _______________________________________________
> LLVM Developers mailing list
> llvm...@lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
_______________________________________________
LLVM Developers mailing list
llvm...@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev

PoYao Chang via llvm-dev

unread,
Dec 1, 2021, 4:44:30 AM12/1/21
to 刘可, llvm-dev

From: PoYao Chang <rzhb...@gmail.com>
Subject: Re: [llvm-dev] How can I build LLVM with my gcc toolchain exactly
Date: November 24, 2021 at 1:06:21 AM GMT+8

Give “-DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON” a try. 

Have you tried it as I told you a week ago. 

David Spickett via llvm-dev

unread,
Dec 1, 2021, 4:46:37 AM12/1/21
to PoYao Chang, llvm-dev, 刘可
Though that might not work if you expect to get builtins for all the
llvm architectures you listed. Good chance it'll just build one but at
least you know where in the cmake the 64+32 decision is made and you
can dig from there.

刘可 via llvm-dev

unread,
Dec 1, 2021, 11:34:19 PM12/1/21
to David Spickett, llvm-dev
Thanks for your reply. It does work!
On Wed, Dec 1, 2021, 17:42 <david.s...@linaro.org> wrote:
Since your default target will be 64 bit I think you can set COMPILER_RT_DEFAULT_TARGET_ONLY and it will just build 64 bit. If you look for that option name in compiler-rt/cmake/base-config-ix.cmake you'll see a check for it, then if it's not set it checks flags for both 64 and 32 bit, which is what leads to trying to build both. if(COMPILER_RT_DEFAULT_TARGET_ONLY) add_default_target_arch(${COMPILER_RT_DEFAULT_TARGET_ARCH}) elseif("${COMPILER_RT_DEFAULT_TARGET_ARCH}" MATCHES "i[2-6]86|x86|amd64") if(NOT MSVC) test_target_arch(x86_64 "" "-m64") test_target_arch(i386 __i386__ "-m32") I have not tested it myself but maybe that helps. On Wed, 1 Dec 2021 at 06:29, 刘可 via llvm-dev wrote: > > Hi, I got an error when I specified gcc8.3 toolchain to build LLVM13. Here is my host environment: > Debian9 > gcc6.3 > Manully built toolchain: gcc8.3 > > =============================================================================================== > Here is my command: > $ CXX=/home/liuke.gehry/toolchain/x86_64-x86_64-gcc-830/bin/g++ CC=/home/liuke.gehry/toolchain/x86_64-x86_64-gcc-830/bin/gcc cmake -G Ninja -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;lld;lldb;openmp" -DLLVM_ENABLE_RUNTIMES="compiler-rt;libcxx;libcxxabi;libunwind" -DLLVM_TARGETS_TO_BUILD="X86;ARM;AArch64" -DCMAKE_BUILD_TYPE=Release -DLLVM_BUILD_LLVM_DYLIB=ON -DLLVM_LINK_LLVM_DYLIB=ON -DCMAKE_CXX_LINK_FLAGS="-Wl,-rpath /home/liuke.gehry/toolchain/x86_64-x86_64-gcc-830/lib64 -L/home/liuke.gehry/toolchain/x86_64-x86_64-gcc-830/lib64 -Wl,-rpath /home/liuke.gehry/toolchain/x86_64-x86_64-gcc-830/sysroot/lib64 -L/home/liuke.gehry/toolchain/x86_64-x86_64-gcc-830/sysroot/lib64 -Wl,-dynamic-linker /home/liuke.gehry/toolchain/x86_64-x86_64-gcc-830/sysroot/lib64/ld-linux-x86-64.so.2 -L/home/liuke.gehry/toolchain/x86_64-x86_64-gcc-830/sysroot/lib64/ld-linux-x86-64.so.2" ../llvm > $ ninja > > [99/302] Building C object CMakeFiles/clang_rt.builtins-i386.dir/floatsisf.c.o > FAILED: CMakeFiles/clang_rt.builtins-i386.dir/floatsisf.c.o > /home/liuke.gehry/llvm/llvm-project/build_with_gcc/./bin/clang --target=x86_64-unknown-linux-gnu -DVISIBILITY_HIDDEN -O3 -DNDEBUG -m32 -std=c11 -fPIC -fno-builtin -fvisibility=hidden -MD -MT CMakeFiles/clang_rt.builtins-i386.dir/floatsisf.c.o -MF CMakeFiles/clang_rt.builtins-i386.dir/floatsisf.c.o.d -o CMakeFiles/clang_rt.builtins-i386.dir/floatsisf.c.o -c /home/liuke.gehry/llvm/llvm-project/compiler-rt/lib/builtins/floatsisf.c > In file included from /home/liuke.gehry/llvm/llvm-project/compiler-rt/lib/builtins/floatsisf.c:16: > In file included from /home/liuke.gehry/llvm/llvm-project/compiler-rt/lib/builtins/fp_lib.h:23: > In file included from /home/liuke.gehry/llvm/llvm-project/compiler-rt/lib/builtins/int_lib.h:93: > In file included from /data00/home/liuke.gehry/llvm/llvm-project/build_with_gcc/lib/clang/13.0.1/include/limits.h:21: > In file included from /usr/include/limits.h:25: > /usr/include/features.h:364:12: fatal error: 'sys/cdefs.h' file not found > # include > ^~~~~~~~~~~~~ > 1 error generated. > =============================================================================================== > > I know I can solve it through 'apt install'. But I do not need 32-bits binary . How can I disable '-m32' when building builtins? Or is it a necessary process? > _______________________________________________ > LLVM Developers mailing list > llvm...@lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev

刘可 via llvm-dev

unread,
Dec 1, 2021, 11:35:29 PM12/1/21
to PoYao Chang, llvm-dev
Thanks for your reply. It does work!
Reply all
Reply to author
Forward
0 new messages