ndk-build CLANG_TIDY and SHORT_COMMANDS don't work together
- Dominant language
- No language data
- Stars
- 2.3k
- Forks
- 310
- PR merge metrics
- No merged PRs in 30d
Description
When the ndk-build's `SHORT_COMMANDS` mode is enabled, ndk-build invokes clang (and clang-tidy) with a file containing all the arguments. So instead of invoking:
`clang-tidy cppfile.cpp -- `
ndk-build invokes:
`clang-tidy cppfile.cpp -- @`
where argfile contains ` `.
clang-tidy seems to ignore the arguments from the argfile. I see that clang-tidy sometimes handles argument-file arguments, so I'm not sure what's going on.
### standalone clang-tidy test case:
```
$ echo 'TYPE var = 0;' > main.c
$ echo '-DTYPE=int' > argfile
$ clang-tidy main.c -- -DTYPE=int # works
$ clang-tidy main.c -- @argfile # fails
1 error generated.
Error while processing /usr/local/google/home/rprichard/tidytest/main.c.
/usr/local/google/home/rprichard/tidytest/main.c:1:1: error: unknown type name 'TYPE' [clang-diagnostic-error]
TYPE var = 0;
^
```
### ndk-build test case:
```
mkdir jni
echo >jni/Application.mk '
APP_ABI := arm64-v8a
'
echo >jni/Android.mk '
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := main
LOCAL_SRC_FILES := main.cpp
LOCAL_CLANG_TIDY := true
LOCAL_SHORT_COMMANDS := true
include $(BUILD_SHARED_LIBRARY)
'
echo >jni/main.cpp '
#include
'
ndk-build V=1
```
Output:
```
...
/usr/local/google/home/rprichard/android/ndk/out/android-ndk-r18-canary/toolchains/llvm/prebuilt/linux-x86_64/bin/clang-tidy jni/main.cpp -- @./obj/local/arm64-v8a/objs/main/main.cpp.tidy.cflags
1 error generated.
Error while processing /usr/local/google/home/rprichard/tidytest/jni/main.cpp.
/usr/local/google/home/rprichard/tidytest/jni/main.cpp:2:14: error: 'android/log.h' file not found [clang-diagnostic-error]
#include
^
...
```
Content of main.cpp.tidy.cflags:
```
-target aarch64-none-linux-android21 -ffunction-sections -fdata-sections -funwind-tables -no-canonical-prefixes -g -Wno-invalid-command-line-argument -Wno-unused-command-line-argument -fno-exceptions -fno-rtti -gcc-toolchain /usr/local/google/home/rprichard/android/ndk/out/android-ndk-r18-canary/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64 -fpic -O2 -DNDEBUG -I/usr/local/google/home/rprichard/android/ndk/out/android-ndk-r18-canary/sources/cxx-stl/system/include -Ijni -DANDROID -Wformat -Werror=format-security --sysroot /usr/local/google/home/rprichard/android/ndk/out/android-ndk-r18-canary/sysroot -isystem /usr/local/google/home/rprichard/android/ndk/out/android-ndk-r18-canary/sysroot/usr/include/aarch64-linux-android -c
```
If I run clang-tidy with those commands it works:
```
$ /usr/local/google/home/rprichard/android/ndk/out/android-ndk-r18-canary/toolchains/llvm/prebuilt/linux-x86_64/bin/clang-tidy jni/main.cpp -- -target aarch64-none-linux-android21 -ffunction-sections -fdata-sections -funwind-tables -no-canonical-prefixes -g -Wno-invalid-command-line-argument -Wno-unused-command-line-argument -fno-exceptions -fno-rtti -gcc-toolchain /usr/local/google/home/rprichard/android/ndk/out/android-ndk-r18-canary/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64 -fpic -O2 -DNDEBUG -I/usr/local/google/home/rprichard/android/ndk/out/android-ndk-r18-canary/sources/cxx-stl/system/include -Ijni -DANDROID -Wformat -Werror=format-security --sysroot /usr/local/google/home/rprichard/android/ndk/out/android-ndk-r18-canary/sysroot -isystem /usr/local/google/home/rprichard/android/ndk/out/android-ndk-r18-canary/sysroot/usr/include/aarch64-linux-android -c
```
The new CLANG_TIDY mode has been added recently to master; it's not in r17.
@stephenhines @pirama-arumuga-nainar I'm guessing this is a clang-tidy bug?
Contributor guide
Assessment
This issue has not been assessed yet.