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