aboutsummaryrefslogtreecommitdiffstats
path: root/lib/bossac/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'lib/bossac/Makefile')
-rw-r--r--lib/bossac/Makefile347
1 files changed, 347 insertions, 0 deletions
diff --git a/lib/bossac/Makefile b/lib/bossac/Makefile
new file mode 100644
index 00000000..35fe857a
--- /dev/null
+++ b/lib/bossac/Makefile
@@ -0,0 +1,347 @@
+.DEFAULT_GOAL := all
+
+#
+# Version
+#
+VERSION=1.9
+WXVERSION=3.0
+
+#
+# Source files
+#
+COMMON_SRCS=Samba.cpp Flash.cpp D5xNvmFlash.cpp D2xNvmFlash.cpp EfcFlash.cpp EefcFlash.cpp Applet.cpp WordCopyApplet.cpp Flasher.cpp Device.cpp
+APPLET_SRCS=WordCopyArm.asm
+BOSSA_SRCS=BossaForm.cpp BossaWindow.cpp BossaAbout.cpp BossaApp.cpp BossaBitmaps.cpp BossaInfo.cpp BossaThread.cpp BossaProgress.cpp
+BOSSA_BMPS=BossaLogo.bmp BossaIcon.bmp ShumaTechLogo.bmp
+BOSSAC_SRCS=bossac.cpp CmdOpts.cpp
+BOSSASH_SRCS=bossash.cpp Shell.cpp Command.cpp
+
+#
+# Build directories
+#
+BINDIR=bin
+OBJDIR=obj
+SRCDIR=src
+RESDIR=res
+INSTALLDIR=install
+
+#
+# Determine OS
+#
+OS:=$(shell uname -s | cut -c -7)
+
+#
+# Windows rules
+#
+ifeq ($(OS),MINGW32)
+# Use wxWindows development branch to work around font scaling issues on Windows
+WXVERSION=3.1
+EXE=.exe
+COMMON_SRCS+=WinSerialPort.cpp WinPortFactory.cpp
+COMMON_LDFLAGS=-Wl,--enable-auto-import -static -static-libstdc++ -static-libgcc
+COMMON_LIBS=-ltermcap -Wl,--as-needed -lsetupapi
+BOSSA_RC=BossaRes.rc
+WIXDIR="C:\Program Files (x86)\WiX Toolset v3.10\bin"
+CODE_SIGN=$(INSTALLDIR)\\code_sign.p12
+TIMESTAMP=http://timestamp.comodoca.com/authenticode
+SIGNTOOL="C:\Program Files (x86)\Windows Kits\10\bin\x64\signtool.exe"
+INF2CAT="C:\Program Files (x86)\Windows Kits\10\bin\x86\Inf2Cat.exe"
+
+define bossa_msi
+$(OBJDIR)\\bossa-$(1)-$(VERSION).wixobj: $(INSTALLDIR)\\bossa.wxs
+ $(WIXDIR)\\candle.exe -dVersion=$(VERSION) -arch $(1) -out $$@ -ext $(WIXDIR)\\WixUIExtension.dll -ext $(WIXDIR)\\WixDifxAppExtension.dll $$<
+
+$(BINDIR)\\bossa-$(1)-$(VERSION).msi: $(OBJDIR)\\bossa-$(1)-$(VERSION).wixobj
+ $(WIXDIR)\\light.exe -cultures:null -out $$@ -pdbout $(OBJDIR)\\bossa.wixpdb -sice:ICE57 -ext $(WIXDIR)\\WixUIExtension.dll -ext $(WIXDIR)\\WixDifxAppExtension.dll $(WIXDIR)\\difxapp_$(1).wixlib $$<
+ $$(Q)read -p "Password:" -rs PASSWORD; \
+ cmd /C '$(SIGNTOOL) sign /v /fd sha256 /f $(CODE_SIGN) -t $(TIMESTAMP) /p '$$$$PASSWORD' $$@'
+endef
+
+$(eval $(call bossa_msi,x86))
+$(eval $(call bossa_msi,x64))
+
+$(INSTALLDIR)\\bossa.cat: $(INSTALLDIR)\\bossa.inf
+ export TMP=$$(mktemp -d); \
+ cp $< $$TMP; \
+ cmd /C '$(INF2CAT) /v /driver:'$$(cygpath -w $$TMP)' /os:XP_X86,Vista_X86,Vista_X64,7_X86,7_X64,8_X86,8_X64,6_3_X86,6_3_X64,10_x86,10_x64'; \
+ mv $$TMP/bossa.cat $@; \
+ rm -rf $$TMP; \
+ read -p "Password:" -rs PASSWORD; \
+ cmd /C '$(SIGNTOOL) sign /v /fd sha256 /f $(CODE_SIGN) -t $(TIMESTAMP) /p '$$PASSWORD' $@'
+
+bossa.cat: $(INSTALLDIR)\\bossa.cat
+
+install32: $(BINDIR)\\bossa-x86-$(VERSION).msi
+install64: $(BINDIR)\\bossa-x64-$(VERSION).msi
+.PHONY: install
+install: strip install32 install64
+
+endif
+
+#
+# Linux rules
+#
+ifeq ($(OS),Linux)
+COMMON_SRCS+=PosixSerialPort.cpp LinuxPortFactory.cpp
+COMMON_LIBS=-Wl,--as-needed
+COMMON_CXXFLAGS=-std=c++11
+WX_LIBS+=-lX11
+
+MACHINE:=$(shell uname -m)
+
+install: strip
+ tar cvzf $(BINDIR)/bossa-$(MACHINE)-$(VERSION).tgz -C $(BINDIR) bossa$(EXE) bossac$(EXE) bossash$(EXE)
+endif
+
+#
+# OS X rules
+#
+ifeq ($(OS),Darwin)
+COMMON_SRCS+=PosixSerialPort.cpp OSXPortFactory.cpp
+COMMON_CXXFLAGS=-arch x86_64 -mmacosx-version-min=10.9
+COMMON_LDFLAGS=-arch x86_64 -mmacosx-version-min=10.9
+APP=BOSSA.app
+DMG=bossa-$(VERSION).dmg
+VOLUME=BOSSA
+BACKGROUND=$(INSTALLDIR)/background.png
+.PHONY: install
+app:
+ mkdir -p $(BINDIR)/$(APP)/Contents/MacOS
+ mkdir -p $(BINDIR)/$(APP)/Contents/Resources
+ cp -f $(INSTALLDIR)/Info.plist $(BINDIR)/$(APP)/Contents
+ echo -n "APPL????" > $(BINDIR)/$(APP)/Contents/PkgInfo
+ ln -f $(BINDIR)/bossa $(BINDIR)/$(APP)/Contents/MacOS/bossa
+ cp -f $(RESDIR)/BossaIcon.icns $(BINDIR)/$(APP)/Contents/Resources
+install: strip app
+ hdiutil create -ov -megabytes 5 -fs HFS+ -volname $(VOLUME) $(BINDIR)/$(DMG)
+ hdiutil attach -noautoopen $(BINDIR)/$(DMG)
+ cp -R $(BINDIR)/$(APP) /Volumes/$(VOLUME)/
+ cp $(BINDIR)/bossac$(EXE) /Volumes/$(VOLUME)/
+ cp $(BINDIR)/bossash$(EXE) /Volumes/$(VOLUME)/
+ ln -s /Applications /Volumes/$(VOLUME)/Applications
+ ln -s /usr/local/bin /Volumes/$(VOLUME)/bin
+ mkdir /Volumes/$(VOLUME)/.background
+ cp $(BACKGROUND) /Volumes/$(VOLUME)/.background
+ osascript < $(INSTALLDIR)/dmgwin.osa
+ hdiutil detach /Volumes/$(VOLUME)/
+ hdiutil convert -format UDBZ -o $(BINDIR)/tmp$(DMG) $(BINDIR)/$(DMG)
+ mv -f $(BINDIR)/tmp$(DMG) $(BINDIR)/$(DMG)
+endif
+
+#
+# OpenBSD rules
+# (This is likely to work without changes, but not tested, on other BSDs)
+#
+ifeq ($(OS),OpenBSD)
+
+COMMON_SRCS+=PosixSerialPort.cpp BSDPortFactory.cpp
+
+# This is only needed for bossash, but we can't add it to BOSSASH_LIBS here
+# because that one is redefined later.
+COMMON_LIBS+=-ltermcap
+
+# As of 5.7, OpenBSD packages WxWidgets 2.8
+# bossa builds, runs, and appears to play nicely with this version,
+# but fails to do anything useful on systems that don't have hardware
+# serial ports because of USB detection problems.
+# (The SAM's USB programming port doesn't get recognized as a ucom
+# device, and a USB serial adaptor attached to the UART gets detected
+# by bossa as a USB interface and doesn't fall back to the serial
+# programming protocol.)
+WXVERSION=2.8
+
+endif
+
+ifeq (${OS},FreeBSD)
+
+# This is only needed for bossash, but we can't add it to BOSSASH_LIBS here
+# because that one is redefined later.
+COMMON_SRCS+=PosixSerialPort.cpp BSDPortFactory.cpp
+
+endif
+
+#
+# Object files
+#
+COMMON_OBJS=$(foreach src,$(COMMON_SRCS),$(OBJDIR)/$(src:%.cpp=%.o))
+APPLET_OBJS=$(foreach src,$(APPLET_SRCS),$(OBJDIR)/$(src:%.asm=%.o))
+BOSSA_OBJS=$(APPLET_OBJS) $(COMMON_OBJS) $(foreach src,$(BOSSA_SRCS),$(OBJDIR)/$(src:%.cpp=%.o))
+ifdef BOSSA_RC
+BOSSA_OBJS+=$(OBJDIR)/$(BOSSA_RC:%.rc=%.o)
+endif
+BOSSAC_OBJS=$(APPLET_OBJS) $(COMMON_OBJS) $(foreach src,$(BOSSAC_SRCS),$(OBJDIR)/$(src:%.cpp=%.o))
+BOSSASH_OBJS=$(APPLET_OBJS) $(COMMON_OBJS) $(foreach src,$(BOSSASH_SRCS),$(OBJDIR)/$(src:%.cpp=%.o))
+
+#
+# Dependencies
+#
+DEPENDS=$(COMMON_SRCS:%.cpp=$(OBJDIR)/%.d)
+DEPENDS+=$(APPLET_SRCS:%.asm=$(OBJDIR)/%.d)
+DEPENDS+=$(BOSSA_SRCS:%.cpp=$(OBJDIR)/%.d)
+DEPENDS+=$(BOSSAC_SRCS:%.cpp=$(OBJDIR)/%.d)
+DEPENDS+=$(BOSSASH_SRCS:%.cpp=$(OBJDIR)/%.d)
+
+#
+# Tools
+#
+Q?=@
+CXX?=g++
+ARM=arm-none-eabi-
+ARMAS=$(ARM)as
+ARMOBJCOPY=$(ARM)objcopy
+
+#
+# CXX Flags
+#
+# COMMON_CXXFLAGS+=-Wall -Werror -MT $@ -MD -MP -MF $(@:%.o=%.d) -DVERSION=\"$(VERSION)\" -g -O2
+COMMON_CXXFLAGS+=-Wall -MT $@ -MD -MP -MF $(@:%.o=%.d) -DVERSION=\"$(VERSION)\" -g -O2 $(CXXFLAGS)
+WX_CXXFLAGS:=$(shell wx-config --cxxflags --version=$(WXVERSION)) -DWX_PRECOMP -Wno-ctor-dtor-privacy -O2 -fno-strict-aliasing
+BOSSA_CXXFLAGS=$(COMMON_CXXFLAGS) $(WX_CXXFLAGS)
+BOSSAC_CXXFLAGS=$(COMMON_CXXFLAGS)
+BOSSASH_CXXFLAGS=$(COMMON_CXXFLAGS)
+
+#
+# LD Flags
+#
+COMMON_LDFLAGS+=-g $(LDFLAGS)
+BOSSA_LDFLAGS=$(COMMON_LDFLAGS)
+BOSSAC_LDFLAGS=$(COMMON_LDFLAGS)
+BOSSASH_LDFLAGS=$(COMMON_LDFLAGS)
+
+#
+# Libs
+#
+COMMON_LIBS+=
+WX_LIBS:=$(shell wx-config --libs --version=$(WXVERSION)) $(WX_LIBS)
+BOSSA_LIBS=$(COMMON_LIBS) $(WX_LIBS)
+BOSSAC_LIBS=$(COMMON_LIBS)
+BOSSASH_LIBS=-lreadline $(COMMON_LIBS)
+
+#
+# Main targets
+#
+all: $(BINDIR)/bossa$(EXE) $(BINDIR)/bossac$(EXE) $(BINDIR)/bossash$(EXE)
+
+#
+# Common rules
+#
+define common_obj
+$(OBJDIR)/$(1:%.cpp=%.o): $(SRCDIR)/$(1)
+ @echo CPP COMMON $$<
+ $$(Q)$$(CXX) $$(COMMON_CXXFLAGS) -c -o $$@ $$<
+endef
+$(foreach src,$(COMMON_SRCS),$(eval $(call common_obj,$(src))))
+
+#
+# Applet rules
+#
+define applet_obj
+$(SRCDIR)/$(1:%.asm=%.cpp): $(SRCDIR)/$(1)
+ @echo APPLET $(1:%.asm=%)
+ $$(Q)$$(ARMAS) -o $$(@:$(SRCDIR)/%.cpp=$(OBJDIR)/%.obj) $$<
+ $$(Q)$$(ARMOBJCOPY) -O binary $$(@:$(SRCDIR)/%.cpp=$(OBJDIR)/%.obj) $$(@:$(SRCDIR)/%.cpp=$(OBJDIR)/%.bin)
+ $$(Q)./appletgen $(1:%.asm=%) $(SRCDIR) $(OBJDIR)
+$(OBJDIR)/$(1:%.asm=%.o): $(SRCDIR)/$(1:%.asm=%.cpp)
+ @echo CPP APPLET $$<
+ $$(Q)$$(CXX) $$(COMMON_CXXFLAGS) -c -o $$(@) $$(<:%.asm=%.cpp)
+endef
+$(foreach src,$(APPLET_SRCS),$(eval $(call applet_obj,$(src))))
+
+#
+# BOSSA rules
+#
+define bossa_obj
+$(OBJDIR)/$(1:%.cpp=%.o): $(SRCDIR)/$(1)
+ @echo CPP BOSSA $$<
+ $$(Q)$$(CXX) $$(BOSSA_CXXFLAGS) -c -o $$@ $$<
+endef
+$(foreach src,$(BOSSA_SRCS),$(eval $(call bossa_obj,$(src))))
+
+#
+# Resource rules
+#
+ifeq ($(OS),MINGW32)
+$(OBJDIR)/$(BOSSA_RC:%.rc=%.o): $(RESDIR)/$(BOSSA_RC)
+ @echo RC $<
+ $(Q)`wx-config --rescomp --version=$(WXVERSION)` -o $@ $<
+endif
+
+#
+# BOSSAC rules
+#
+define bossac_obj
+$(OBJDIR)/$(1:%.cpp=%.o): $(SRCDIR)/$(1)
+ @echo CPP BOSSAC $$<
+ $$(Q)$$(CXX) $$(BOSSAC_CXXFLAGS) -c -o $$@ $$<
+endef
+$(foreach src,$(BOSSAC_SRCS),$(eval $(call bossac_obj,$(src))))
+
+#
+# BOSSASH rules
+#
+define bossash_obj
+$(OBJDIR)/$(1:%.cpp=%.o): $(SRCDIR)/$(1)
+ @echo CPP BOSSASH $$<
+ $$(Q)$$(CXX) $$(BOSSASH_CXXFLAGS) -c -o $$@ $$<
+endef
+$(foreach src,$(BOSSASH_SRCS),$(eval $(call bossash_obj,$(src))))
+
+#
+# BMP rules
+#
+define bossa_bmp
+$(SRCDIR)/$(1:%.bmp=%.cpp): $(RESDIR)/$(1)
+ @echo BIN2C $$<
+ $(Q)bin2c $$< $$@
+endef
+$(foreach bmp,$(BOSSA_BMPS),$(eval $(call bossa_bmp,$(bmp))))
+
+#
+# Directory rules
+#
+$(OBJDIR):
+ @mkdir $@
+
+$(BINDIR):
+ @mkdir $@
+
+#
+# Target rules
+#
+$(BOSSA_OBJS): | $(OBJDIR)
+$(BINDIR)/bossa$(EXE): $(foreach bmp,$(BOSSA_BMPS),$(SRCDIR)/$(bmp:%.bmp=%.cpp)) $(BOSSA_OBJS) | $(BINDIR)
+ @echo LD $@
+ $(Q)$(CXX) $(BOSSA_LDFLAGS) -o $@ $(BOSSA_OBJS) $(BOSSA_LIBS)
+
+$(BOSSAC_OBJS): | $(OBJDIR)
+$(BINDIR)/bossac$(EXE): $(BOSSAC_OBJS) | $(BINDIR)
+ @echo LD $@
+ $(Q)$(CXX) $(BOSSAC_LDFLAGS) -o $@ $(BOSSAC_OBJS) $(BOSSAC_LIBS)
+
+$(BOSSASH_OBJS): | $(OBJDIR)
+$(BINDIR)/bossash$(EXE): $(BOSSASH_OBJS) | $(BINDIR)
+ @echo LD $@
+ $(Q)$(CXX) $(BOSSASH_LDFLAGS) -o $@ $(BOSSASH_OBJS) $(BOSSASH_LIBS)
+
+strip-bossa: $(BINDIR)/bossa$(EXE)
+ @echo STRIP $^
+ $(Q)strip $^
+
+strip-bossac: $(BINDIR)/bossac$(EXE)
+ @echo STRIP $^
+ $(Q)strip $^
+
+strip-bossash: $(BINDIR)/bossash$(EXE)
+ @echo STRIP $^
+ $(Q)strip $^
+
+strip: strip-bossa strip-bossac strip-bossash
+
+clean:
+ @echo CLEAN
+ $(Q)rm -rf $(BINDIR) $(OBJDIR)
+
+#
+# Include dependencies
+#
+-include $(DEPENDS)