]> sigrok.org Git - sigrok-firmware-fx2lafw.git/blob - Makefile.am
build: Switch to non-recursive make
[sigrok-firmware-fx2lafw.git] / Makefile.am
1 ##
2 ## This file is part of the sigrok-firmware-fx2lafw project.
3 ##
4 ## Copyright (C) 2013 Uwe Hermann <uwe@hermann-uwe.de>
5 ## Copyright (C) 2015 Daniel Elstner <daniel.kitta@gmail.com>
6 ##
7 ## This program is free software; you can redistribute it and/or modify
8 ## it under the terms of the GNU General Public License as published by
9 ## the Free Software Foundation; either version 2 of the License, or
10 ## (at your option) any later version.
11 ##
12 ## This program is distributed in the hope that it will be useful,
13 ## but WITHOUT ANY WARRANTY; without even the implied warranty of
14 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 ## GNU General Public License for more details.
16 ##
17 ## You should have received a copy of the GNU General Public License
18 ## along with this program; if not, write to the Free Software
19 ## Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
20 ##
21
22 GNUMAKEFLAGS = --no-print-directory
23 SUFFIXES = .a51 .c .fw .ihx .rel
24
25 # Flags for firmware hex file generation
26 SDCC_LINK_FLAGS = --code-size 0x1c00 --xram-size 0x0200 --xram-loc 0x1c00 -Wl"-b DSCR_AREA=0x1e00" -Wl"-b INT2JT=0x1f00"
27
28 # Include paths
29 as_includes = -I$(srcdir)/include
30 c_includes = -I$(srcdir)/include -I$(srcdir)/fx2lib/include
31
32 # Binary firmware tarball basename
33 distdir_bin = $(PACKAGE)-bin-$(VERSION)
34
35 # Basename of directory stamp files
36 dirstamp = .dirstamp
37
38 dirstamps = \
39         fx2lib/lib/$(dirstamp) \
40         fx2lib/lib/interrupts/$(dirstamp) \
41         hw/braintechnology-usb-lps/$(dirstamp) \
42         hw/cwav-usbeeax/$(dirstamp) \
43         hw/cwav-usbeedx/$(dirstamp) \
44         hw/cwav-usbeesx/$(dirstamp) \
45         hw/cypress-fx2/$(dirstamp) \
46         hw/saleae-logic/$(dirstamp) \
47         hw/sigrok-fx2-8ch/$(dirstamp) \
48         hw/sigrok-fx2-16ch/$(dirstamp)
49
50 # Final firmware files
51 firmware_binaries = \
52         hw/braintechnology-usb-lps/fx2lafw-braintechnology-usb-lps.fw \
53         hw/cwav-usbeeax/fx2lafw-cwav-usbeeax.fw \
54         hw/cwav-usbeedx/fx2lafw-cwav-usbeedx.fw \
55         hw/cwav-usbeesx/fx2lafw-cwav-usbeesx.fw \
56         hw/cypress-fx2/fx2lafw-cypress-fx2.fw \
57         hw/saleae-logic/fx2lafw-saleae-logic.fw \
58         hw/sigrok-fx2-8ch/fx2lafw-sigrok-fx2-8ch.fw \
59         hw/sigrok-fx2-16ch/fx2lafw-sigrok-fx2-16ch.fw
60
61 fx2lafw_headers = \
62         include/command.h \
63         include/dscr.inc \
64         include/fx2lafw.h \
65         include/gpif-acquisition.h
66
67 fx2lafw_sources = \
68         fx2lafw.c \
69         gpif-acquisition.c
70
71 fx2lafw_objects = \
72         fx2lafw.rel \
73         gpif-acquisition.rel
74
75 fx2lib_headers = \
76         fx2lib/include/autovector.h \
77         fx2lib/include/delay.h \
78         fx2lib/include/eputils.h \
79         fx2lib/include/fx2ints.h \
80         fx2lib/include/fx2macros.h \
81         fx2lib/include/fx2regs.h \
82         fx2lib/include/fx2types.h \
83         fx2lib/include/gpif.h \
84         fx2lib/include/i2c.h \
85         fx2lib/include/lights.h \
86         fx2lib/include/serial.h \
87         fx2lib/include/setupdat.h
88
89 fx2lib_sources = \
90         fx2lib/lib/delay.c \
91         fx2lib/lib/eputils.c \
92         fx2lib/lib/gpif.c \
93         fx2lib/lib/i2c.c \
94         fx2lib/lib/int4av.a51 \
95         fx2lib/lib/serial.c \
96         fx2lib/lib/delay.c \
97         fx2lib/lib/setupdat.c \
98         fx2lib/lib/usbav.a51
99
100 fx2lib_objects = \
101         fx2lib/lib/delay.rel \
102         fx2lib/lib/eputils.rel \
103         fx2lib/lib/gpif.rel \
104         fx2lib/lib/i2c.rel \
105         fx2lib/lib/int4av.rel \
106         fx2lib/lib/serial.rel \
107         fx2lib/lib/delay.rel \
108         fx2lib/lib/setupdat.rel \
109         fx2lib/lib/usbav.rel
110
111 fx2lib_ints_sources = \
112         fx2lib/lib/interrupts/ep0ack_isr.c \
113         fx2lib/lib/interrupts/ep0in_isr.c \
114         fx2lib/lib/interrupts/ep0out_isr.c \
115         fx2lib/lib/interrupts/ep0ping_isr.c \
116         fx2lib/lib/interrupts/ep1in_isr.c \
117         fx2lib/lib/interrupts/ep1out_isr.c \
118         fx2lib/lib/interrupts/ep1ping_isr.c \
119         fx2lib/lib/interrupts/ep2ef_isr.c \
120         fx2lib/lib/interrupts/ep2ff_isr.c \
121         fx2lib/lib/interrupts/ep2isoerr_isr.c \
122         fx2lib/lib/interrupts/ep2_isr.c \
123         fx2lib/lib/interrupts/ep2pf_isr.c \
124         fx2lib/lib/interrupts/ep2ping_isr.c \
125         fx2lib/lib/interrupts/ep4ef_isr.c \
126         fx2lib/lib/interrupts/ep4ff_isr.c \
127         fx2lib/lib/interrupts/ep4isoerr_isr.c \
128         fx2lib/lib/interrupts/ep4_isr.c \
129         fx2lib/lib/interrupts/ep4pf_isr.c \
130         fx2lib/lib/interrupts/ep4ping_isr.c \
131         fx2lib/lib/interrupts/ep6ef_isr.c \
132         fx2lib/lib/interrupts/ep6ff_isr.c \
133         fx2lib/lib/interrupts/ep6isoerr_isr.c \
134         fx2lib/lib/interrupts/ep6_isr.c \
135         fx2lib/lib/interrupts/ep6pf_isr.c \
136         fx2lib/lib/interrupts/ep6ping_isr.c \
137         fx2lib/lib/interrupts/ep8ef_isr.c \
138         fx2lib/lib/interrupts/ep8ff_isr.c \
139         fx2lib/lib/interrupts/ep8isoerr_isr.c \
140         fx2lib/lib/interrupts/ep8_isr.c \
141         fx2lib/lib/interrupts/ep8pf_isr.c \
142         fx2lib/lib/interrupts/ep8ping_isr.c \
143         fx2lib/lib/interrupts/errlimit_isr.c \
144         fx2lib/lib/interrupts/gpifdone_isr.c \
145         fx2lib/lib/interrupts/gpifwf_isr.c \
146         fx2lib/lib/interrupts/hispeed_isr.c \
147         fx2lib/lib/interrupts/ibn_isr.c \
148         fx2lib/lib/interrupts/sof_isr.c \
149         fx2lib/lib/interrupts/spare_isr.c \
150         fx2lib/lib/interrupts/sudav_isr.c \
151         fx2lib/lib/interrupts/suspend_isr.c \
152         fx2lib/lib/interrupts/sutok_isr.c \
153         fx2lib/lib/interrupts/usbreset_isr.c
154
155 fx2lib_ints_objects = \
156         fx2lib/lib/interrupts/ep0ack_isr.rel \
157         fx2lib/lib/interrupts/ep0in_isr.rel \
158         fx2lib/lib/interrupts/ep0out_isr.rel \
159         fx2lib/lib/interrupts/ep0ping_isr.rel \
160         fx2lib/lib/interrupts/ep1in_isr.rel \
161         fx2lib/lib/interrupts/ep1out_isr.rel \
162         fx2lib/lib/interrupts/ep1ping_isr.rel \
163         fx2lib/lib/interrupts/ep2ef_isr.rel \
164         fx2lib/lib/interrupts/ep2ff_isr.rel \
165         fx2lib/lib/interrupts/ep2isoerr_isr.rel \
166         fx2lib/lib/interrupts/ep2_isr.rel \
167         fx2lib/lib/interrupts/ep2pf_isr.rel \
168         fx2lib/lib/interrupts/ep2ping_isr.rel \
169         fx2lib/lib/interrupts/ep4ef_isr.rel \
170         fx2lib/lib/interrupts/ep4ff_isr.rel \
171         fx2lib/lib/interrupts/ep4isoerr_isr.rel \
172         fx2lib/lib/interrupts/ep4_isr.rel \
173         fx2lib/lib/interrupts/ep4pf_isr.rel \
174         fx2lib/lib/interrupts/ep4ping_isr.rel \
175         fx2lib/lib/interrupts/ep6ef_isr.rel \
176         fx2lib/lib/interrupts/ep6ff_isr.rel \
177         fx2lib/lib/interrupts/ep6isoerr_isr.rel \
178         fx2lib/lib/interrupts/ep6_isr.rel \
179         fx2lib/lib/interrupts/ep6pf_isr.rel \
180         fx2lib/lib/interrupts/ep6ping_isr.rel \
181         fx2lib/lib/interrupts/ep8ef_isr.rel \
182         fx2lib/lib/interrupts/ep8ff_isr.rel \
183         fx2lib/lib/interrupts/ep8isoerr_isr.rel \
184         fx2lib/lib/interrupts/ep8_isr.rel \
185         fx2lib/lib/interrupts/ep8pf_isr.rel \
186         fx2lib/lib/interrupts/ep8ping_isr.rel \
187         fx2lib/lib/interrupts/errlimit_isr.rel \
188         fx2lib/lib/interrupts/gpifdone_isr.rel \
189         fx2lib/lib/interrupts/gpifwf_isr.rel \
190         fx2lib/lib/interrupts/hispeed_isr.rel \
191         fx2lib/lib/interrupts/ibn_isr.rel \
192         fx2lib/lib/interrupts/sof_isr.rel \
193         fx2lib/lib/interrupts/spare_isr.rel \
194         fx2lib/lib/interrupts/sudav_isr.rel \
195         fx2lib/lib/interrupts/suspend_isr.rel \
196         fx2lib/lib/interrupts/sutok_isr.rel \
197         fx2lib/lib/interrupts/usbreset_isr.rel
198
199 fx2lib_libs = \
200         fx2lib/lib/fx2.lib \
201         fx2lib/lib/interrupts/ints.lib
202
203 hw_sources = \
204         hw/braintechnology-usb-lps/dscr.a51 \
205         hw/cwav-usbeeax/dscr.a51 \
206         hw/cwav-usbeedx/dscr.a51 \
207         hw/cwav-usbeesx/dscr.a51 \
208         hw/cypress-fx2/dscr.a51 \
209         hw/saleae-logic/dscr.a51 \
210         hw/sigrok-fx2-8ch/dscr.a51 \
211         hw/sigrok-fx2-16ch/dscr.a51
212
213 firmwaredir = $(datadir)/sigrok-firmware
214 firmware_DATA = $(firmware_binaries)
215
216 dist_noinst_DATA = $(fx2lafw_headers) $(fx2lafw_sources) $(fx2lib_headers) $(fx2lib_sources) $(fx2lib_ints_sources) $(hw_sources)
217
218 MOSTLYCLEANFILES = *.asm fx2lib/lib/*.asm fx2lib/lib/*.lib fx2lib/lib/interrupts/*.asm fx2lib/lib/interrupts/*.lib
219 CLEANFILES = $(firmware_binaries)
220 DISTCLEANFILES = $(dirstamps)
221
222 .PHONY: dist-bin dist-changelog
223
224 all-local: $(firmware_binaries)
225
226 mostlyclean-local:
227         -$(AM_V_at)find . -type f '(' -name '*.ihx' -o -name '*.lk' \
228                 -o -name '*.lst' -o -name '*.map' -o -name '*.mem' \
229                 -o -name '*.rel' -o -name '*.rst' -o -name '*.sym' ')' \
230                 -exec rm -f '{}' '+'
231
232 dist-hook: dist-changelog
233
234 dist-changelog:
235         $(AM_V_at)if test ! -d '$(top_srcdir)/.git'; then \
236                 cp -f '$(top_srcdir)/ChangeLog' "$(top_distdir)/ChangeLog"; \
237         elif git -C '$(top_srcdir)' log >.ChangeLog.tmp; then \
238                 mv -f .ChangeLog.tmp "$(top_distdir)/ChangeLog"; \
239         else \
240                 rm -f .ChangeLog.tmp; exit 1; \
241         fi
242
243 # Creates a convenience tarball with just the generated *.fw files, so that
244 # the users don't have to build them manually.
245 dist-bin: $(firmware_binaries)
246         $(AM_V_at)$(MKDIR_P) $(distdir_bin)
247         $(AM_V_at)$(INSTALL_DATA) $(firmware_binaries) $(distdir_bin)
248         $(AM_V_at)$(INSTALL_DATA) $(srcdir)/COPYING $(srcdir)/COPYING.LESSER $(srcdir)/NEWS $(srcdir)/README $(distdir_bin)
249         $(AM_V_at)git -C '$(top_srcdir)' log > $(distdir_bin)/ChangeLog
250         $(AM_V_at)tar -czf $(distdir_bin).tar.gz $(distdir_bin)
251         -$(AM_V_at)rm -fr $(distdir_bin)
252
253 # List dependencies
254 $(fx2lafw_objects): $(fx2lafw_headers)
255 $(fx2lib_objects): fx2lib/lib/$(dirstamp) $(fx2lib_headers)
256 $(fx2lib_ints_objects): fx2lib/lib/interrupts/$(dirstamp) $(fx2lib_headers)
257
258 hw/braintechnology-usb-lps/dscr.rel: hw/braintechnology-usb-lps/$(dirstamp) include/dscr.inc
259 hw/cwav-usbeeax/dscr.rel: hw/cwav-usbeeax/$(dirstamp) include/dscr.inc
260 hw/cwav-usbeedx/dscr.rel: hw/cwav-usbeedx/$(dirstamp) include/dscr.inc
261 hw/cwav-usbeesx/dscr.rel: hw/cwav-usbeesx/$(dirstamp) include/dscr.inc
262 hw/cypress-fx2/dscr.rel: hw/cypress-fx2/$(dirstamp) include/dscr.inc
263 hw/saleae-logic/dscr.rel: hw/saleae-logic/$(dirstamp) include/dscr.inc
264 hw/sigrok-fx2-8ch/dscr.rel: hw/sigrok-fx2-8ch/$(dirstamp) include/dscr.inc
265 hw/sigrok-fx2-16ch/dscr.rel: hw/sigrok-fx2-16ch/$(dirstamp) include/dscr.inc
266
267 # Create build subdirectories
268 $(dirstamps):
269         @stamp='$@'; $(MKDIR_P) "$${stamp%/*}"
270         @: > $@
271
272 fx2lib/lib/fx2.lib: $(fx2lib_objects)
273         -$(AM_V_at)rm -f $@
274         $(AM_V_GEN)$(SDCCLIB) $@ $(fx2lib_objects)
275
276 fx2lib/lib/interrupts/ints.lib: $(fx2lib_ints_objects)
277         -$(AM_V_at)rm -f $@
278         $(AM_V_GEN)$(SDCCLIB) $@ $(fx2lib_ints_objects)
279
280 hw/braintechnology-usb-lps/fx2lafw-braintechnology-usb-lps.ihx: hw/braintechnology-usb-lps/dscr.rel $(fx2lafw_objects) $(fx2lib_libs)
281         $(AM_V_GEN)$(SDCC) -mmcs51 $(SDCC_LINK_FLAGS) -o $@ hw/braintechnology-usb-lps/dscr.rel $(fx2lafw_objects) $(fx2lib_libs)
282
283 hw/cwav-usbeeax/fx2lafw-cwav-usbeeax.ihx: hw/cwav-usbeeax/dscr.rel $(fx2lafw_objects) $(fx2lib_libs)
284         $(AM_V_GEN)$(SDCC) -mmcs51 $(SDCC_LINK_FLAGS) -o $@ hw/cwav-usbeeax/dscr.rel $(fx2lafw_objects) $(fx2lib_libs)
285
286 hw/cwav-usbeedx/fx2lafw-cwav-usbeedx.ihx: hw/cwav-usbeedx/dscr.rel $(fx2lafw_objects) $(fx2lib_libs)
287         $(AM_V_GEN)$(SDCC) -mmcs51 $(SDCC_LINK_FLAGS) -o $@ hw/cwav-usbeedx/dscr.rel $(fx2lafw_objects) $(fx2lib_libs)
288
289 hw/cwav-usbeesx/fx2lafw-cwav-usbeesx.ihx: hw/cwav-usbeesx/dscr.rel $(fx2lafw_objects) $(fx2lib_libs)
290         $(AM_V_GEN)$(SDCC) -mmcs51 $(SDCC_LINK_FLAGS) -o $@ hw/cwav-usbeesx/dscr.rel $(fx2lafw_objects) $(fx2lib_libs)
291
292 hw/cypress-fx2/fx2lafw-cypress-fx2.ihx: hw/cypress-fx2/dscr.rel $(fx2lafw_objects) $(fx2lib_libs)
293         $(AM_V_GEN)$(SDCC) -mmcs51 $(SDCC_LINK_FLAGS) -o $@ hw/cypress-fx2/dscr.rel $(fx2lafw_objects) $(fx2lib_libs)
294
295 hw/saleae-logic/fx2lafw-saleae-logic.ihx: hw/saleae-logic/dscr.rel $(fx2lafw_objects) $(fx2lib_libs)
296         $(AM_V_GEN)$(SDCC) -mmcs51 $(SDCC_LINK_FLAGS) -o $@ hw/saleae-logic/dscr.rel $(fx2lafw_objects) $(fx2lib_libs)
297
298 hw/sigrok-fx2-8ch/fx2lafw-sigrok-fx2-8ch.ihx: hw/sigrok-fx2-8ch/dscr.rel $(fx2lafw_objects) $(fx2lib_libs)
299         $(AM_V_GEN)$(SDCC) -mmcs51 $(SDCC_LINK_FLAGS) -o $@ hw/sigrok-fx2-8ch/dscr.rel $(fx2lafw_objects) $(fx2lib_libs)
300
301 hw/sigrok-fx2-16ch/fx2lafw-sigrok-fx2-16ch.ihx: hw/sigrok-fx2-16ch/dscr.rel $(fx2lafw_objects) $(fx2lib_libs)
302         $(AM_V_GEN)$(SDCC) -mmcs51 $(SDCC_LINK_FLAGS) -o $@ hw/sigrok-fx2-16ch/dscr.rel $(fx2lafw_objects) $(fx2lib_libs)
303
304 .a51.rel:
305         $(AM_V_GEN)$(SDAS8051) -glos $(as_includes) $@ $<
306
307 .c.rel:
308         $(AM_V_GEN)$(SDCC) -mmcs51 $(c_includes) -c $< -o $@
309
310 if FOUND_OBJCOPY
311 .ihx.fw:
312         $(AM_V_GEN)$(OBJCOPY) -Iihex $< -Obinary $@
313 else
314 if FOUND_MAKEBIN
315 .ihx.fw:
316         $(AM_V_GEN)$(MAKEBIN) -p < $< > $@
317 endif
318 endif
319