chiark / gitweb /
Initial commit.
[dvdrip] / Makefile
1 ### -*-makefile-*-
2
3 all:
4 clean::
5
6 .SECONDEXPANSION: # sorry
7
8 bindir                   = ../bin
9
10 V                        = 0
11 V_AT                     = $(V_AT_$V)
12 V_AT_0                   = @
13 v-tag                    = $(call v-tag_$V,$1)
14 v-tag_0                  = @printf "  %-12s %s\n" "$1" "$@";
15
16 CC                       = gcc
17 CFLAGS                   = -O2 -g -pedantic -Wall -Werror
18
19 LD                       = gcc
20 LDFLAGS                  =
21
22 ARCH                    += i686
23 CFLAGS_i386              = -m32
24
25 ARCH                    += x86_64
26 CFLAGS_amd64             = -m64
27
28 PROGS                   += dvd-sector-copy
29 dvd-sector-copy_SRCS     = dvd-sector-copy.c
30 dvd-sector-copy_LIBS     = -ldvdread -lm
31
32 SCRIPTS                 += dvdrip
33 SCRIPTS                 += dvdrip-upload
34
35 define setup-arch
36 obj.$1/%.o: %.c
37         $$(V_AT)mkdir -p $$(dir $$@)
38         $$(call v-tag,CC [$1])$$(CC) -c $$(CFLAGS) $$(CFLAGS_$1) -o$$@ -MD -MF obj.$1/$$*.dep $$<
39 clean::; rm -rf obj.$1
40 endef
41 $(foreach a,$(ARCH), $(eval $(call setup-arch,$a)))
42
43 objects                  = $(addsuffix $(or $2,.o),$(basename $(filter %.c %.s %.S,$1)))
44
45 ALL_PROGS               += $(foreach a,$(ARCH), \
46                                 $(foreach p,$(PROGS), $(bindir)/$p.$a))
47 TARGETS                 += $(ALL_PROGS)
48 program-name             = $(basename $1)
49 program-arch             = $(patsubst .%,%,$(suffix $1))
50 program-sources          = $($(call program-name,$1)_SRCS) \
51                                 $($(call program-name,$1)_SRCS_$(call program-arch,$1))
52 program-objects          = $(addprefix obj.$(call program-arch,$1)/, \
53                                 $(call objects,$(call program-sources,$1),$2))
54 $(ALL_PROGS): $(bindir)/%: $$(call program-objects,$$*) $$($$(call program-name,$$*)_DEPS)
55         $(call v-tag,LD [$(call program-arch,$*)])$(LD) \
56                 $(LDFLAGS) $(LDFLAGS_$(call program-arch,$*)) -o$@ \
57                 $(call program-objects,$*) \
58                 $($(call program-name,$*)_LIBS) \
59                 $($(call program-name,$*)_LIBS_$(call program-arch,$*))
60
61 ALL_SCRIPTS              = $(addprefix $(bindir)/, $(SCRIPTS))
62 TARGETS                 += $(ALL_SCRIPTS)
63 $(ALL_SCRIPTS): $(bindir)/%: %
64         $(call v-tag,SCRIPT)install $* $@
65
66 p:; : $p
67
68 all: $(TARGETS)
69 clean::; rm -f $(TARGETS)
70
71 -include $(foreach p,$(notdir $(ALL_PROGS)), $(call program-objects,$p,.dep))