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