288 lines
9.6 KiB
Makefile
288 lines
9.6 KiB
Makefile
CLANG_C_FLAGS = -Weverything -Wno-vla -Wno-covered-switch-default -Werror
|
|
GCC_C_FLAGS = -Wall -Wextra -Werror
|
|
|
|
ifeq ($(notdir $(CC)), clang)
|
|
CFLAGS ?= $(CLANG_C_FLAGS)
|
|
else ifeq ($(notdir $(CC)), suncc)
|
|
CFLAGS ?= -errwarn -errtags
|
|
C_OUTPUT_FILE := -o
|
|
else ifeq ($(notdir $(CC)),$(filter $(notdir $(CC)),armcl cl2000 cl430 cl6x cl7x clpru))
|
|
CFLAGS ?= --display_error_number --emit_warnings_as_errors --issue_remarks -i $(dir $(shell readlink -f $(shell which $(CC))))../include
|
|
C_OUTPUT_FILE := --output_file=
|
|
else ifeq ($(notdir $(CC)), pgcc)
|
|
CFLAGS ?= -Minform=inform -c11
|
|
C_OUTPUT_FILE := -o
|
|
else ifeq ($(notdir $(CC)), pgc++)
|
|
CFLAGS ?= --display_error_number -Minform=inform -Werror
|
|
C_OUTPUT_FILE := -o
|
|
else ifeq ($(notdir $(CC)), xlc)
|
|
CFLAGS ?= $(CLANG_C_FLAGS)
|
|
C_OUTPUT_FILE := -o
|
|
else ifeq ($(notdir $(CC)), icc)
|
|
CFLAGS ?= -w3 -Werror
|
|
C_OUTPUT_FILE := -o
|
|
else ifeq ($(notdir $(CC)), tcc)
|
|
CFLAGS ?=
|
|
C_OUTPUT_FILE := -o
|
|
else ifeq ($(notdir $(CC)), gcc)
|
|
CFLAGS ?= $(GCC_C_FLAGS)
|
|
C_OUTPUT_FILE := -o
|
|
else ifeq ($(notdir $(CC)), x86_64-w64-mingw32-gcc)
|
|
CFLAGS ?= $(GCC_C_FLAGS)
|
|
C_OUTPUT_FILE := -o
|
|
else ifeq ($(notdir $(CC)), ccomp)
|
|
CFLAGS ?= -Wall
|
|
C_OUTPUT_FILE := -o
|
|
else
|
|
CFLAGS ?= $(filter-out -Werror,$(GCC_C_FLAGS))
|
|
endif
|
|
|
|
CLANG_CXX_FLAGS = -Weverything -Werror
|
|
GCC_CXX_FLAGS = -Wall -Wextra -Werror
|
|
|
|
ifeq ($(notdir $(CXX)), clang++)
|
|
CXXFLAGS ?= $(CLANG_CXX_FLAGS)
|
|
else ifeq ($(notdir $(CXX)), sunCC)
|
|
CXXFLAGS ?= -errwarn=%all -errtags=yes
|
|
CXX_OUTPUT_FILE := -o
|
|
else ifeq ($(notdir $(CXX)), pgc++)
|
|
CXXFLAGS ?= --display_error_number -Minform=inform -Werror
|
|
CXX_OUTPUT_FILE := -o
|
|
else ifeq ($(notdir $(CXX)),$(filter $(notdir $(CC)),armcl cl2000 cl430 cl6x cl7x clpru))
|
|
CXXFLAGS ?= --display_error_number --emit_warnings_as_errors --issue_remarks -i $(dir $(shell readlink -f $(shell which $(CC))))../include
|
|
CXX_OUTPUT_FILE := --output_file=
|
|
else ifeq ($(notdir $(CXX)), xlc++)
|
|
CXXFLAGS ?= $(CLANG_CXX_FLAGS)
|
|
CXX_OUTPUT_FILE := -o
|
|
else ifeq ($(notdir $(CXX)), icpc)
|
|
CXXFLAGS ?= $(GCC_CXX_FLAGS)
|
|
CXX_OUTPUT_FILE := -o
|
|
else ifeq ($(notdir $(CXX)), g++)
|
|
CXXFLAGS ?= $(GCC_CXX_FLAGS)
|
|
CXX_OUTPUT_FILE := -o
|
|
else ifeq ($(notdir $(CXX)), x86_64-w64-mingw32-g++)
|
|
CFLAGS ?= $(GCC_CXX_FLAGS)
|
|
C_OUTPUT_FILE := -o
|
|
else
|
|
CXXFLAGS ?= $(filter-out -Werror,$(GCC_CXX_FLAGS))
|
|
endif
|
|
|
|
C_OUTPUT_FILE ?= --output=
|
|
CXX_OUTPUT_FILE ?= --output=
|
|
|
|
NULL =
|
|
|
|
TESTS = \
|
|
array-param \
|
|
assume \
|
|
cast \
|
|
concat \
|
|
const \
|
|
constant \
|
|
deprecated \
|
|
empty-bases \
|
|
fallthrough \
|
|
flags \
|
|
inline \
|
|
likely \
|
|
malloc \
|
|
message \
|
|
noinline \
|
|
no-escape \
|
|
no-return \
|
|
non-null \
|
|
predict \
|
|
printf-format \
|
|
pure \
|
|
require \
|
|
restrict \
|
|
returns-non-null \
|
|
sentinel \
|
|
static-assert \
|
|
stringify \
|
|
unknown-cpp-attributes \
|
|
unknown-pragmas \
|
|
unavailable \
|
|
unreachable \
|
|
unused-function \
|
|
visibility \
|
|
warn \
|
|
warn-unused-result \
|
|
$(NULL)
|
|
|
|
ifneq ($(CXX), none)
|
|
CXXTESTS = $(TESTS:=-cpp)
|
|
else
|
|
CXXTESTS =
|
|
endif
|
|
|
|
CLEANFILES = \
|
|
$(TESTS) \
|
|
$(TESTS:=-cpp) \
|
|
$(TESTS:=.cpp)
|
|
|
|
all: $(TESTS) $(CXXTESTS) .gitignore Makefile.msvc Makefile.iar Makefile.dmc
|
|
|
|
%.cpp: %.c
|
|
cp -a $^ $@
|
|
|
|
%-cpp: %.cpp
|
|
$(CXX) $(CXXFLAGS) $(CXX_OUTPUT_FILE)$@ $(^:.c=.cpp)
|
|
|
|
%: %.c
|
|
$(CC) $(CFLAGS) $(C_OUTPUT_FILE)$@ $^
|
|
|
|
define GEN_GCC_C_WARNINGS
|
|
$(1): $(1:=.c)
|
|
$(CC) $(filter-out -Werror,$(CFLAGS)) $(C_OUTPUT_FILE)$(1) $(1:=.c)
|
|
endef
|
|
|
|
define GEN_GCC_CXX_WARNINGS
|
|
$(1)-cpp: $(1:=.cpp)
|
|
$(CXX) $(filter-out -Werror,$(CXXFLAGS)) $(CXX_OUTPUT_FILE)$(1) $(1:=.cpp)
|
|
endef
|
|
|
|
.gitignore: Makefile
|
|
@echo "# Generated by Makefile. Do not edit." > $@
|
|
@$(foreach file,$(TESTS),echo -e "/$(file)\n/$(file:=.exe)\n/$(file:=.cpp)\n/$(file:=-cpp)\n/$(file:=-cpp.exe)\n/$(file:=-cpp.o)\n/$(file:=.obj)\n/$(file:=.lib)\n/$(file:=-cpp.obj)\n/$(file:=-cpp.lib)\n/$(file:=.o)\n/$(file:=.map)\n/$(file:=-cpp.map)" >> $@;)
|
|
@echo "/.gitignore" >> $@
|
|
|
|
Makefile.iar: Makefile
|
|
@echo -e "# Generated by Makefile. Do not edit.\r" > $@
|
|
@echo -e "CC = \"C:\x5cProgram Files (x86)\x5cIAR Systems\x5cEmbedded Workbench 8.4\x5carm\x5cbin\x5ciccarm.exe\"\r" >> $@
|
|
@echo -e "CXX = \x24(CC)\r" >> $@
|
|
@echo -e "\r" >> $@
|
|
|
|
@echo -e "CFLAGS = --silent --remarks --warnings_are_errors\r" >> $@
|
|
@echo -e "CXXFLAGS = --c++ \x24(CFLAGS)\r" >> $@
|
|
@echo -e "\r" >> $@
|
|
|
|
@echo -e "TESTS = \x5c\r" >> $@
|
|
@$(foreach file,$(TESTS),echo -e "\t$(file:=.o) $(file:=-cpp.o) \x5c\r" >> $@;)
|
|
@echo -e "\t\x24(NULL)\r\n\r" >> $@
|
|
|
|
@echo -e "CLEANFILES = \x24(TESTS) \x5c\r" >> $@
|
|
@$(foreach file,$(TESTS),echo -e "\t$(file:=.cpp) $(file:=.o) $(file:=-cpp.o) \x5c\r" >> $@;)
|
|
@echo -e "\t\x24(NULL)\r\n\r" >> $@
|
|
|
|
@echo -e "all: \x24(TESTS)\r\n\r" >> $@
|
|
@echo -e "clean:\r\n\tdel /Q \x24(CLEANFILES)\r\n\r" >> $@
|
|
|
|
@$(foreach file,$(TESTS),echo -e "$(file:=.o): $(file:=.c)\r\n\t\x24(CC) \x24(CFLAGS) --output \x24(@) \x24(?)\r\n$(file:=.cpp): $(file:=.c)\r\n\tcopy /Y \x24(?) \x24(@) >NUL\r\n$(file:=-cpp.o): $(file:=.cpp)\r\n\t\x24(CXX) \x24(CXXFLAGS) --output \x24(@) \x24(?)\r\n\r" >> $@;)
|
|
|
|
Makefile.dmc: Makefile
|
|
@echo -e "# Generated by Makefile. Do not edit.\r" > $@
|
|
@echo -e "CC = \"dmc.exe\"\r" >> $@
|
|
@echo -e "CXX = \x24(CC)\r" >> $@
|
|
@echo -e "\r" >> $@
|
|
|
|
@echo -e "CFLAGS = -w -w17 -w18 -wx\r" >> $@
|
|
@echo -e "CXXFLAGS = -wc \x24(CFLAGS)\r" >> $@
|
|
@echo -e "\r" >> $@
|
|
|
|
@echo -e "TESTS = \x5c\r" >> $@
|
|
@$(foreach file,$(TESTS),echo -e "\t$(file:=.exe) $(file:=-cpp.exe) \x5c\r" >> $@;)
|
|
@echo -e "\t\x24(NULL)\r\n\r" >> $@
|
|
|
|
@echo -e "CLEANFILES = \x24(TESTS) \x5c\r" >> $@
|
|
@$(foreach file,$(TESTS),echo -e "\t$(file:=.cpp) $(file:=.exe) $(file:=-cpp.exe) $(file:=.map) $(file:=-cpp.map) \x5c\r" >> $@;)
|
|
@echo -e "\t\x24(NULL)\r\n\r" >> $@
|
|
|
|
@echo -e "all: \x24(TESTS)\r\n\r" >> $@
|
|
@echo -e "clean:\r\n\tdel /Q \x24(CLEANFILES)\r\n\r" >> $@
|
|
|
|
@$(foreach file,$(TESTS),echo -e "$(file:=.exe): $(file:=.c)\r\n\t\x24(CC) \x24(CFLAGS) -o \x24(@) \x24(?)\r\n$(file:=.cpp): $(file:=.c)\r\n\tcopy /Y \x24(?) \x24(@) >NUL\r\n$(file:=-cpp.exe): $(file:=.cpp)\r\n\t\x24(CXX) \x24(CXXFLAGS) -o \x24(@) \x24(?)\r\n\r" >> $@;)
|
|
|
|
Makefile.msvc: Makefile
|
|
@echo -e "# Generated by Makefile. Do not edit.\r" > $@
|
|
@echo -e "CC = cl\r" >> $@
|
|
@echo -e "CXX = \x24(CC)\r" >> $@
|
|
@echo -e "\r" >> $@
|
|
|
|
@echo -e "CFLAGS = /nologo /Wall /wd4464 /wd4514\r" >> $@
|
|
@echo -e "CXXFLAGS = \x24(CFLAGS)\r" >> $@
|
|
@echo -e "\r" >> $@
|
|
|
|
@echo -e "TESTS = \x5c\r" >> $@
|
|
@$(foreach file,$(TESTS),echo -e "\t$(file:=.exe) $(file:=-cpp.exe) \x5c\r" >> $@;)
|
|
@echo -e "\t\x24(NULL)\r\n\r" >> $@
|
|
|
|
@echo -e "TESTS = \x5c\r" >> $@
|
|
@$(foreach file,$(TESTS),echo -e "\t$(file:=.exe) $(file:=-cpp.exe) \x5c\r" >> $@;)
|
|
@echo -e "\t\x24(NULL)\r\n\r" >> $@
|
|
|
|
@echo -e "CLEANFILES = \x24(TESTS) \x5c\r" >> $@
|
|
@$(foreach file,$(TESTS),echo -e "\t$(file:=.cpp) $(file:=.obj) $(file:=.lib) $(file:=-cpp.exp) $(file:=-cpp.lib) \x5c\r" >> $@;)
|
|
@echo -e "\t\x24(NULL)\r\n\r" >> $@
|
|
|
|
@echo -e "all: \x24(TESTS)\r\n\r" >> $@
|
|
@echo -e "clean:\r\n\tdel /Q \x24(CLEANFILES)\r\n\r" >> $@
|
|
|
|
@$(foreach file,$(TESTS),echo -e "$(file:=.exe): $(file:=.c)\r\n\t\x24(CC) \x24(CFLAGS) /Fe\x24(@) \x24(?)\r\n$(file:=.cpp): $(file:=.c)\r\n\tcopy /Y \x24(?) \x24(@) >NUL\r\n$(file:=-cpp.exe): $(file:=.cpp)\r\n\t\x24(CXX) \x24(CXXFLAGS) /Fe\x24(@) \x24(?)\r\n\r" >> $@;)
|
|
|
|
Makefile.icl: Makefile
|
|
@echo -e "# Generated by Makefile. Do not edit.\r" > $@
|
|
@echo -e "CC = icl\r" >> $@
|
|
@echo -e "CXX = \x24(CC)\r" >> $@
|
|
@echo -e "\r" >> $@
|
|
|
|
@echo -e "CFLAGS = /nologo /Wall /wd4464 /wd4514\r" >> $@
|
|
@echo -e "CXXFLAGS = \x24(CFLAGS)\r" >> $@
|
|
@echo -e "\r" >> $@
|
|
|
|
@echo -e "TESTS = \x5c\r" >> $@
|
|
@$(foreach file,$(TESTS),echo -e "\t$(file:=.exe) $(file:=-cpp.exe) \x5c\r" >> $@;)
|
|
@echo -e "\t\x24(NULL)\r\n\r" >> $@
|
|
|
|
@echo -e "TESTS = \x5c\r" >> $@
|
|
@$(foreach file,$(TESTS),echo -e "\t$(file:=.exe) $(file:=-cpp.exe) \x5c\r" >> $@;)
|
|
@echo -e "\t\x24(NULL)\r\n\r" >> $@
|
|
|
|
@echo -e "CLEANFILES = \x24(TESTS) \x5c\r" >> $@
|
|
@$(foreach file,$(TESTS),echo -e "\t$(file:=.cpp) $(file:=.obj) $(file:=.lib) $(file:=-cpp.exp) $(file:=-cpp.lib) \x5c\r" >> $@;)
|
|
@echo -e "\t\x24(NULL)\r\n\r" >> $@
|
|
|
|
@echo -e "all: \x24(TESTS)\r\n\r" >> $@
|
|
@echo -e "clean:\r\n\tdel /Q \x24(CLEANFILES)\r\n\r" >> $@
|
|
|
|
@$(foreach file,$(TESTS),echo -e "$(file:=.exe): $(file:=.c)\r\n\t\x24(CC) \x24(CFLAGS) /Fe\x24(@) \x24(?)\r\n$(file:=.cpp): $(file:=.c)\r\n\tcopy /Y \x24(?) \x24(@) >NUL\r\n$(file:=-cpp.exe): $(file:=.cpp)\r\n\t\x24(CXX) \x24(CXXFLAGS) /Fe\x24(@) \x24(?)\r\n\r" >> $@;)
|
|
|
|
Makefile.pelles: Makefile
|
|
@echo -e "# Generated by Makefile. Do not edit.\r" > $@
|
|
@echo -e "CC = pocc\r" >> $@
|
|
@echo -e "LD = polink\r" >> $@
|
|
@echo -e "\r" >> $@
|
|
|
|
@echo -e "CFLAGS = \r" >> $@
|
|
@echo -e "LDFLAGS = \r" >> $@
|
|
@echo -e "\r" >> $@
|
|
|
|
@echo -e "TESTS = \x5c\r" >> $@
|
|
@$(foreach file,$(TESTS),echo -e "\t$(file:=.exe) \x5c\r" >> $@;)
|
|
@echo -e "\t\x24(NULL)\r\n\r" >> $@
|
|
|
|
@echo -e "CLEANFILES = \x24(TESTS) \x5c\r" >> $@
|
|
@$(foreach file,$(TESTS),echo -e "\t$(file:=.obj) $(file:=.exe) \x5c\r" >> $@;)
|
|
@echo -e "\t\x24(NULL)\r\n\r" >> $@
|
|
|
|
@echo -e "all: \x24(TESTS)\r\n\r" >> $@
|
|
@echo -e "clean:\r\n\tdel /Q \x24(CLEANFILES)\r\n\r" >> $@
|
|
|
|
@$(foreach file,$(TESTS),echo -e "$(file:=.obj): $(file:=.c)\r\n\t\x24(CC) \x24(CFLAGS) $(file:=.c)\r\n\r\n$(file:=.exe): $(file:=.obj)\r\n\t\x24(LD) \x24(LDFLAGS) /OUT:$(file:=.exe) $(file:=.obj)\r\n\r" >> $@;)
|
|
|
|
clean:
|
|
rm -f $(CLEANFILES)
|
|
|
|
.PHONY: clean all
|
|
|
|
ifeq ($(notdir $(CC)), gcc)
|
|
$(foreach tgt,unavailable warn unknown-pragmas,$(eval $(call GEN_GCC_C_WARNINGS,$(tgt))))
|
|
else ifeq ($(notdir $(CC)), x86_64-w64-mingw32-gcc)
|
|
$(foreach tgt,unavailable warn unknown-pragmas,$(eval $(call GEN_GCC_C_WARNINGS,$(tgt))))
|
|
endif
|
|
|
|
ifeq ($(notdir $(CXX)), g++)
|
|
$(foreach tgt,unavailable warn unknown-pragmas,$(eval $(call GEN_GCC_CXX_WARNINGS,$(tgt))))
|
|
else ifeq ($(notdir $(CXX)), x86_64-w64-mingw32-g++)
|
|
$(foreach tgt,unavailable warn unknown-pragmas,$(eval $(call GEN_GCC_CXX_WARNINGS,$(tgt))))
|
|
endif
|