<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/101525>101525</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang][regression] Cannot build the boost library for AArch64 Linux after 20d497c26fc95c80a1bacb38820d92e5f52bec58
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
pawosm-arm
</td>
</tr>
</table>
<pre>
The boost library, even the most recent sources, has the clang.jam file which computes a target triple as such:
```
local rule init-flags-cross ( toolset : condition * : architecture + : address-model + : target-os )
{
local vendor = unknown ;
local sys = unknown ;
switch $(target-os)
{
case darwin : vendor = apple ; sys = darwin ;
case linux : vendor = pc ; sys = linux ;
}
local vendor-sys = $(vendor)-$(sys) ;
for local _architecture_ in $(architecture)
{
for local _address-model_ in $(address-model)
{
local arch = unknown ;
switch $(_architecture_)-$(_address-model_)
{
case arm-64 : arch = arm64 ;
case arm-32 : arch = arm ;
case x86-64 : arch = x86_64 ;
case x86-32 : arch = i386 ;
}
toolset.flags $(toolset)
OPTIONS $(condition)/<target-os>$(target-os)/<architecture>$(_architecture_)/<address-model>$(_address-model_)
: "--target=$(arch)-$(vendor-sys)"
: unchecked ;
}
}
}
```
In effect, for AArch64 Linux the target triple is `arm64-pc-linux`. With a target triple like that, after `20d497c26fc95c80a1bacb38820d92e5f52bec58` commit, the C++ compiler cannot find the standard library headers anymore (at least when they're provided by the GCC's libstdc++).
Consider example file, std.cc:
```
#include <cstddef>
```
Try to compile it the way bjam would do it when building boost:
```
$ clang -c -x c++ -fvisibility-inlines-hidden -fPIC -pthread -O3 -Wall -fvisibility=hidden -Wno-inline -std=c++11 -mcpu=native -ffp-contract=fast -Wno-error=enum-constexpr-conversion -DBOOST_ALL_NO_LIB=1 -DBOOST_MPI_DYN_LINK=1 -DBOOST_MPI_PYTHON_DYN_LINK=1 -DBOOST_PYTHON_DYN_LINK=1 -DNDEBUG -I"." -I"/usr/include/python3.10" std.cc --target=aarch64-pc-linux
std.cc:1:10: fatal error: 'cstddef' file not found
1 | #include <cstddef>
| ^~~~~~~~~
1 error generated.
```
Now, replace the `aarch64-pc-linux` target triple with more appropriate `aarch64-linux-gnu`:
```
$ clang -c -x c++ -fvisibility-inlines-hidden -fPIC -pthread -O3 -Wall -fvisibility=hidden -Wno-inline -std=c++11 -mcpu=native -ffp-contract=fast -Wno-error=enum-constexpr-conversion -DBOOST_ALL_NO_LIB=1 -DBOOST_MPI_DYN_LINK=1 -DBOOST_MPI_PYTHON_DYN_LINK=1 -DBOOST_PYTHON_DYN_LINK=1 -DNDEBUG -I"." -I"/usr/include/python3.10" std.cc --target=aarch64-linux-gnu
$ file std.o
std.o: ELF 64-bit LSB relocatable, ARM aarch64, version 1 (SYSV), not stripped
```
We could argue whether some triples are more sane than others, but sadly, boost is too popular and widely used to ignore its preference.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsV0tv4zgS_jX0pSBDpvyQDz7Edns22EzS2GQ36FNAkSWL0xQpkFQcX_a3L0jJr9idmesCI3Q7Elkvsr76imTOya1GXJDJkkzWA9b6ythFw3bG1Qmz9aAwYr94qRAKY5wHJQvL7J7QFeA7avAVQh0mLHLUHpxpLUcX5ivm4jRXTG-Hf7AaSqkQdpXkFXBTN61HBww8s1v04K1sFAJz4FpekeyOpGuSHn6naf8vfirDmQLbKgSppU9KxbYu4dY4B4Tm4I1RDj2Q7A640UJ6aTQQehdHmOWV9Mh9axEIXXaDQlh0LqmNQHUc7WJLTDA770OZLbsXAIAukHfUwlgg2Rpa_VObnQaSXUm5vfuFiNtJzysgdExofnR59BhMXHgND2cOQTC7kzpGehYDa8JGkmx5dHmUu2VESd1-fLbR8AsDB5nleUTr_uN8E5KDRreYbpDQedJ9u31Y1qWh0tjexNt5Zt4gRBy1zoe_3pVzW-cJPTd2Pn5h7abFU_5CFH8lgZerOK39U0RXri_dx9QwWyfT8RG0XXZtHYduxHlMadDL6JXen2h95NMrbx_59O3C3VHys32Z5dPbDo5IuZ7qC3UYC_hQAN3Yzf0Jz9P3l_unx-de-ljeQZ5uSLY6FVD27UZJRZkLRB3ErhLXy14A5iT8i2yGTSGUJknnlWTrE4hPYDhVS_RDby812Go1r5D_RHG9uacSvNjl48slaXa_9xqwLJH7QNGhXO7uLK-mY3iIJR4I-5KQpQMyTSPqkoYnkQnINB3Cq_TVFX0r-RPBVyyaZ6VHG7RpKsbzGafTks8nPE_ZqGC8yPKcpmJOcVJOaIF8kpNpGjpDLaN6iGVF6DKQcegXUqEFzrQ2HkqpRRRwnmnBrDh0JqiQCbQOmN7XJhJ8zjwoZM7Drupa1p7QmUVorHmXAgUU-2jrt9WK0JkLppwXvHNN6Hx4voEro50UaAE_WB2WHLpaCNd5MeT868ZFaCY1V60I_LzizguBZcDUrxP2YvfgzWEDQPoY6o7toQg9dWdaJUCYMBGXV7RSCam3XcP-s3DGXXuGhEPyAf2SISnfpZOFVNLvE6mV1OiSSgqBGpLy-_0KksZXFpmA5CmD5JUpdaFEsvVB_FWb3gQkzguSrXsvoxEkNW9akq018_IdISnLJuFGe8t4KJwy5CwaQGuNJdkadVsHCefxo7Hh7R2tC809WS-fnp5f3u4eHt4en94e7pckW4-Ow79_v39b_3h8e7h__OfVxPcfL_94erw9f3vucf1t-e_fILknlA4Jpd0boZvWWUI3fY4J3TR7XxmdDUdpkOogAmfcwFisvlNlxbwcoTQK_9NAAyXzTEG_D4FhZgf00Fl3sIplYVotTpwwAjJbwdegO1DJ6ox2Jt_-2z-dzKhzDFvUaJlHMfwCsI9mF8rBYqMYx4jWQCCfFzpNP1HHLvBJLFnWNNY0VjJ_oRr1kq1ug8O_cf1_getTzo6JiWANGuYEdhMw_e1hA9NxUkgPD89LsBjOXZ4VHb3e_et36K2Gz8P-jALBP_94_k_so6tYBS4gqkHxBUhfEXhkTma3bbiUoK_QgjM19nh0wCx2eHRMx6amwQSpeLspWg-OCRWvQt3dSLpwnoHGNK1iFpgWsJMC1R5ahyKQuNzqYE96B43FEi1qjn0tDcQiE_Nszga4GM0onWQZpdmgWozZbEqnOMOcleN5ls-KybQY59OZyBnmjA3kgqZ0nObpaDSjszQbzmY8n86yVNAiH4v5hIxTrJlUQ6Xe66Gx24F0rsXFKB1N6GSgWIHKxSsgpbFsQs4n64FdBIWkaLeOjFMlnXcnE156Fe-NncZkTSZLi9twJgqnsckaVl2rjg0p0sDFFfLG4aM7L_zVw8KgtWpRed-4QAZ0Q-hmK33VFkNuakI3IdL-T9JY80c882ziyh2hm37x7wv6vwAAAP__H2Z3oA">