checkpoint
[slipway.git] / Makefile
1 ifeq ($(shell uname),Darwin)
2 linkerflags = -Wl,-framework -Wl,IOKit -Wl,-framework -Wl,CoreFoundation
3 jnilib      = libFtdiUartNative.jnilib
4 else
5 linkerflags =
6 jnilib      = libFtdiUartNative.so
7 endif
8
9 ## slipway ############################################################################
10
11 run: slipway.jar 
12         java -cp slipway.jar edu.berkeley.obits.AtmelSerial < bitstreams/led0.md4
13
14 build/src/com/ftdi/usb/FtdiUart.c: src/com/ftdi/usb/FtdiUart.i
15         mkdir -p `dirname $@`
16         mkdir -p src/com/ftdi/usb
17         swig -module FtdiUartNative -noproxy -package com.ftdi.usb -o $@ -outdir `dirname $@` -java $<
18
19 build/$(jnilib): build/src/com/ftdi/usb/FtdiUart.c upstream/libusb/.built
20         gcc -I. -Iupstream/libftdi -Iupstream/usb \
21                 -I$(JAVA_HOME)/include \
22                 $< \
23                 upstream/libftdi/ftdi.c \
24                 upstream/libusb/.libs/libusb.a \
25                 $(linkerflags) \
26                 -o $@ -dynamiclib -framework JavaVM
27
28 slipway.jar: build/$(jnilib) $(shell find src build/src -name \*.java) bitstreams/slipway_drone.bst
29         mkdir -p build
30         javac -d build $(shell find src build/src -name \*.java)
31         cp bitstreams/slipway_drone.bst build/edu/berkeley/slipway/
32         cd build; jar cvf ../$@ .
33
34
35
36 ## libusb ##############################################################################
37
38 upstream/libusb:
39         mkdir -p `dirname $@`
40         cd upstream; curl http://umn.dl.sourceforge.net/sourceforge/libusb/libusb-0.1.12.tar.gz | tar -xvzf -
41         cd upstream; mv libusb-0.1.12 libusb
42
43 upstream/libusb/.built: upstream/libusb
44         cd upstream/libusb; \
45                 ./configure &&
46                 make
47         touch $@
48
49 #java = java -Djava.library.path=$(shell pwd)/lib/ -cp lib/RXTXcomm.jar:slipway.jar
50
51
52
53 ## for rebuilding usbdrone.hex ###########################################################
54
55 build/slipway_drone.hex: src/edu/berkeley/slipway/slipway_drone.c  upstream/avr-libc/.built
56         upstream/prefix/bin/avr-gcc -O3 -mmcu=at94k $< -o $@.o
57         upstream/prefix/bin/avr-objcopy -O ihex $@.o $@
58
59 # this only works on my personal setup [adam]
60 bitstreams/slipway_drone.bst: build/slipway_drone.hex
61         cp $< /afs/research.cs.berkeley.edu/user/megacz/edu.berkeley.obits/usbdrone.hex
62         fs flush /afs/research.cs.berkeley.edu/user/megacz/edu.berkeley.obits/usbdrone.hex
63         echo okay...
64         read
65         rm /afs/research.cs.berkeley.edu/user/megacz/edu.berkeley.obits/usbdrone.hex
66         diff -u /afs/research.cs.berkeley.edu/user/megacz/stupid/fpslic_stupid.bst $@ && exit -1; true
67         mv /afs/research.cs.berkeley.edu/user/megacz/stupid/fpslic_stupid.bst $@
68
69
70
71 ## avr-gcc toolchain and libc ################################################################
72
73 upstream/binutils:
74         cd upstream; curl http://ftp.gnu.org/pub/pub/pub/gnu/binutils/binutils-2.16.1.tar.bz2 | tar -xvjf -
75         cd upstream; mv binutils-2.16.1 binutils
76
77 upstream/binutils/.built: upstream/binutils
78         mkdir -p upstream/prefix
79         cd upstream/binutils; \
80                 PATH=$$PATH:$(shell pwd)/upstream/prefix/bin \
81                 ./configure --prefix=$(shell pwd)/upstream/prefix --target=avr && \
82                 make && \
83                 make install
84         touch $@
85
86 upstream/gcc:
87         cd upstream; curl http://ftp.gnu.org/pub/gnu/gcc/gcc-4.0.3/gcc-core-4.0.3.tar.bz2 | tar -xvjf -
88         cd upstream; mv gcc-4.0.3 gcc
89
90 upstream/gcc/.built: upstream/gcc upstream/binutils/.built
91         mkdir -p upstream/prefix
92         mkdir -p upstream/gcc-build
93         cd upstream/gcc-build; \
94                 PATH=$$PATH:$(shell pwd)/upstream/prefix/bin \
95                 ../gcc/configure --prefix=$(shell pwd)/upstream/prefix --target=avr && \
96                 PATH=$$PATH:$(shell pwd)/upstream/prefix/bin make && \
97                 PATH=$$PATH:$(shell pwd)/upstream/prefix/bin make install
98         touch $@
99
100 upstream/avr-libc:
101         cd upstream; curl http://download.savannah.gnu.org/releases/avr-libc/avr-libc-1.4.3.tar.bz2 | tar -xvjf -
102         cd upstream; mv avr-libc-1.4.3 avr-libc
103
104 upstream/avr-libc/.built: upstream/avr-libc upstream/gcc/.built
105         cd upstream/avr-libc; \
106                 PATH=$$PATH:$(shell pwd)/upstream/prefix/bin \
107                 ./configure --prefix=$(shell pwd)/upstream/prefix --host=avr && \
108                 PATH=$$PATH:$(shell pwd)/upstream/prefix/bin make && \
109                 PATH=$$PATH:$(shell pwd)/upstream/prefix/bin make install
110         touch $@