c++clangllvm-clangfoundationclang-query

Running Clang-query on objective-c files that import Foundation


I am trying to use clang-query to run matches against obj-c files that import Foundation but its not working, After building clang-query by moving it to the tools/extra folder, I run it using this command:

./clang-query MyClass.m -- -extra-arg-before "-isysroot/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.1.sdk"

But I'm getting this error:

 fatal error: 'stdarg.h' file not found
#include <stdarg.h>

How should I be running clang-query to analyse my objective-c sources?


Solution

  • After doing more research I found out that the right approach is to use libTooling based tools. As stated in their documentation:

    Clang Tooling needs a compilation database to figure out specific build options for each file. Currently it can create a compilation database from the compile_commands.json file
    

    For Xcode projects, this file can be generated like this:

    xcodebuild -project PROJECT_NAME.xcodeproj | xcpretty -r json-compilation-database --output compile_commands.json

    you will need to install the xcpretty gem. (gem install xcpretty)

    Source: https://clang.llvm.org/docs/HowToSetupToolingForLLVM.html

    UPDATE: IF like me, you are having issues with the compile_commands.json file generated from xcodebuild logs, just pass this commands to your binary:

    -mios-simulator-version-min=10.0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk -isystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/10.00/include -I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1 -I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/include -F/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Frameworks
    

    You might need to update some of the parameters based on your system configuration but this is working fine for me currently.