premake-core icon indicating copy to clipboard operation
premake-core copied to clipboard

Enable clang-tidy checks for clang gmake2

Open theComputeKid opened this issue 5 months ago • 4 comments

Some time ago, I added build-time code checking for MSVC (#2190) and static analysis via clang-tidy (#2187). I also wanted to add this for the gmake2 generator, specifically for the clang toolset.

However, having read through the code, there are multiple different ways to achieve this, and I am not sure what to do. I am happy to add this feature myself if I can get some guidance from people familiar with the codebase:

  1. How can I limit enabling clang-tidy to just clang?
  2. What changes should be made in the gmake2 generator to make this happen?

To mimic cmake, should I add a second build command here, protected by a conditional:

	function cpp.initialize()
		rule 'cpp'
			fileExtension { ".cc", ".cpp", ".cxx", ".mm" }
			buildoutputs  { "$(OBJDIR)/%{file.objname}.o" }
			buildmessage  '$(notdir $<)'
			buildcommands {'$(CXX) %{premake.modules.gmake2.cpp.fileFlags(cfg, file)} $(FORCE_INCLUDE) -o "$@" -MF "$(@:%.o=%.d)" -c "$<"'}

The second build line will contain the clang-tidy invocation:

	function cpp.initialize()
		rule 'cpp'
			fileExtension { ".cc", ".cpp", ".cxx", ".mm" }
			buildoutputs  { "$(OBJDIR)/%{file.objname}.o" }
			buildmessage  '$(notdir $<)'
			buildcommands {
                           '$(CXX) %{premake.modules.gmake2.cpp.fileFlags(cfg, file)} $(FORCE_INCLUDE) -o "$@" -MF "$(@:%.o=%.d)" -c "$<"',
                           'clang-tidy -- all necessary clang-tidy arguments along with compiler flags.'}

What would a conditional look like? Or, do I add a prebuild command instead?

Nice to haves:

  1. We would also need to inform clang-tidy where to read the .clang-tidy file from as it may not necessarily be in a standard location or inside the output project folder.
  2. Specify location of clang-tidy. Or perhaps this can be taken from llvmdir? But that is only supported for msvc.

theComputeKid avatar Sep 10 '24 21:09 theComputeKid