-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
73 lines (51 loc) · 2.31 KB
/
Makefile
File metadata and controls
73 lines (51 loc) · 2.31 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
cc = gcc
use_clang := $(if $(findstring clang, $(cc)), 1,)
windows := $(if $(findstring Windows_NT, $(OS)), 1,)
comma =,
build_dir := build
ff_dir := $(build_dir)/ffmpeg
basename := pixie
bin := $(strip $(basename).$(strip $(if $(windows), exe)))
shared_lib := $(strip $(if $(windows), $(basename).dll, lib$(basename).so))
app_src_dirs := app
lib_src_dirs := src src/util
incl_dirs := incl
lib_src_files := $(foreach dir, $(lib_src_dirs), $(wildcard $(dir)/*.c))
app_src_files := $(foreach dir, $(app_src_dirs), $(wildcard $(dir)/*.c))
lib_obj_files := $(lib_src_files:%=$(build_dir)/%.o)
app_obj_files := $(app_src_files:%=$(build_dir)/%.o)
dep_files := $(lib_obj_files:.o=.d) $(app_obj_files:.o=.d)
warns := $(strip -Wall -Wextra -Wpedantic -Wshadow -Wformat=2 -Wconversion \
-Wno-gnu-zero-variadic-macro-arguments \
-Wno-cast-function-type -Wno-fixed-enum-extension)
includes := $(strip $(incl_dirs:%=-I%) $(if $(windows), -isystem$(ff_dir)/include))
ff_libs := $(strip $(if $(windows), -L$(ff_dir)/lib -lavcodec -lavformat -lavutil -lswscale, \
$(shell sh scripts/get-ff-libs.sh)))
ifeq ($(ff_libs),)
exit 1
endif
base_cflags := -std=c2x $(warns)
cflags := $(strip $(includes) $(base_cflags) $(extra_cflags) -fPIC \
$(if $(debug), -ggdb3 -DDEBUG, -O3 -ffast-math -funroll-loops -DNDEBUG) \
$(if $(windows), -D__USE_MINGW_ANSI_STDIO) \
$(sanitize:%=-fsanitize=%))
ldflags := $(strip -lm $(ff_libs) $(if $(use_clang), -fuse-ld=lld) \
$(if $(windows),, -ldl -rdynamic) $(sanitize:%=-fsanitize=%) $(extra_ldflags))
default: gen-compile_flags-txt $(build_dir)/$(bin)
$(build_dir)/$(bin): $(build_dir)/$(shared_lib) $(app_obj_files)
@$(cc) $(app_obj_files) -L$(build_dir) -l$(basename) $(ldflags) -o $@
$(build_dir)/$(shared_lib): $(lib_obj_files)
@$(cc) $(lib_obj_files) $(ldflags) -shared \
$(if $(windows), -Wl$(comma)--out-implib$(comma)$(build_dir)/$(shared_lib).a) -o $@
$(build_dir)/%.c.o: %.c Makefile
@mkdir -p $(dir $@) &
@$(cc) $(cflags) -MMD -MP -c $< -o $@
-include $(dep_files)
clean:
@rm -rf $(build_dir)/$(bin) $(build_dir)/$(shared_lib) $(build_dir)/$(shared_lib).a \
$(app_src_dirs:%=$(build_dir)/%) $(lib_src_dirs:%=$(build_dir)/%) &
clean-all:
rm -rf $(build_dir)/*
gen-compile_flags-txt:
@sh ./scripts/gen-compile_flags-txt.sh "$(base_cflags) $(includes)"
.PHONY: default clean clean-all gen-compile_flags-txt