]> git.sur5r.net Git - cc65/blob - src/Makefile
Merge pull request #100 from greg-king5/default-drivers
[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 ifdef CMD_EXE
31   NULLDEV = nul:
32   DIRLIST = $(strip $(foreach dir,$1,$(wildcard $(dir))))
33   MKDIR = mkdir $(subst /,\,$1)
34   RMDIR = $(if $(DIRLIST),rmdir /s /q $(subst /,\,$(DIRLIST)))
35 else
36   NULLDEV = /dev/null
37   MKDIR = mkdir -p $1
38   RMDIR = $(RM) -r $1
39 endif
40
41 CC = $(CROSS_COMPILE)gcc
42 AR = $(CROSS_COMPILE)ar
43
44 ifdef CROSS_COMPILE
45   $(info CC: $(CC))
46   $(info AR: $(AR))
47 endif
48
49 ifdef USER_CFLAGS
50   $(info USER_CFLAGS: $(USER_CFLAGS))
51 endif
52
53 ifdef GIT_SHA
54   $(info GIT_SHA: $(GIT_SHA))
55 else
56   GIT_SHA := $(shell git rev-parse --short HEAD 2>$(NULLDEV))
57   ifneq ($(words $(GIT_SHA)),1)
58     GIT_SHA := N/A
59     $(info GIT_SHA: N/A)
60   endif
61 endif
62
63 CFLAGS += -MMD -MP -O -I common \
64           -Wall -Wextra -Wno-char-subscripts $(USER_CFLAGS) \
65           -DGIT_SHA=$(GIT_SHA) -DCA65_INC=$(CA65_INC) -DCC65_INC=$(CC65_INC) \
66           -DLD65_LIB=$(LD65_LIB) -DLD65_OBJ=$(LD65_OBJ) -DLD65_CFG=$(LD65_CFG)
67
68 LDLIBS += -lm
69
70 ifdef CMD_EXE
71   EXE_SUFFIX=.exe
72 endif
73
74 ifdef CROSS_COMPILE
75   EXE_SUFFIX=.exe
76 endif
77
78 all bin: $(PROGS)
79
80 mostlyclean:
81         $(call RMDIR,../wrk)
82
83 clean:
84         $(call RMDIR,../wrk ../bin)
85
86 ifdef CMD_EXE
87
88 install avail unavail:
89
90 else # CMD_EXE
91
92 INSTALL = install
93
94 define AVAIL_recipe
95
96 ln -s $(abspath ../bin/$(prog)) /usr/local/bin/$(prog)
97
98 endef # AVAIL_recipe
99
100 define UNAVAIL_recipe
101
102 $(RM) /usr/local/bin/$(prog)
103
104 endef # UNAVAIL_recipe
105
106 install:
107         $(if $(prefix),,$(error variable `prefix' must be set))
108         $(INSTALL) -d $(DESTDIR)$(bindir)
109         $(INSTALL) ../bin/* $(DESTDIR)$(bindir)
110
111 avail:
112         $(foreach prog,$(PROGS),$(AVAIL_recipe))
113
114 unavail:
115         $(foreach prog,$(PROGS),$(UNAVAIL_recipe))
116
117 endif # CMD_EXE
118
119 zip:
120         @cd .. && zip cc65 bin/*
121
122 define OBJS_template
123
124 $1_OBJS := $$(patsubst %.c,../wrk/%.o,$$(wildcard $1/*.c))
125
126 $$($1_OBJS): | ../wrk/$1
127
128 ../wrk/$1:
129         @$$(call MKDIR,$$@)
130
131 DEPS += $$($1_OBJS:.o=.d)
132
133 endef # OBJS_template
134
135 define PROG_template
136
137 $$(eval $$(call OBJS_template,$1))
138
139 ../bin/$1$(EXE_SUFFIX): $$($1_OBJS) ../wrk/common/common.a | ../bin
140         $$(CC) $$(LDFLAGS) -o $$@ $$^ $$(LDLIBS)
141
142 $1: ../bin/$1$(EXE_SUFFIX)
143
144 endef # PROG_template
145
146 ../wrk/%.o: %.c
147         @echo $<
148         @$(CC) -c $(CFLAGS) -o $@ $<
149
150 ../bin:
151         @$(call MKDIR,$@)
152
153 $(eval $(call OBJS_template,common))
154
155 ../wrk/common/common.a: $(common_OBJS)
156         $(AR) r $@ $?
157
158 $(foreach prog,$(PROGS),$(eval $(call PROG_template,$(prog))))
159
160 -include $(DEPS)