mirror of
https://github.com/NixOS/nix.git
synced 2024-10-30 05:40:52 +00:00
42 lines
1.7 KiB
Makefile
42 lines
1.7 KiB
Makefile
|
|
# 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) $(call CXX_CMD,$@)
|
|
|
|
$(buildprefix)%.o: %.cpp
|
|
@mkdir -p "$(dir $@)"
|
|
$(trace-cxx) $(call CXX_CMD,$@)
|
|
|
|
$(buildprefix)%.o: %.c
|
|
@mkdir -p "$(dir $@)"
|
|
$(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)) > $@
|