-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGNUmakefile
More file actions
87 lines (69 loc) · 2.72 KB
/
GNUmakefile
File metadata and controls
87 lines (69 loc) · 2.72 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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# Standard stuff
.SUFFIXES:
MAKEFLAGS+= --no-builtin-rules # Disable the built-in implicit rules.
# MAKEFLAGS+= --warn-undefined-variables # Warn when an undefined variable is referenced.
export hostSystemName=$(shell uname)
ifeq (${hostSystemName},Darwin)
export LLVM_PREFIX:=$(shell brew --prefix llvm)
export LLVM_DIR:=$(shell realpath ${LLVM_PREFIX})
export PATH:=${LLVM_DIR}/bin:${PATH}
# export CMAKE_CXX_STDLIB_MODULES_JSON:=${LLVM_DIR}/lib/c++/libc++.modules.json
# export CXX:=clang++
# export LDFLAGS:=-L$(LLVM_DIR)/lib/c++ -lc++abi # XXX NO! -lc++ -lc++experimental
# export GCOV:="llvm-cov gcov"
### TODO: to test g++-15:
export GCC_PREFIX:=$(shell brew --prefix gcc)
export GCC_DIR:=$(shell realpath ${GCC_PREFIX})
# export CMAKE_CXX_STDLIB_MODULES_JSON:=${GCC_DIR}/lib/gcc/current/libstdc++.modules.json
export CXX:=g++-15
# XXX NO! export CXXFLAGS:=-stdlib=libstdc++
export GCOV:="gcov"
else ifeq (${hostSystemName},Linux)
export LLVM_DIR:=/usr/lib/llvm-20
export PATH:=${LLVM_DIR}/bin:${PATH}
export CXX:=clang++-20
endif
.PHONY: all check test example clean format distclean configure
all: .init
cmake --workflow --preset dev
check: all
run-clang-tidy -p build/dev -checks='-*,misc-header-*,misc-include-*' tests
-ninja -C build/dev spell-check
configure:
cmake --version
CXX=g++-15 cmake -G Ninja -S . -B build/manual -D FMT_MODULE=1 -D FMT_IMPORT_STD=1 -D CMAKE_CXX_STANDARD=23 -D CMAKE_CXX_SCAN_FOR_MODULES=1 -D FMT_DEVELOPER_MODE=1 -D CMAKE_BUILD_TYPE=Release --fresh --log-level=VERBOSE
ninja -C build/manual test
test:
# cmake --preset ci-${hostSystemName} --fresh
# cmake --build build
# cmake --install build --prefix $(CURDIR)/stagedir
cmake -G Ninja -B build/tests -S tests -D CMAKE_PREFIX_PATH=$(CURDIR)/stagedir
cmake --build build/tests -- -v -j 1
ctest --test-dir build/tests
example:
cmake -B build/example -S example -G Ninja
cmake --build build/example -- -v
ctest --test-dir build/example --verbose
.init: requirements.txt .CMakeUserPresets.json CMakePresets.json CMakeLists.txt GNUmakefile
perl -p -e 's/<hostSystemName>/${hostSystemName}/;' .CMakeUserPresets.json > CMakeUserPresets.json
-pip3 install --upgrade -r requirements.txt
cmake --version
cmake --preset dev --fresh --log-level=VERBOSE
-cmake --build --preset dev --target all_verify_interface_header_sets
ln -sf build/dev/compile_commands.json .
touch .init
clean:
rm -rf build
format:
pre-commit autoupdate
pre-commit run --all
distclean: clean
rm -rf stagedir .init CMakeUserPresets.json tags compile_commands.json
find . -name '*~' -delete
# XXX NO! git clean -xdf
GNUmakefile :: ;
*.txt :: ;
*.json :: ;
# Anything we don't know how to build will use this rule.
% ::
ninja -C build/dev $(@)