-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmakefile
134 lines (105 loc) · 3.68 KB
/
makefile
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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
.SECONDARY:
HEADERS := $(shell find include -type f -name "*.h" -not -name ".*")
SOURCES := $(shell find src -iname "*.c")
SONAME = dparaster
MAJOR = 0
MINOR = 0
PATCH = 0
prefix = /usr/local/
TYPE := release
ifdef debug
TYPE := debug
CFLAGS += -O0 -g
LDFLAGS += -g
else
CFLAGS += -O3
endif
ifdef asan
TYPE := $(TYPE)-asan
CFLAGS += -fsanitize=address
LDFLAGS += -fsanitize=address
dynamic=1
endif
export TYPE
ifndef dynamic
LDFLAGS_BIN += -static
endif
CFLAGS += --std=c17
CFLAGS += -Iinclude
CFLAGS += -Wall -Wextra -pedantic -Werror
CFLAGS += -fstack-protector-all
CFLAGS += -Wno-missing-field-initializers
ifndef debug
CFLAGS += -ffunction-sections -fdata-sections
LDFLAGS += -Wl,--gc-sections
endif
LDLIBS_BIN += -Wl,--no-as-needed -Llib/$(TYPE)/ -l$(SONAME)
LDLIBS += -lm
OBJECTS := $(patsubst %,build/$(TYPE)/o/%.o,$(SOURCES))
.PHONY: all clean get-bin get-lib install uninstall shell test
all: bin/$(TYPE)/rasterizer \
bin/$(TYPE)/bmpinfo \
lib/$(TYPE)/lib$(SONAME).a \
lib/$(TYPE)/lib$(SONAME).so
get-bin:
@echo bin/$(TYPE)/
get-lib:
@echo lib/$(TYPE)/
bin/$(TYPE)/%: build/$(TYPE)/o/src/main/%.c.o lib/$(TYPE)/lib$(SONAME).so
mkdir -p $(dir $@)
$(CC) -o $@~ $(LDFLAGS) $(LDFLAGS_BIN) $< $(LDLIBS_BIN) $(LDLIBS)
mv $@~ $@
lib/$(TYPE)/lib$(SONAME).so: lib/$(TYPE)/lib$(SONAME).a
ln -sf "lib$(SONAME).so" "[email protected]"
$(CC) -o $@ -Wl,--no-undefined -Wl,-soname,lib$(SONAME).so.$(MAJOR) --shared -fPIC $(LDFLAGS) -Wl,--whole-archive $^ -Wl,--no-whole-archive $(LDLIBS)
lib/$(TYPE)/lib$(SONAME).a: $(filter-out build/$(TYPE)/o/src/main/%,$(OBJECTS))
mkdir -p $(dir $@)
rm -f $@
$(AR) q $@ $^
build/$(TYPE)/o/%.c.o: %.c makefile $(HEADERS)
mkdir -p $(dir $@)
$(CC) -fPIC -c -o $@ $(DFLAGS) $(CFLAGS) $<
clean:
rm -rf build/$(TYPE)/ bin/$(TYPE)/ lib/$(TYPE)/
install:
cp -r include/dparaster/./ "$(DESTDIR)$(prefix)/include/dparaster/"
cp "lib/$(TYPE)/lib$(SONAME).so" "$(DESTDIR)$(prefix)/lib/lib$(SONAME).so.$(MAJOR).$(MINOR).$(PATCH)"
ln -sf "lib$(SONAME).so.$(MAJOR).$(MINOR).$(PATCH)" "$(DESTDIR)$(prefix)/lib/lib$(SONAME).so.$(MAJOR).$(MINOR)"
ln -sf "lib$(SONAME).so.$(MAJOR).$(MINOR).$(PATCH)" "$(DESTDIR)$(prefix)/lib/lib$(SONAME).so.$(MAJOR)"
ln -sf "lib$(SONAME).so.$(MAJOR).$(MINOR).$(PATCH)" "$(DESTDIR)$(prefix)/lib/lib$(SONAME).so"
uninstall:
rm -rf "$(DESTDIR)$(prefix)/include/dparaster/"
rm -f "$(DESTDIR)$(prefix)/lib/lib$(SONAME).so.$(MAJOR).$(MINOR).$(PATCH)"
rm -f "$(DESTDIR)$(prefix)/lib/lib$(SONAME).so.$(MAJOR).$(MINOR)"
rm -f "$(DESTDIR)$(prefix)/lib/lib$(SONAME).so.$(MAJOR)"
rm -f "$(DESTDIR)$(prefix)/lib/lib$(SONAME).so"
shell:
PROMPT_COMMAND='if [ -z "$$PS_SET" ]; then PS_SET=1; PS1="(dparaster) $$PS1"; fi' \
LD_LIBRARY_PATH="$$PWD/lib/$(TYPE)/" \
PATH="$$PWD/bin/$(TYPE)/:$$PATH" \
"$$SHELL"
speed ?= 50
demo: \
bin/$(TYPE)/rasterizer \
bin/$(TYPE)/bmpinfo
LD_LIBRARY_PATH="$$PWD/lib/$(TYPE)/" \
./script/bmpvid 'bin/$(TYPE)/rasterizer -y $$(echo "$$(date +%s.%N) * $(speed)" | bc -l) -'
demo-video: \
bin/$(TYPE)/cube.webm \
bin/$(TYPE)/cube.png \
bin/$(TYPE)/cube.mp4 \
bin/$(TYPE)/cube.webm: \
bin/$(TYPE)/rasterizer \
bin/$(TYPE)/bmpinfo
LD_LIBRARY_PATH="$$PWD/lib/$(TYPE)/" \
COUNT=360 ./script/bmpvid 'bin/$(TYPE)/rasterizer -y $$i -' 'videoconvert ! vp9enc ! webmmux ! filesink location=$@'
bin/$(TYPE)/cube.mp4: \
bin/$(TYPE)/rasterizer \
bin/$(TYPE)/bmpinfo
LD_LIBRARY_PATH="$$PWD/lib/$(TYPE)/" \
COUNT=360 ./script/bmpvid 'bin/$(TYPE)/rasterizer -y $$i -' 'videoconvert ! x264enc ! mp4mux ! filesink location=$@'
bin/$(TYPE)/cube.png: \
bin/$(TYPE)/rasterizer \
bin/$(TYPE)/bmpinfo
LD_LIBRARY_PATH="$$PWD/lib/$(TYPE)/" \
COUNT=360 ./script/bmpvid --ffmpeg 'bin/$(TYPE)/rasterizer -y $$i -' '-y -f apng -plays 0 $@'