]> git.sur5r.net Git - cc65/blob - src/Makefile
Merge branch 'master' into c1p
[cc65] / src / Makefile
1 ifeq ($(shell echo),)
2
3 PROGS = ar65  \
4         c1p65 \
5         ca65  \
6         cc65  \
7         cl65  \
8         co65  \
9         da65  \
10         grc65 \
11         ld65  \
12         od65  \
13         sim65 \
14         sp65
15
16 ifdef prefix
17   CA65_INC = $(prefix)/lib/cc65/asminc
18   CC65_INC = $(prefix)/lib/cc65/include
19   LD65_LIB = $(prefix)/lib/cc65/lib
20   LD65_OBJ = $(prefix)/lib/cc65/lib
21   LD65_CFG = $(prefix)/lib/cc65/cfg
22 else
23   CA65_INC := $(abspath ../asminc)
24   CC65_INC := $(abspath ../include)
25   LD65_LIB := $(abspath ../lib)
26   LD65_OBJ := $(abspath ../lib)
27   LD65_CFG := $(abspath ../cfg)
28 endif
29
30 CFLAGS += -MMD -MP -O -std=c89 -I common \
31           -Wall -Wextra -Wno-char-subscripts -Werror \
32           -DCA65_INC=$(CA65_INC) -DCC65_INC=$(CC65_INC) \
33           -DLD65_LIB=$(LD65_LIB) -DLD65_OBJ=$(LD65_OBJ) -DLD65_CFG=$(LD65_CFG)
34
35 LDLIBS += -lm
36
37 .SUFFIXES:
38
39 .PHONY: all bin $(PROGS) mostlyclean clean avail unavail
40
41 all bin: $(PROGS)
42
43 mostlyclean:
44         $(RM) -r ../wrk
45
46 clean:
47         $(RM) -r ../wrk ../bin
48
49 avail:
50         $(foreach prog,$(PROGS),$(AVAIL_recipe))
51
52 unavail:
53         $(foreach prog,$(PROGS),$(UNAVAIL_recipe))
54
55 ##########
56
57 define AVAIL_recipe
58
59 ln -s $(abspath ../bin/$(prog)) /usr/local/bin/$(prog)
60
61 endef
62
63 ##########
64
65 define UNAVAIL_recipe
66
67 $(RM) /usr/local/bin/$(prog)
68
69 endef
70
71 ##########
72
73 define OBJS_template
74
75 $1_OBJS := $$(patsubst %.c,../wrk/%.o,$$(wildcard $1/*.c))
76
77 $$($1_OBJS): | ../wrk/$1
78
79 ../wrk/$1:
80         @mkdir -p $$@
81
82 DEPS += $$($1_OBJS:.o=.d)
83
84 endef
85
86 ##########
87
88 define PROG_template
89
90 $$(eval $$(call OBJS_template,$1))
91
92 ../bin/$1: $$($1_OBJS) ../wrk/common/common.a | ../bin
93         $$(CC) $$(LDFLAGS) -o $$@ $$^ $$(LDLIBS)
94
95 $1: ../bin/$1
96
97 endef
98
99 ##########
100
101 ../wrk/%.o: %.c
102         @echo $<
103         @$(CC) -c $(CFLAGS) -o $@ $<
104
105 ../bin:
106         @mkdir $@
107
108 $(eval $(call OBJS_template,common))
109 ../wrk/common/common.a: $(common_OBJS)
110         $(AR) r $@ $?
111
112 $(foreach prog,$(PROGS),$(eval $(call PROG_template,$(prog))))
113
114 -include $(DEPS)
115
116 else # cmd.exe
117
118 .SUFFIXES:
119
120 .PHONY: all bin mostlyclean clean
121
122 all bin:
123         msbuild cc65.sln /p:configuration=release /consoleloggerparameters:disableconsolecolor
124
125 mostlyclean:
126         $(if $(wildcard ../wrk),rmdir /s /q ..\wrk)
127
128 clean:
129         msbuild cc65.sln /p:configuration=release /consoleloggerparameters:disableconsolecolor /target:$@
130
131 endif # cmd.exe