-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
58 lines (42 loc) · 1.77 KB
/
Makefile
File metadata and controls
58 lines (42 loc) · 1.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
CONFIG ?= config/release.mk
include $(CONFIG) # user configuration for user platform
BUILD_DIR ?= build
FAST_BUILD_DIR ?= $(BUILD_DIR)-fast
CACHE_DIR = $(BUILD_DIR)/make-cache
HEADERS = $(wildcard src/**/*.h)
SOURCES = $(wildcard src/**/*.cpp tests/**/*.cpp)
CODES = $(HEADERS) $(SOURCES)
CONFIGS = $(wildcard CMakeLists.txt **/CMakeLists.txt)
CLANG_FORMAT_CACHE_FOLDER = $(CACHE_DIR)/clang-format
CLANG_FORMAT_CACHE_FILES = $(foreach x,$(CODES),$(CLANG_FORMAT_CACHE_FOLDER)/$(x).label)
.PHONY: all cmake cmake-fast format test it lint clean all-formatted build-all
all: format test it lint
# Unix Makefiles because CMAKE_EXPORT_COMPILE_COMMAND supported by Makefiles and Ninja
cmake: $(CONFIGS) $(SOURCES) .clang-tidy
cmake -B $(BUILD_DIR) -G "Unix Makefiles" -DCMAKE_EXPORT_COMPILE_COMMANDS=ON $(CMAKE_OPTIONS)
cmake-fast: $(CONFIGS) $(SOURCES)
cmake -B $(FAST_BUILD_DIR) -D FAST=ON $(CMAKE_OPTIONS)
format: $(CLANG_FORMAT_CACHE_FILES)
test: TARGET = tests
test: EXECUTABLE = $(FAST_BUILD_DIR)/bin/$(TARGET)
test: cmake-fast $(CODES)
cmake --build $(FAST_BUILD_DIR) -t $(TARGET) $(CMAKE_BUILD_OPTIONS)
$(EXECUTABLE) --order-by=rand
it: TARGET = it
it: EXECUTABLE = $(FAST_BUILD_DIR)/bin/$(TARGET)
it: cmake-fast $(CODES)
cmake --build $(FAST_BUILD_DIR) -t $(TARGET) $(CMAKE_BUILD_OPTIONS)
$(EXECUTABLE) --order-by=rand
lint: all-formatted build-all
clean:
cmake -D PATH:STRING=$(BUILD_DIR) -P ./cmake/rm.cmake
all-formatted:
clang-format --dry-run -Werror $(CODES)
build-all: cmake
cmake --build $(BUILD_DIR) $(CMAKE_BUILD_OPTIONS)
$(CACHE_DIR):
cmake -D PATH:STRING=$(CACHE_DIR) -P ./cmake/mkdir-p.cmake
$(CLANG_FORMAT_CACHE_FILES): $(CLANG_FORMAT_CACHE_FOLDER)/%.label: % .clang-format
cmake -D PATH:STRING=$(dir $@) -P ./cmake/mkdir-p.cmake
clang-format -i $<
echo "" > $@