-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMakefile
More file actions
68 lines (51 loc) · 1.58 KB
/
Copy pathMakefile
File metadata and controls
68 lines (51 loc) · 1.58 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
59
60
61
62
63
64
65
66
67
68
SIZE?=9
DEBUG?=0
BOUNDS_CHECK?=0
CXX := g++
STD_FLAGS := -std=c++17 -Wall -Wextra
ifeq ($(DEBUG),0)
OPTIMIZATION_FLAGS := -O3 -DNDEBUG -funroll-loops -finline-functions
else
OPTIMIZATION_FLAGS := -O0 -g
BOUNDS_CHECK := 1
endif
ifeq ($(BOUNDS_CHECK),0)
CONFIG_FLAGS := -DSIZE=$(SIZE)
else
CONFIG_FLAGS := -DSIZE=$(SIZE) -DBOUNDS_CHECK
endif
COMMON_FLAGS := $(STD_FLAGS) $(OPTIMIZATION_FLAGS) $(CONFIG_FLAGS)
ifeq ($(OS),Windows_NT)
UNAME_S := Windows
LIB_SUFFIX := .lib
BIN_SUFFIX := .exe
else
UNAME_S := $(shell uname -s)
LIB_SUFFIX := .o
BIN_SUFFIX :=
endif
ifeq ($(UNAME_S),Linux)
COMMON_FLAGS += -pthread
endif
LIB_DIR := bin/lib-$(SIZE)
BIN_DIR := bin
LIB_STEM := indexer_impl_$(SIZE) util board board_parse solver fill generate x_double x_xwing
OBJS := $(patsubst %, $(LIB_DIR)/%$(LIB_SUFFIX), $(LIB_STEM))
TEST_TARGETS := $(patsubst src/%_test.cpp, $(BIN_DIR)/test_%, $(wildcard src/*_test.cpp))
.PHONY: target test clean init
target: init $(OBJS)
$(CXX) $(COMMON_FLAGS) -o $(BIN_DIR)/sudoku$(BIN_SUFFIX) $(OBJS) src/main.cpp
$(CXX) $(COMMON_FLAGS) -o $(BIN_DIR)/benchmark$(BIN_SUFFIX) $(OBJS) src/benchmark.cpp
test: init $(TEST_TARGETS)
src/indexer_impl_$(SIZE).cpp: src/indexer_gen.py
@python3 src/indexer_gen.py $(SIZE)
$(LIB_DIR)/%$(LIB_SUFFIX): src/%.cpp
$(CXX) $(COMMON_FLAGS) -o $@ -c $<
$(BIN_DIR)/test_%: $(OBJS) src/%.cpp
$(CXX) $(COMMON_FLAGS) -o $@ $(OBJS) src/$*_test.cpp
init:
@echo "\033[2mBuilding for - Platform: $(UNAME_S); Size: $(SIZE); Debug: $(DEBUG)\033[0m"
@mkdir -p $(BIN_DIR) && mkdir -p $(LIB_DIR)
clean:
-rm -r $(BIN_DIR)
-rm src/indexer_impl_*.cpp