1+ # Variables:
2+ #
3+ # ROBORIO - the RoboRIO DNS name / IP address (expected to be set by user)
4+ # BUILD_USER - the RoboRIO login to use (defaults to admin)
5+ # BUILD_HOME - where build packages should be extracted (defaults to home)
6+ #
7+ # TGZ - the tar.gz source code file; defaults to last part of SOURCE
8+ # EXTRA_CLEAN - extra files to be cleaned in clean
9+ # BUILD_DEPS - a space-delimited list of opkg dependencies (for install-deps)
10+ # BUILD_DIR - the directory where the TGZ gets extracted to.
11+ # defaults to TGZ with .tgz and .tar.gz stripped
12+ # BUILD_DIR_EXTRA - the directory inside the TGZ that builds should happen in
13+ # BUILD_WARNING - warning to print before build
14+ # BUILD_CMD - the build command
15+ # INSTALL_CMD - the install command
16+ # GETDATA_TARARGS - the args to use for tar when getting data
17+ # GETDATA_DEV_TARARGS - if specified args to use for tar when getting development data
18+ # GETDATA_DBG_TARARGS - if specified args to use for tar when getting debug data
19+ # EXTRA_CONTROL - extra files to include in control.tar.gz
20+ #
21+ TGZ ?= $(lastword $(subst /, ,${SOURCE}) )
22+ BUILD_DIR ?= $(subst .tgz,,$(subst .tar.gz,,${TGZ}) )
23+ BUILD_USER ?= admin
24+ STACK_SIZE ?= 4096
25+
26+ # Used by ipkwhl
27+ GETDATA_EXTRA_TARARGS ?=
28+
29+
30+ ifndef ROBORIO
31+ $(error ROBORIO is not set, use 'make ROBORIO=roborio-XXXX-frc.local')
32+ endif
33+
34+ .PHONY : all init-ssh sync-date install-deps fetch extract build install strip-exes fetch-src getdata getdata-pkg getdata-dev getdata-dbg
35+
36+ ifdef GETDATA_DEV_TARARGS
37+ GETDATA_DEV_TARGET =getdata-dev
38+ endif
39+
40+ ifdef GETDATA_DBG_TARARGS
41+ GETDATA_DBG_TARGET =getdata-dbg
42+ endif
43+
44+ ALLTARGETS ?= clean \
45+ sync-date install-deps \
46+ fetch extract build install strip-exes \
47+ getdata ipk
48+ all : ${ALLTARGETS}
49+
50+ init-ssh :
51+ ssh ${BUILD_USER} @${ROBORIO} ' mkdir -p .ssh && cat >> ~/.ssh/authorized_keys' < ~ /.ssh/id_rsa.pub
52+
53+ sync-date :
54+ ifneq (${NOSETDATE}, 1)
55+ ssh ${BUILD_USER}@${ROBORIO} "date -s '`date -u +'%Y-%m-%d %H:%m:%S'`'"
56+ endif
57+
58+ install-deps :
59+ ifneq ($(strip ${DEPS}) ,)
60+ ssh ${BUILD_USER}@${ROBORIO} 'opkg update && opkg install ${DEPS} && (opkg clean || true)'
61+ endif
62+
63+ fetch : ${TGZ}
64+ ${TGZ} :
65+ wget ${SOURCE}
66+
67+ extract : ${TGZ}
68+ ssh ${BUILD_USER} @${ROBORIO} ' cd ${BUILD_HOME} && rm -rf ${BUILD_DIR}'
69+ cat ${TGZ} | ssh ${BUILD_USER} @${ROBORIO} ' cd ${BUILD_HOME} && mkdir ${BUILD_DIR} && cd ${BUILD_DIR} && tar xzf - --strip-components=1'
70+ ifdef PATCHES
71+ $(foreach patch, $(PATCHES), ssh ${BUILD_USER}@${ROBORIO} 'cd ${BUILD_HOME} && cd ${BUILD_DIR} && patch -p1' < $(patch))
72+ endif
73+
74+ build :
75+ ifdef BUILD_WARNING
76+ @echo "--------------------------------------------------------------"
77+ @echo "${BUILD_WARNING}"
78+ @echo "--------------------------------------------------------------"
79+ @echo "Press ENTER to continue"
80+ @bash -c read
81+ endif
82+ ssh ${BUILD_USER}@${ROBORIO} 'ulimit -s ${STACK_SIZE} && cd ${BUILD_HOME} && cd ${BUILD_DIR}/${BUILD_DIR_EXTRA} && ${BUILD_CMD}'
83+
84+ install :
85+ ssh ${BUILD_USER} @${ROBORIO} ' ulimit -s ${STACK_SIZE} && cd ${BUILD_HOME} && cd ${BUILD_DIR}/${BUILD_DIR_EXTRA} && ${INSTALL_CMD}'
86+
87+ strip-exes :
88+ ifneq ($(strip ${EXES}) ,)
89+ ssh ${BUILD_USER}@${ROBORIO} 'for exes in ${EXES}; do for exe in /$$exes; do \
90+ fdir=$$(dirname $$exe) && fbase=$$(basename "$$exe") && \
91+ fdebug="$${fbase%.*}.debug" && \
92+ mkdir -p "$$fdir"/.debug && \
93+ chmod u+w $$exe && \
94+ objcopy --only-keep-debug $$exe "$$fdir/.debug/$$fdebug" && \
95+ chmod 755 "$$fdir/.debug/$$fdebug" && \
96+ objcopy --strip-debug "$$exe" && \
97+ objcopy --add-gnu-debuglink="$$fdir/.debug/$$fdebug" "$$exe"; \
98+ done; done'
99+ endif
100+
101+ getdata : getdata-pkg ${GETDATA_DEV_TARGET} ${GETDATA_DBG_TARGET}
102+
103+ getdata-pkg :
104+ mkdir -p data
105+ rm -rf data.new
106+ mkdir data.new
107+ set -o pipefail; cd data.new && ssh ${BUILD_USER} @${ROBORIO} ' cd / && tar ${GETDATA_EXTRA_TARARGS} -cf - ${GETDATA_TARARGS}' | tar xf -
108+ rm -rf data.old && mv data data.old && mv data.new data
109+ [ ! -d extra ] || cp -r extra/* data/
110+
111+ ifdef GETDATA_DEV_TARARGS
112+ getdata-dev :
113+ mkdir -p devdata
114+ rm -rf devdata.new
115+ mkdir devdata.new
116+ set -o pipefail; cd devdata.new && ssh ${BUILD_USER} @${ROBORIO} ' cd / && tar ${GETDATA_EXTRA_TARARGS} -cf - ${GETDATA_DEV_TARARGS}' | tar xf -
117+ rm -rf devdata.old && mv devdata devdata.old && mv devdata.new devdata
118+ [ ! -d extradev ] || cp -r extradev/* devdata/
119+ endif
120+
121+ ifdef GETDATA_DBG_TARARGS
122+ getdata-dbg :
123+ mkdir -p dbgdata
124+ rm -rf dbgdata.new
125+ mkdir dbgdata.new
126+ set -o pipefail; cd dbgdata.new && ssh ${BUILD_USER} @${ROBORIO} ' cd / && tar ${GETDATA_EXTRA_TARARGS} -cf - ${GETDATA_DBG_TARARGS}' | tar xf -
127+ rm -rf dbgdata.old && mv dbgdata dbgdata.old && mv dbgdata.new dbgdata
128+ [ ! -d extradev ] || cp -r extradev/* dbgdata/
129+ endif
0 commit comments