checkpoint
[slipway.git] / Makefile
index fbe196b..270b0ec 100644 (file)
--- a/Makefile
+++ b/Makefile
+ifeq ($(shell uname),Darwin)
+linkerflags = -Wl,-framework -Wl,IOKit -Wl,-framework -Wl,CoreFoundation
+jnilib      = libFtdiUartNative.jnilib
+else
+linkerflags =
+jnilib      = libFtdiUartNative.so
+endif
 
-java = java -Djava.library.path=$(shell pwd)/lib/ -cp lib/RXTXcomm.jar:obits.jar
+## slipway ############################################################################
 
-led0: obits.jar 
-       $(java) edu.berkeley.obits.AtmelSerial < bitstreams/led0.md4
+run: slipway.jar 
+       java -cp slipway.jar edu.berkeley.obits.AtmelSerial < bitstreams/led0.md4
 
-led1: obits.jar
-       $(java) edu.berkeley.obits.AtmelSerial < bitstreams/led1.md4
+build/src/com/ftdi/usb/FtdiUart.c: src/com/ftdi/usb/FtdiUart.i
+       mkdir -p `dirname $@`
+       mkdir -p src/com/ftdi/usb
+       swig -module FtdiUartNative -noproxy -package com.ftdi.usb -o $@ -outdir `dirname $@` -java $<
 
-run: obits.jar
-       $(java) edu.berkeley.obits.AtmelSerial < stupid.md4
+build/$(jnilib): build/src/com/ftdi/usb/FtdiUart.c
+       gcc -I. -Iupstream/libftdi -Iupstream/usb \
+               -I$(JAVA_HOME)/include \
+               $< \
+               upstream/libftdi/ftdi.c \
+               upstream/libusb/.libs/libusb.a \
+               $(linkerflags) \
+               -o $@ -dynamiclib -framework JavaVM
 
-obits.jar: $(shell find src -name \*.java)
-       javac -cp lib/RXTXcomm.jar -d build $(shell find src -name \*.java)
+slipway.jar: build/$(jnilib) $(shell find src build/src -name \*.java) bitstreams/slipway_drone.bst
+       mkdir -p build
+       javac -d build $(shell find src build/src -name \*.java)
+       cp bitstreams/slipway_drone.bst build/edu/berkeley/slipway/
        cd build; jar cvf ../$@ .
 
-# -O3 is required; otherwise the poor AVR can't keep up with us!
-avrdrone.hex: src/edu/berkeley/obits/device/atmel/AvrDrone.c
-       avr-gcc -O3 -mmcu=at94k $<
-       avr-objcopy -O ihex a.out $@
 
-demo: ftdi.jar
-       java -cp ftdi.jar edu.berkeley.obits.device.atmel.Demo
 
-build/src/com/ftdi/usb/FtdiUart.c: src/com/ftdi/usb/FtdiUart.i
+## libusb ##############################################################################
+
+upstream/libusb:
        mkdir -p `dirname $@`
-       mkdir -p src/com/ftdi/usb
-       swig -noproxy -package com.ftdi.usb -outdir `dirname $@` -java $<
+       cd upstream; curl http://umn.dl.sourceforge.net/sourceforge/libusb/libusb-0.1.12.tar.gz | tar -xvzf -
+       cd upstream; mv libusb-0.1.12 libusb
 
-build/libFtdi.jnilib: build/src/com/ftdi/usb/FtdiUart.c
-       gcc -I. -I/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Headers/ \
-               $< -o $@ -lftdi -dynamiclib -framework JavaVM
+upstream/libusb/.built: upstream/libusb
+       cd upstream/libusb; \
+               ./configure &&
+               make
+       touch $@
+
+#java = java -Djava.library.path=$(shell pwd)/lib/ -cp lib/RXTXcomm.jar:slipway.jar
 
-javafiles := $(shell find src build/src -name \*.java)
 
-ftdi.jar: $(javafiles) build/libFtdi.jnilib
-       mkdir -p build
-       javac -d build $(javafiles)
-       cd build; jar cvf ../$@ .
 
-drone.hex: src/drone.c
-       avr-gcc -mmcu=at94k -O3 $<
-       avr-objcopy -O ihex a.out $@
+## for rebuilding usbdrone.hex ###########################################################
 
-rcompile:
-       cp src/edu/berkeley/obits/device/atmel/usbdrone.c /afs/megacz.com/goliath/work/tmp/
-       ssh research.cs.berkeley.edu 'cd /afs/megacz.com/goliath/work/tmp; avr-gcc -O3 -mmcu=at94k usbdrone.c; avr-objcopy -O ihex a.out usbdrone.hex'
-       cp /afs/megacz.com/goliath/work/tmp/usbdrone.hex /afs/research.cs.berkeley.edu/user/megacz/edu.berkeley.obits/usbdrone.hex
+build/slipway_drone.hex: src/edu/berkeley/slipway/slipway_drone.c  upstream/avr-libc/.built
+       upstream/prefix/bin/avr-gcc -O3 -mmcu=at94k $< -o $@.o
+       upstream/prefix/bin/avr-objcopy -O ihex $@.o $@
+
+# this only works on my personal setup [adam]
+bitstreams/slipway_drone.bst: build/slipway_drone.hex
+       cp $< /afs/research.cs.berkeley.edu/user/megacz/edu.berkeley.obits/usbdrone.hex
        fs flush /afs/research.cs.berkeley.edu/user/megacz/edu.berkeley.obits/usbdrone.hex
        echo okay...
        read
        rm /afs/research.cs.berkeley.edu/user/megacz/edu.berkeley.obits/usbdrone.hex
-       diff -u /afs/research.cs.berkeley.edu/user/megacz/stupid/fpslic_stupid.bst bitstreams/usbdrone.bst && exit -1; true
-       mv /afs/research.cs.berkeley.edu/user/megacz/stupid/fpslic_stupid.bst bitstreams/usbdrone.bst
-       make demo
\ No newline at end of file
+       diff -u /afs/research.cs.berkeley.edu/user/megacz/stupid/fpslic_stupid.bst $@ && exit -1; true
+       mv /afs/research.cs.berkeley.edu/user/megacz/stupid/fpslic_stupid.bst $@
+
+
+
+## avr-gcc toolchain and libc ################################################################
+
+upstream/binutils:
+       cd upstream; curl http://ftp.gnu.org/pub/pub/pub/gnu/binutils/binutils-2.16.1.tar.bz2 | tar -xvjf -
+       cd upstream; mv binutils-2.16.1 binutils
+
+upstream/binutils/.built: upstream/binutils
+       mkdir -p upstream/prefix
+       cd upstream/binutils; \
+               PATH=$$PATH:$(shell pwd)/upstream/prefix/bin \
+               ./configure --prefix=$(shell pwd)/upstream/prefix --target=avr && \
+               make && \
+               make install
+       touch $@
+
+upstream/gcc:
+       cd upstream; curl http://ftp.gnu.org/pub/gnu/gcc/gcc-4.0.3/gcc-core-4.0.3.tar.bz2 | tar -xvjf -
+       cd upstream; mv gcc-4.0.3 gcc
+
+upstream/gcc/.built: upstream/gcc upstream/binutils/.built
+       mkdir -p upstream/prefix
+       mkdir -p upstream/gcc-build
+       cd upstream/gcc-build; \
+               PATH=$$PATH:$(shell pwd)/upstream/prefix/bin \
+               ../gcc/configure --prefix=$(shell pwd)/upstream/prefix --target=avr && \
+               PATH=$$PATH:$(shell pwd)/upstream/prefix/bin make && \
+               PATH=$$PATH:$(shell pwd)/upstream/prefix/bin make install
+       touch $@
+
+upstream/avr-libc:
+       cd upstream; curl http://download.savannah.gnu.org/releases/avr-libc/avr-libc-1.4.3.tar.bz2 | tar -xvjf -
+       cd upstream; mv avr-libc-1.4.3 avr-libc
+
+upstream/avr-libc/.built: upstream/avr-libc upstream/gcc/.built
+       cd upstream/avr-libc; \
+               PATH=$$PATH:$(shell pwd)/upstream/prefix/bin \
+               ./configure --prefix=$(shell pwd)/upstream/prefix --host=avr && \
+               PATH=$$PATH:$(shell pwd)/upstream/prefix/bin make && \
+               PATH=$$PATH:$(shell pwd)/upstream/prefix/bin make install
+       touch $@
\ No newline at end of file