<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/106270>106270</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
lldb API tests fail to compile inferiors with newer Android NDK (r22b or later)
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
andrurogerz
</td>
</tr>
</table>
<pre>
Android introduced a unified tools layout in NDK r19 (2019) and removed support for the old layout in r22 (2021). Running lldb tests with NDK r22 or newer fails when compiling the test inferiors because `Android.rules` references an outdated sysroot path (and other paths) that no longer exists. More details on NDK unified tools changes are [here](https://github.com/android/ndk/issues/780).
This issue can be fixed by teaching `Android.rules` about the new NDK structure. There are two ways to proceed:
1. We can support both the old and new NDK layout side-by-side. This option is more flexible, but will make `Android.rules` complex and difficult to maintain.
2. We can support only the new NDK layout. This option will actually simplify `Android.rules` from what it is currently and will be more maintainable.
Since the change will only impact the ability to run the lldb API tests against Android remote targets, I recommend going with option 2 because it leaves the codebase cleaner and I cannot come up with any reason to run the tests against a 5+ year old NDK.
## Repro Steps
1. Install latest Android NDK (currently r27)
3. Install Android SDK and emulator
4. Create and launch an x86_64 AVD
5. Copy `lldb-server` from the NDK to the device
```
adb push $ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/lib/clang/18/lib/linux/x86_64/lldb-server /data/local/tmp
```
6. Forward a port for the debugger connection
```
adb forward tcp:54321 tcp:54321
```
7. Launch `lldb-server` in platform mode on the Android device
```
adb shell /data/local/tmp/lldb-server platform --server --listen localhost:54321
```
8. Build lldb and tests locally
```
cd llvm/llvm-project
cmake -S llvm -B build -G Ninja -DLLVM_ENABLE_PROJECTS='clang;lldb' -DCMAKE_BUILD_TYPE=Release -DLLDB_ENABLE_PYTHON=On
```
9. Run the lldb API Android test against the remote Android target
```
./build/bin/lldb-dotest --out-of-tree-debugserver --arch x86_64 --platform-name remote-android --platform-url connect://localhost:54321 --platform-working-dir /data/local/tmp --compiler=$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin/clang lldb/test/API/android/
```
### Expected Results
The test passes just like when run against NDK r19:
```
PASS: LLDB (/home/andrew/Android/Sdk/ndk/19.2.5345600/toolchains/llvm/prebuilt/linux-x86_64/bin/clang-x86_64) :: test_cache_line_size (TestDefaultCacheLineSize.DefaultCacheLineSizeTestCase.test_cache_line_size)
----------------------------------------------------------------------
Ran 1 test in 0.221s
OK
```
### Actual Results
The test fails when compiling the inferior:
```
FAIL: LLDB (/home/user/Android/Sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/linux-x86_64/bin/clang-x86_64) :: test_cache_line_size (TestDefaultCacheLineSize.DefaultCacheLineSizeTestCase.test_cache_line_size)
======================================================================
ERROR: test_cache_line_size (TestDefaultCacheLineSize.DefaultCacheLineSizeTestCase.test_cache_line_size)
----------------------------------------------------------------------
Error when building test subject.
Build Command:
make VPATH=/home/user/src/llvm/llvm-project/lldb/test/API/android/platform -C /home/user/src/llvm/llvm-project/build/lldb-test-build.noindex/android/platform/TestDefaultCacheLineSize.test_cache_line_size -I /home/user/src/llvm/llvm-project/lldb/test/API/android/platform -I /home/user/src/llvm/llvm-project/lldb/packages/Python/lldbsuite/test/make -f /home/user/src/llvm/llvm-project/lldb/test/API/android/platform/Makefile all ARCH=x86_64 'CC="/home/user/Android/Sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/linux-x86_64/bin/clang"' CLANG_MODULE_CACHE_DIR=/home/user/src/llvm/llvm-project/build/lldb-test-build.noindex/module-cache-clang LLDB_OBJ_ROOT=/home/user/src/llvm/llvm-project/build/tools/lldb OS=Android PIE=1 HOST_OS=Linux
Build Command Output:
make: Entering directory '/home/user/src/llvm/llvm-project/build/lldb-test-build.noindex/android/platform/TestDefaultCacheLineSize.test_cache_line_size'
"/home/user/Android/Sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/linux-x86_64/bin/clang" -std=c++11 -g -O0 -m64 -I/home/user/src/llvm/llvm-project/lldb/packages/Python/lldbsuite/test/make/../../../../..//include -I/home/user/src/llvm/llvm-project/build/tools/lldb/include -I/home/user/src/llvm/llvm-project/lldb/test/API/android/platform -I/home/user/src/llvm/llvm-project/lldb/packages/Python/lldbsuite/test/make -include /home/user/src/llvm/llvm-project/lldb/packages/Python/lldbsuite/test/make/test_common.h -fno-limit-debug-info -target x86_64-none-linux-android --gcc-toolchain=/home/user/Android/Sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/linux-x86_64/bin/../../../../../toolchains/x86_64-4.9/prebuilt/linux-x86_64 --sysroot=/home/user/Android/Sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/linux-x86_64/bin/../../../../../sysroot -isystem /home/user/Android/Sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/linux-x86_64/bin/../../../../../sysroot/usr/include/x86_64-linux-android -D__ANDROID_API__=21 -isystem /home/user/Android/Sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/linux-x86_64/bin/../../../../../platforms/android-21/arch-x86_64/usr/include -isystem /home/user/Android/Sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/linux-x86_64/bin/../../../../../sources/cxx-stl/llvm-libc++/include -isystem /home/user/Android/Sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/linux-x86_64/bin/../../../../../sources/android/support/include -isystem /home/user/Android/Sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/linux-x86_64/bin/../../../../../sources/cxx-stl/llvm-libc++abi/include --driver-mode=g++ -MT main.o -MD -MP -MF main.d -c -o main.o /home/user/src/llvm/llvm-project/lldb/test/API/android/platform/main.cpp
In file included from <built-in>:1:
/home/user/src/llvm/llvm-project/lldb/packages/Python/lldbsuite/test/make/test_common.h:30:10: fatal error: 'sys/prctl.h' file not found
30 | #include <sys/prctl.h>
| ^~~~~~~~~~~~~
1 error generated.
make: *** [Makefile.rules:664: main.o] Error 1
make: Leaving directory '/home/user/src/llvm/llvm-project/build/lldb-test-build.noindex/android/platform/TestDefaultCacheLineSize.test_cache_line_size'
Test Directory:
/home/user/src/llvm/llvm-project/lldb/test/API/android/platform
----------------------------------------------------------------------
Ran 1 test in 0.042s
FAILED (errors=1)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzcWl1zIrfS_jXyTZemQMOHufAFMJAlaxsXdvJWrijNTMMoq5EoSWObXLy__ZQ0M2B2Ickmx8nuoSgwGqn1dD_drZZkbq3YKsQb0p-QfnLFK1doc8NVbiqjt2h-u0p1vr8Zq9xokYNQzui8yjAHDpUSG4E5OK2lBcn3unIgFNwnH8F0R0DYNet0R4SNgKscDJb6GXOw1W6njYONNuAKBC3zN4MNY_VA1iVsFMGqUkqoLUiZp-DQOgsvwhX1JIyBNqDwBQ1suJAWXgpUkOlyJ6Qf5eX7QSDUBo3QxkKKGa8sAhl0Gq0iU0m0ZNABgxs0qDK0wBXoyuXcecR7a7R2sOOu8OC8NtoVaEKL9Qq6gjtQGqRWWzSAr8I6G8GdNgg5uoBN16Y5NVtWcLX18xkE0p8UaJD0E8KuC-d2lsRjwuaEzbfCFVUaZbokbM5r3ITNVf6JsLmwtkJL2Hx43fFGI52EdMb151MhLIQOkHEFKcJGvGIO6R4c8qzwVjpnCp56Qrz9FL4E3NaZKnOVwQiePMwA2b1oeOF7C07DzugMMfeYw9TdCP6vnrWlPNWuOHDurdjKbvi3Ikea7qn_9rMIC3rnhFYgLJTelhuJryKVSNgU0srBi5ASSv7pPJ_eESS-hqlysdmIrJLOQy25UI4L1ZiKfYFUK7k_0b5GeAoqTM4zV3Ep92BFuZNisz-LZGN0CS_eSYTzymSVMaic3AdsQVCKtYotNp5KPKHyUagMA6jaaephAakodzyr6eKpkMLtvZamUqEpxM74YdHED99yoayDNqh9YDoEx80WnfWWXYDBTJclqhy22rtIiLlGbXaIIeFAIn9GW6PSOabcImQSuUITVFt4syrtPBcI1a6WxNUeDHKr1Vucp_A49AmbwB65Cf5yn3w8MQdhMWExrHBnNDw63NmD2y2UdVxKkDwEf6uo55Gw66PtDRsSNqqHxcdhbf_H5GPQActKcqdN3bEXwdQgdxieSV6pzCsEr9eD9aAH45-Tul8_gqneBXfwBFCL5hnNwRm8wh6Q0-HPHJ9Fho1mg07zDj95nsKusj719Mb3yWq5SNb3ycf1arl8Imzu80hWeJsRNpfy2WeIncG0EtL5FqGqV1qDCz9TwuaZ5GpL2Lx7fWgK_QibH3seQQNh85w77lt1xqWftdydBTuIYK7NCzd-hTjJ8zmm1dYnx0wrhZl3pYvqbhoRLtuReNzvxaz79u-z44YR3NZkfGlxoWAnudtoU0Kpc_S52GNqmf4D69sCpbxghFNDHWahbQulUliHCsKgQlv3u1pcRzCphF8SfdB6D6ujIoyW-7NjMt878O6_6M7oXzFzzbOQHOlj6AF0AmmQTn-Ae6F-5UCT29uf79az-_HkdrZ-WC1_nE2fHkmcEDasvSSeeCiEDYEm07vxx9l68tPiNlk__fIwI3GyQok-6L2gZHIQ9MvTh-U9iZPleZLrlf00O7VkhJhts4Dv0SSow_OQqM6KjQibBwX9t1AtObkOMinVlaN6Q51BpMEfDyRxkxVtCFPa0kgVL9v5abPsvn1cGdm682Gp_oLntwNetPkk1Jbm4kJQAaV1-YImkPD3I762Q-ASaibn3hqEzccPi5Nq4qxJ3yZbn29nrzvMfFW0QltJZ9syoym0dtxatPBrZR1I8Qnrisxn-JbRpjw8lAmfzfcwfnwk8Ri8N_lsTdi80CU2QPHF4z4gfgz1T10FdUcRi_pxrz_odP6OkQ6NI_AY43FQbJ3xrMC1FArXVvyGHtoTWpfghlfSTf3TW6HwUfyG0blG33nKLUbnpB1WIfpfedWyVlxBty1_oRMx1rVvOV1-_FOEj0OBc4Hui1V3W3Bfonk-Xtyep7myaC6SzIZRJ-qyznA4GsbfLcs-sv_H3kGv2Wq1XH3HETMzRpvam8MqEpzZu7mtUr-kntSf9TI91WXJ1XHTE5bbnx_GTx9C-v7Mqa3Jjn56sljXK9Xl3HwsLKbwVWLb5TAshF44DS2R0kLl-Hp2EsLmF5k6Sy1dfB2oP6vrXxO749knvg074oe9K3RbB9hKODxOW1dGm_dATtj8jn_CjZAIYUexmnp_aOoLwobTaXAP9k-nvTDlEKa34_sf1nfL5Kfb2Xo6nn6YrZPF6ms99o9dq9R5JZEGd6F1CRKqxOXkx7qY-YszhrOTZmZY-nK1LQ4fFr4o7cKH5ePTOjy5DRubS4ELy8rtKncSvz6DzZRD4-M_FwYzp83e0_bNRZ7H1KzX_4YvAbUuJ3GSETYhbNLtAt0CXXYAaOkL6cU7hy9h8yi68EHYXKhMVjl-LY5zXvbXpf3pXPfuqa5V4P1JqV1Vl6VWUQF0ozSVohSu3nRRoTYaaL2PazZdVGmFtHa240Zrm2X04J_nksX7ufhFvzoR1oDvRaPLIoHS5gT5G9GgPc-mwu6tw_JLh_j3QAUM5hhtRxt_5hvJet1ujccPi_WaxInfan9LKrWxbY8RT1nX_zBZcZRyou-3pYHVlclC0Gevr9Q62eYHKdIm53_70I_Jtjnd__YhX7Q2T8Vb9DQ34hkNLXWOJE62dSegd0_hGiHSQO8SoHcPQO_mdVMONAOq2-fvU_wG4dmuOSJeKAiVcAM7rw_ASTwNZqI-s89IPO4ezwr-2QWKxOO44wH4D9hwxyWg3wr6n4QN7d4GWjMno8KXz0EbpR1sdKXyGjMAxB0gQ789iw8rbTw9HRzPDr0BQu_Di_Rn___m1Vxm1EBgiwoNd5hHp2UqYeP6DaQ_abcczbVTPB4Mer5TTTXpJ1BvcLunMm6RP39PlW59AuW35UmL-G95zh-587sfzHV67ORgbj5e3M4SIOw6kG_9huZ4dtSeo13lN3E-ikf8Cm-6Q9YbXvd6o8FVcTPosuFgcz1EPuh10hyzOOP9TTrop2k33cSdK3HDOqzXuWbD7nXvujuIBjnj_X6vm6Wj3nDA-qTXwZILGXmDRdpsr8IN8k23M2DDzpXkKUob_meAMYUv9f2y34H0kytzE6ycVltLeh0Z7sEPYpxwEm8-u4_ccCHB6eYAEd_c1Ye7wvp6_7M7PMNYCtqEGz5D2OiqMvLmd67MzzvA4eK8Uez5hv0nAAD__6AuWkM">