forked from NixOS/nix
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Create compile-commands.json with Make
- Loading branch information
1 parent
5c8983b
commit 83fc988
Showing
5 changed files
with
55 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
compile-commands-json-files := | ||
|
||
define write-compile-commands | ||
_srcs := $$(sort $$(foreach src, $$($(1)_SOURCES), $$(src))) | ||
|
||
$(1)_COMPILE_COMMANDS_JSON := $$(addprefix $(buildprefix), $$(addsuffix .compile_commands.json, $$(basename $$(_srcs)))) | ||
|
||
compile-commands-json-files += $$($(1)_COMPILE_COMMANDS_JSON) | ||
|
||
clean-files += $$($(1)_COMPILE_COMMANDS_JSON) | ||
endef |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,41 @@ | ||
|
||
# These are the complete command lines we use to compile C and C++ files. | ||
# - $< is the source file. | ||
# - $1 is the object file to create. | ||
CC_CMD=$(CC) -o $1 -c $< $(CPPFLAGS) $(GLOBAL_CFLAGS) $(CFLAGS) $($1_CFLAGS) -MMD -MF $(call filename-to-dep,$1) -MP | ||
CXX_CMD=$(CXX) -o $1 -c $< $(CPPFLAGS) $(GLOBAL_CXXFLAGS_PCH) $(GLOBAL_CXXFLAGS) $(CXXFLAGS) $($1_CXXFLAGS) $(ERROR_SWITCH_ENUM) -MMD -MF $(call filename-to-dep,$1) -MP | ||
|
||
# We use COMPILE_COMMANDS_JSON_CMD to turn a compilation command (like CC_CMD | ||
# or CXX_CMD above) into a comple_commands.json file. We rely on bash native | ||
# word splitting to define the positional arguments. | ||
# - $< is the source file being compiled. | ||
COMPILE_COMMANDS_JSON_CMD=jq --null-input '{ directory: $$ENV.PWD, file: "$<", arguments: $$ARGS.positional }' --args -- | ||
|
||
|
||
$(buildprefix)%.o: %.cc | ||
@mkdir -p "$(dir $@)" | ||
$(trace-cxx) $(CXX) -o $@ -c $< $(CPPFLAGS) $(GLOBAL_CXXFLAGS_PCH) $(GLOBAL_CXXFLAGS) $(CXXFLAGS) $($@_CXXFLAGS) $(ERROR_SWITCH_ENUM) -MMD -MF $(call filename-to-dep, $@) -MP | ||
$(trace-cxx) $(call CXX_CMD,$@) | ||
|
||
$(buildprefix)%.o: %.cpp | ||
@mkdir -p "$(dir $@)" | ||
$(trace-cxx) $(CXX) -o $@ -c $< $(CPPFLAGS) $(GLOBAL_CXXFLAGS_PCH) $(GLOBAL_CXXFLAGS) $(CXXFLAGS) $($@_CXXFLAGS) $(ERROR_SWITCH_ENUM) -MMD -MF $(call filename-to-dep, $@) -MP | ||
$(trace-cxx) $(call CXX_CMD,$@) | ||
|
||
$(buildprefix)%.o: %.c | ||
@mkdir -p "$(dir $@)" | ||
$(trace-cc) $(CC) -o $@ -c $< $(CPPFLAGS) $(GLOBAL_CFLAGS) $(CFLAGS) $($@_CFLAGS) -MMD -MF $(call filename-to-dep, $@) -MP | ||
$(trace-cc) $(call CC_CMD,$@) | ||
|
||
# In the following we need to replace the .compile_commands.json extension in $@ with .o | ||
# to make the object file. This is needed because CC_CMD and CXX_CMD do further expansions | ||
# based on the object file name (i.e. *_CXXFLAGS and filename-to-dep). | ||
|
||
$(buildprefix)%.compile_commands.json: %.cc | ||
@mkdir -p "$(dir $@)" | ||
$(trace-jq) $(COMPILE_COMMANDS_JSON_CMD) $(call CXX_CMD,$(@:.compile_commands.json=.o)) > $@ | ||
|
||
$(buildprefix)%.compile_commands.json: %.cpp | ||
@mkdir -p "$(dir $@)" | ||
$(trace-jq) $(COMPILE_COMMANDS_JSON_CMD) $(call CXX_CMD,$(@:.compile_commands.json=.o)) > $@ | ||
|
||
$(buildprefix)%.compile_commands.json: %.c | ||
@mkdir -p "$(dir $@)" | ||
$(trace-jq) $(COMPILE_COMMANDS_JSON_CMD) $(call CC_CMD,$(@:.compile_commands.json=.o)) > $@ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters