]> git.sur5r.net Git - cc65/blob - src/Makefile
17754190c501bc38a065c0e53c0dc419ae8201e4
[cc65] / src / Makefile
1 ifneq ($(shell echo),)
2   CMD_EXE = 1
3 endif
4
5 PROGS = ar65  \
6         ca65  \
7         cc65  \
8         cl65  \
9         co65  \
10         da65  \
11         grc65 \
12         ld65  \
13         od65  \
14         sim65 \
15         sp65
16
17 .PHONY: all mostlyclean clean install zip avail unavail bin $(PROGS)
18
19 .SUFFIXES:
20
21 bindir  := $(prefix)/bin
22 datadir := $(if $(prefix),$(prefix)/share/cc65,$(abspath ..))
23
24 CA65_INC = $(datadir)/asminc
25 CC65_INC = $(datadir)/include
26 LD65_LIB = $(datadir)/lib
27 LD65_OBJ = $(datadir)/lib
28 LD65_CFG = $(datadir)/cfg
29
30 CC = $(CROSS_COMPILE)gcc
31 AR = $(CROSS_COMPILE)ar
32
33 ifdef CROSS_COMPILE
34   $(info CC: $(CC))
35   $(info AR: $(AR))
36 endif
37
38 ifdef USER_CFLAGS
39   $(info USER_CFLAGS: $(USER_CFLAGS))
40 endif
41
42 CFLAGS += -MMD -MP -O -I common \
43           -Wall -Wextra -Wno-char-subscripts $(USER_CFLAGS) \
44           -DCA65_INC=$(CA65_INC) -DCC65_INC=$(CC65_INC) \
45           -DLD65_LIB=$(LD65_LIB) -DLD65_OBJ=$(LD65_OBJ) -DLD65_CFG=$(LD65_CFG)
46
47 LDLIBS += -lm
48
49 ifdef CMD_EXE
50   EXE_SUFFIX=.exe
51 endif
52
53 ifdef CROSS_COMPILE
54   EXE_SUFFIX=.exe
55 endif
56
57 ifdef CMD_EXE
58   DIRLIST = $(strip $(foreach dir,$1,$(wildcard $(dir))))
59   MKDIR = mkdir $(subst /,\,$1)
60   RMDIR = $(if $(DIRLIST),rmdir /s /q $(subst /,\,$(DIRLIST)))
61 else
62   MKDIR = mkdir -p $1
63   RMDIR = $(RM) -r $1
64 endif
65
66 all bin: $(PROGS)
67
68 mostlyclean:
69         $(call RMDIR,../wrk)
70
71 clean:
72         $(call RMDIR,../wrk ../bin)
73
74 ifdef CMD_EXE
75
76 install avail unavail:
77
78 else # CMD_EXE
79
80 INSTALL = install
81
82 define AVAIL_recipe
83
84 ln -s $(abspath ../bin/$(prog)) /usr/local/bin/$(prog)
85
86 endef # AVAIL_recipe
87
88 define UNAVAIL_recipe
89
90 $(RM) /usr/local/bin/$(prog)
91
92 endef # UNAVAIL_recipe
93
94 install:
95         $(if $(prefix),,$(error variable `prefix' must be set))
96         $(INSTALL) -d $(DESTDIR)$(bindir)
97         $(INSTALL) ../bin/* $(DESTDIR)$(bindir)
98
99 avail:
100         $(foreach prog,$(PROGS),$(AVAIL_recipe))
101
102 unavail:
103         $(foreach prog,$(PROGS),$(UNAVAIL_recipe))
104
105 endif # CMD_EXE
106
107 zip:
108         @cd .. && zip cc65 bin/*
109
110 define OBJS_template
111
112 $1_OBJS := $$(patsubst %.c,../wrk/%.o,$$(wildcard $1/*.c))
113
114 $$($1_OBJS): | ../wrk/$1
115
116 ../wrk/$1:
117         @$$(call MKDIR,$$@)
118
119 DEPS += $$($1_OBJS:.o=.d)
120
121 endef # OBJS_template
122
123 define PROG_template
124
125 $$(eval $$(call OBJS_template,$1))
126
127 ../bin/$1$(EXE_SUFFIX): $$($1_OBJS) ../wrk/common/common.a | ../bin
128         $$(CC) $$(LDFLAGS) -o $$@ $$^ $$(LDLIBS)
129
130 $1: ../bin/$1$(EXE_SUFFIX)
131
132 endef # PROG_template
133
134 ../wrk/%.o: %.c
135         @echo $<
136         @$(CC) -c $(CFLAGS) -o $@ $<
137
138 ../bin:
139         @$(call MKDIR,$@)
140
141 $(eval $(call OBJS_template,common))
142
143 ../wrk/common/common.a: $(common_OBJS)
144         $(AR) r $@ $?
145
146 $(foreach prog,$(PROGS),$(eval $(call PROG_template,$(prog))))
147
148 -include $(DEPS)