Commit | Line | Data |
---|---|---|
7fbe0fb9 MW |
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)) |