<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/151128>151128</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Incorrect compiler flags are passed to GCC when cross compiling BOLT from x86_64 to aarch64
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            BOLT
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          hmih
      </td>
    </tr>
</table>

<pre>
    I am using nix to setup a development shell to cross compile BOLT from my host (x86_64) to aarch64. Here's the script, it should be fully reproducible:

```nix
let
  nixpkgs = fetchTarball "https://github.com/NixOS/nixpkgs/archive/7344a3b78128f7b1765dba89060b015fb75431a7.tar.gz";
 pkgs = import nixpkgs {
    crossSystem = {
      config = "aarch64-unknown-linux-musl";
    };
 };
in
pkgs.pkgsStatic.callPackage (
  {
    mkShellNoCC,
    bolt_20,
 llvm_18,
    clang_20,
    cmake,
    ninja,
    gcc,
    python3,
 }:
  mkShellNoCC {
    nativeBuildInputs = [
      llvm_18
 clang_20
      cmake
      ninja
      gcc
      python3
    ];
 buildInputs = [ bolt_20 ];
  }
) { }
````

I followed the BOLT instructions here: https://github.com/llvm/llvm-project/blob/main/bolt/README.md#manual-build and set up the directory structure in the same way.

Using the downloaded clang cross compiler I got the following error:
```
[nix-shell:~/archive/llvm/build]$ cmake -G Ninja ../llvm-project/llvm -DLLVM_TARGETS_TO_BUILD="AArch64" -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_ENABLE_PROJECTS="bolt"
-- The C compiler identification is Clang 20.1.0
-- The CXX compiler identification is Clang 20.1.0
-- The ASM compiler identification is Clang with GNU-like command-line
-- Found assembler: /nix/store/w23f223jida54jb0rzlrkp4fxxdlqy44-aarch64-unknown-linux-musl-clang-wrapper-20.1.0-rc3/bin/aarch64-unknown-linux-musl-clang
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - failed
-- Check for working C compiler: /nix/store/w23f223jida54jb0rzlrkp4fxxdlqy44-aarch64-unknown-linux-musl-clang-wrapper-20.1.0-rc3/bin/aarch64-unknown-linux-musl-clang
-- Check for working C compiler: /nix/store/w23f223jida54jb0rzlrkp4fxxdlqy44-aarch64-unknown-linux-musl-clang-wrapper-20.1.0-rc3/bin/aarch64-unknown-linux-musl-clang - broken
CMake Error at /nix/store/j3f4j0i2h5d7h3sbfnlgva8nk0cydvwq-cmake-3.31.5/share/cmake-3.31/Modules/CMakeTestCCompiler.cmake:67 (message):
  The C compiler

 "/nix/store/w23f223jida54jb0rzlrkp4fxxdlqy44-aarch64-unknown-linux-musl-clang-wrapper-20.1.0-rc3/bin/aarch64-unknown-linux-musl-clang"

 is not able to compile a simple test program.

  It fails with the following output:

    Change Dir: '/home/hmihaylov/archive/llvm/build/CMakeFiles/CMakeScratch/TryCompile-nYvCXy'

 Run Build Command(s): /nix/store/b8hida4z1qy9aw1fy3vdr251rzf125i0-ninja-1.12.1/bin/ninja -v cmTC_7a38b
    [1/2] /nix/store/w23f223jida54jb0rzlrkp4fxxdlqy44-aarch64-unknown-linux-musl-clang-wrapper-20.1.0-rc3/bin/aarch64-unknown-linux-musl-clang -MD -MT CMakeFiles/cmTC_7a38b.dir/testCCompiler.c.o -MF CMakeFiles/cmTC_7a38b.dir/testCCompiler.c.o.d -o CMakeFiles/cmTC_7a38b.dir/testCCompiler.c.o -c /home/hmihaylov/archive/llvm/build/CMakeFiles/CMakeScratch/TryCompile-nYvCXy/testCCompiler.c
 [2/2] : && /nix/store/w23f223jida54jb0rzlrkp4fxxdlqy44-aarch64-unknown-linux-musl-clang-wrapper-20.1.0-rc3/bin/aarch64-unknown-linux-musl-clang CMakeFiles/cmTC_7a38b.dir/testCCompiler.c.o -o cmTC_7a38b   && :
 FAILED: cmTC_7a38b
    : && /nix/store/w23f223jida54jb0rzlrkp4fxxdlqy44-aarch64-unknown-linux-musl-clang-wrapper-20.1.0-rc3/bin/aarch64-unknown-linux-musl-clang CMakeFiles/cmTC_7a38b.dir/testCCompiler.c.o -o cmTC_7a38b   && :
 /nix/store/4j95r1yl58phbadm5gpqczkw4bnv81rz-aarch64-unknown-linux-musl-binutils-2.43.1/bin/aarch64-unknown-linux-musl-ld: cannot find -lgcc_eh: No such file or directory
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    ninja: build stopped: subcommand failed.
```

So I added the `gcc` compiler to my nix shell and tried again. Configuration worked but during compilation `cmake --build .` I got:
```
[nix-shell:~/archive/llvm/build]$ cmake --build .
[5/2466] Performing build step for 'bolt_rt'
FAILED: tools/bolt/bolt_rt-stamps/bolt_rt-build /home/hmihaylov/archive/llvm/build/tools/bolt/bolt_rt-stamps/bolt_rt-build
cd /home/hmihaylov/archive/llvm/build/tools/bolt/bolt_rt-bins && /nix/store/j3f4j0i2h5d7h3sbfnlgva8nk0cydvwq-cmake-3.31.5/bin/cmake --build .
[1/4] Building CXX object CMakeFiles/bolt_rt_instr.dir/instr.cpp.o
FAILED: CMakeFiles/bolt_rt_instr.dir/instr.cpp.o
/nix/store/scz9j42f861bf0yvqp9isg95g9ig3s0l-aarch64-unknown-linux-musl-gcc-wrapper-14-20241116/bin/aarch64-unknown-linux-musl-g++ -I/home/hmihaylov/archive/llvm/build/tools/bolt/bolt_rt-bins -O3 -DNDEBUG -std=c++17 -ffreestanding -fno-exceptions -fno-rtti -fno-stack-protector -fPIC -fomit-frame-pointer -mno-sse -mgeneral-regs-only -MD -MT CMakeFiles/bolt_rt_instr.dir/instr.cpp.o -MF CMakeFiles/bolt_rt_instr.dir/instr.cpp.o.d -o CMakeFiles/bolt_rt_instr.dir/instr.cpp.o -c /home/hmihaylov/archive/llvm/llvm-project/bolt/runtime/instr.cpp
aarch64-unknown-linux-musl-g++: error: unrecognized command-line option '-mno-sse'; did you mean '-fno-dse'?
[2/4] Building CXX object CMakeFiles/bolt_rt_hugify.dir/hugify.cpp.o
FAILED: CMakeFiles/bolt_rt_hugify.dir/hugify.cpp.o
/nix/store/scz9j42f861bf0yvqp9isg95g9ig3s0l-aarch64-unknown-linux-musl-gcc-wrapper-14-20241116/bin/aarch64-unknown-linux-musl-g++ -I/home/hmihaylov/archive/llvm/build/tools/bolt/bolt_rt-bins -O3 -DNDEBUG -std=c++17 -ffreestanding -fno-exceptions -fno-rtti -fno-stack-protector -fPIC -fomit-frame-pointer -mno-sse -mgeneral-regs-only -MD -MT CMakeFiles/bolt_rt_hugify.dir/hugify.cpp.o -MF CMakeFiles/bolt_rt_hugify.dir/hugify.cpp.o.d -o CMakeFiles/bolt_rt_hugify.dir/hugify.cpp.o -c /home/hmihaylov/archive/llvm/llvm-project/bolt/runtime/hugify.cpp
aarch64-unknown-linux-musl-g++: error: unrecognized command-line option '-mno-sse'; did you mean '-fno-dse'?
ninja: build stopped: subcommand failed.
[26/2466] Building CXX object utils/FileCheck/CMakeFiles/FileCheck.dir/FileCheck.cpp.o
ninja: build stopped: subcommand failed.
```

I can edit the `build.ninja` to remove those flags from the compiler command line, but they shouldn't be there in the first place.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsWVlv2zzW_jXMzYEEifIiX-TCS9zP32QpGnfQ9yqgJEpiTJEqSTlxLua3D0jKW9OmDaYDdDADGIm4HPLwLA-fIxGtWSUovUTDGRouLkhnaqku64bVF5ksdpcrIA10mokKBHsGI0FT07VAoKBbymXbUGFA15RzO5grqTXksmkZpzC7u15DqWQDzQ5qqQ0gnD6no4fRAOGJnU-IyuvRIIT_o4oiPNZgago6V6w1CM-B2bVlxwvIKJQd5ztQtFWy6HKWcYqSKYrcbxT5n2DPKJpyalA0Batyu6k0oGQBJTV5vSYqI5wDwrg2ptV2AbxEeFkxU3dZmMsG4eUte767R3jZiyO8tGqyLUV4OU4GA5Jk4zTGaTnO4vFoWGQknUSjKIviYZmNh4MkJuPQEBVWLwhjlMysMgdFWNNKZY66jd0wgDfe_U4b2riJxxGAXIqSVb4b495sQSc2Qj6JgDPRPQdNp_lxPwBA40XfODwxgaKp3Te0f-4NMSwPc8L5R5JvSEWth5z0cfNmc2_deyvnc4TnfWcmuXnAUd_B-bZ5iNPjcM6JqI7jtqchG3psCiYeybFZ5fmx0e5MLUXSdzjVp27oRJMT_QQxbEtnHePFSrSd8Va2Ab033l69aHpU7GBYp9e-5dXat6xW--e9Ur1lh3vLZq_33RvnZJY7RTS1UY_Gs31rH7T258J4BaXkXD7RwuWByx8mtFFdbpgUGmqbJskU3ghee9j-X9Aq-Uhzg_Ay4zJDeNkQJmxLctv56Wq6uLkKmwLhpCGiIzxwxwEiCpvn0LVOj4IpmhupduBV6RQFJnyqkobCE9mF_gCfHVI4GfkkuCQFLbzNz6FBwQoqadxMf2QrR5WSqs_pU8MMZ4I9Bw5kUDL9x1k-9sd1elt744F3KQQf4NZ6E8LwtTlsE4LF9fXfbx7W008frtb3D-u7h9nn1fUCJQuE8XTqUgxhDMFifjP925UffVj_9fEKJYtPlFOi6X6Rq9vp7PrqYXp_f_Vpvbq7vUfJ4u72m9GPn-7-_2q-vvc7eCdgFE2DANY1hfnROqygwrCS5cT6HZiGuTMijsI4jE5Evnx5v9D0_ubnQk_M1PDh9nPA2Yba6Q0RhQUa6hdayk4UQLSmTcap9Rp4xER4qY20aL58wkmJcfLICjIcPGaReuFq0w7K5-eCf90NBsGPcSxwQRM8KdK2VAX-CIHKE-trF8M_k_VqLqihubHBdWLd6WwFTJTyF6ZAACVhnBZ-7rym-QZKqeBJqs25zJ9qgv8snSGATMkNtffU_MYm8pVFBSDmtaKPSTl4jBiuh8W4TnRWCl5tSSo2Ub4rtk9fA4cEQRImcTi0cjVxcsduhJc3sug4tZe8225NtZnPe_OE_nZIpqOxvRgbqjWpKMKT_Y10nrYeA-0F_WfZ1KOMVY1pENIAyTh1dK0nagQ0a1rbR7WBVslKkaaHdICVcTmgPSacQ7bsTNuZAw-zd-O8JqKisGB9dI0RXtaysVawvJLsuNz-GMJ7NyzZiU_uc0VMXiO8XKtd75tA_LWdf9nZ5f3OnzoBjgTA3IMVwqn2rnodOVlas4IMXuKvuwl5istdsi0UHsbqpYzxkEWBIwJBHMY4jA92dp0QbCFv1vOHMUnS7MAHZnYaRsPFH5dPNwsIbtZwZtbjAcKCKYSX5jzsQwnBzfK9MmEBgXz_Rjn8eyPk2z1djg5n-OAwFyEjhEd_mu_ebUp5Epo2LPtTebRaTlfXV5ZMfyd-_0tM8Opwg8fJUMU7PkzbOiNFM6zar_nL5mmQiW0aq5e3Dpcx0RnGdYDDQXICE2-I8MKZnwiLwiUTBQS8yvMHWtv-Wwm6y2soLSZLdeTdp1WVnbgnysCZ2FC1p2c9VfE4TZ-ZgVwWFGJ7d3WWq259AW_Z-1Z6xmcR8rQkS_qSBrSRbUudvrrLzncIv2Xo0fRewgpIUfSlCxpFtnoaRUdKZSQ0O_cWwb8usMsZxWgBpCJMhDB3NW6nPBO1ZIUWkHUGik7Zu8av5EfRKOppfl-yhHYvV1T8tgLisLJbwRIIPBiNLGJ8pKqUqrFK7Y1FW0exEB676k8ZfzMdc85IyfWx9upnBdqQptUnHX7BdyLiuxZH0TT_XTtkTOgfIsd7-ZlPn-9a32bXwJreXfGOxH75AjKz9dw5RvSaPbi6uYcJ_5y3bSjPfPJOwVcH1PnL5HGAy3QUZ2W0235tJ0xXk2E1YVWiI_4WelR5fgDGeBDgCA_iOB79CopUCM8QnkGw-o1ODO4SCBa3i6vZ5w8QaFOgZJH7jeIxBGWpKNWGCGf8oBQyoM85bf17CddWxjD_pA3JN7bcNg6_ICg_ruYQlLJhJigVaWjQSiYMVRA0dr4Fp6aigirCA0UrHUjBd9_nLj_x02vi8hOB77CWn27xy5Tl29cw3vCqE4Y54cOqKJr-3ONn2N8JRXNZCfZCi7MCHWTrMRKP99a1YJTMoGAF7GQHDSV-2Dqr6IeXPtPwuzOt7ipW7noz9Y1fzLW3RP-XbX9Stv3QUz_Otx-KvJFxb2zz23LuuOyfkXTvJV7Dmb1vD2Tke3nqeCnCS2te9_7n26rpMNCb-tjep9-_RgdXluQCLZjZ00G3TOhXHUWWDSrayC0FU0tNoeSk0v5jkRU4sMb9Tu7NI547Pmhquuu_CwmExwYyuwo9vpUumdIGWk5yGl4Ul0kxSSbkgl7G42EyTtMoTS7qy3E6GSdxPMqjcTpO09EknZRlmuQRwXgSR5MLdokjPIzGeBLHOMZJOMGDYVxO0nKSpaNRNEGDiDaE8dBGXChVdcG07uhlPIxjnF5wklGu3ac1jGd312uEbb15oS5dhGZdpdEg4kwbfVzBMMPp5UrkUlnyfzSENxBRFFqitaXZEj7M5_BUU3H2ct2GwvHLm__cdvKt7aJT_PLd3w_cwWzg9GfbXuJ_BgAA__-SnStN">