-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild.ninja
117 lines (98 loc) · 5.17 KB
/
build.ninja
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# Compiler and flags
project_version = 0.9.8
cxx = clang++
cxxflags = $
-DPROJECT_VERSION=\"$project_version\" $
-Wno-everything $
-std=c++23 $
-fmodules $
-fprebuilt-module-path=build/pcm
ldflags = -lgit2
# Rules for compiling modules
rule compile_pcm
command = $cxx $cxxflags --precompile $in -o $out
description = Creating module interface $out
rule compile_object
command = $cxx $cxxflags -c $in -o $out
description = Compiling $out
rule compile_cpp
command = $cxx $cxxflags -c $in -o $out
description = Compiling $in
rule link
command = $cxx $cxxflags $in -o $out $ldflags
description = Linking $out
# Creating dirs for building
rule mkdir
command = mkdir -p $out
description = Creating directory $out
# Specifying dirs for building
build build: mkdir
build build/pcm: mkdir
# Building base modules (Level 1)
build build/pcm/concurrent_queue.pcm: compile_pcm src/concurrent_queue.cppm | build/pcm
build build/pcm/console_formatter.pcm: compile_pcm src/console_formatter.cppm | build/pcm
build build/pcm/lines_count.pcm: compile_pcm src/lines_count.cppm | build/pcm
build build/pcm/args_parser.pcm: compile_pcm src/args_parser.cppm | build/pcm
build build/concurrent_queue.o: compile_object build/pcm/concurrent_queue.pcm
build build/console_formatter.o: compile_object build/pcm/console_formatter.pcm
build build/lines_count.o: compile_object build/pcm/lines_count.pcm
build build/args_parser.o: compile_object build/pcm/args_parser.pcm
# Building modules with basic dependencies (Level 2)
build build/pcm/file_utils.pcm: compile_pcm src/file_utils.cppm | $
build/pcm/concurrent_queue.pcm
build build/pcm/analyzer_base.pcm: compile_pcm src/analyzer_base.cppm
build build/pcm/language_info.pcm: compile_pcm src/language_info.cppm
build build/pcm/stats_reporter.pcm: compile_pcm src/stats_reporter.cppm | $
build/pcm/language_info.pcm $
build/pcm/lines_count.pcm
build build/file_utils.o: compile_object build/pcm/file_utils.pcm
build build/analyzer_base.o: compile_object build/pcm/analyzer_base.pcm
build build/language_info.o: compile_object build/pcm/language_info.pcm
build build/stats_reporter.o: compile_object build/pcm/stats_reporter.pcm
# Building dependent modules (Level 3)
build build/pcm/git_analyzer.pcm: compile_pcm src/git_analyzer.cppm | $
build/pcm/console_formatter.pcm $
build/pcm/analyzer_base.pcm
build build/pcm/language_analyzer.pcm: compile_pcm src/language_analyzer.cppm | $
build/pcm/language_info.pcm $
build/pcm/stats_reporter.pcm
build build/pcm/license_analyzer.pcm: compile_pcm src/license_analyzer.cppm | $
build/pcm/console_formatter.pcm $
build/pcm/analyzer_base.pcm
build build/pcm/lines_analyzer.pcm: compile_pcm src/lines_analyzer.cppm | $
build/pcm/stats_reporter.pcm $
build/pcm/lines_count.pcm
build build/pcm/metabuild_sys_analyzer.pcm: compile_pcm src/metabuild_sys_analyzer.cppm | $
build/pcm/console_formatter.pcm $
build/pcm/analyzer_base.pcm
build build/git_analyzer.o: compile_object build/pcm/git_analyzer.pcm
build build/language_analyzer.o: compile_object build/pcm/language_analyzer.pcm
build build/license_analyzer.o: compile_object build/pcm/license_analyzer.pcm
build build/lines_analyzer.o: compile_object build/pcm/lines_analyzer.pcm
build build/metabuild_sys_analyzer.o: compile_object build/pcm/metabuild_sys_analyzer.pcm
# Compiling main.cpp and linking
build build/main.o: compile_cpp src/main.cpp | build/pcm/license_analyzer.pcm $
build/pcm/metabuild_sys_analyzer.pcm $
build/pcm/git_analyzer.pcm $
build/pcm/lines_analyzer.pcm $
build/pcm/language_analyzer.pcm
build codefetch: link build/main.o build/concurrent_queue.o $
build/console_formatter.o build/lines_count.o $
build/args_parser.o build/file_utils.o $
build/analyzer_base.o build/language_info.o $
build/stats_reporter.o build/git_analyzer.o $
build/language_analyzer.o build/license_analyzer.o $
build/lines_analyzer.o build/metabuild_sys_analyzer.o
# Default Targets
default codefetch
rule clean
command = rm -rf ./codefetch ./build ./.ninja_log
build clean: clean
rule install_bin
command = install -m 755 codefetch /usr/local/bin/codefetch
description = Installing codefetch
rule uninstall_bin
command = rm -f /usr/local/bin/codefetch
description = Uninstalling codefetch
build install: install_bin
build uninstall: uninstall_bin