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