-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
198 lines (162 loc) · 7.76 KB
/
Makefile
File metadata and controls
198 lines (162 loc) · 7.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
# Version Information
MAJOR = 2
MINOR = 3
PATCH = 0
LABEL =
# Paths
SRC_DIR = src/
BUILD_DIR = build/
TOOLS_DIR = tools/
CONTROLLERS_DIR = src/controller/
SCRIPTS_DIR = src/scripts/
WEBAPP_DIR = src/webapp/
CPP_FLAGS = -Wno-undef -Wall -Werror
BUILD_RPI_DIR = ${BUILD_DIR}raspberrypi/
BUILD_RPI_SRC_DIR = ${BUILD_RPI_DIR}src/
BUILD_ESP8266_DIR = ${BUILD_DIR}esp8266/controller/
HTML_DIR = ${WEBAPP_DIR}templates/
CSS_DIR = ${WEBAPP_DIR}static/css/
JS_FILES = ${WEBAPP_DIR}static/*.js ${WEBAPP_DIR}static/main/*.js
PY_FILES = ${WEBAPP_DIR}*.py ${WEBAPP_DIR}tests/*.py ${WEBAPP_DIR}modules/*.py tools/*
# Lint commands
CLANG_FORMAT = node_modules/clang-format/bin/linux_x64/clang-format --style=Google
ESLINT = node_modules/eslint/bin/eslint.js
HTML_VALIDATE = node_modules/html-validate/bin/html-validate.js
PRETTIER = node_modules/prettier/bin-prettier.js
UGLIFYJS = node_modules/uglify-js/bin/uglifyjs
PRETTIER_CONIG = --config lint_config/.prettierrc.json
HTML_VALIDATE_CONFG = --config lint_config/.htmlvalidate.json
ESLINT_CONFIG = --config lint_config/.eslintrc.json
PYLINT_CONFIG = --rcfile=lint_config/pylintrc
WEBAPP_CONFIG_ARG = "config/controllers_sample.yaml"
ESP_HASH = $(shell sha1sum ${CONTROLLERS_DIR}controller.ino ${CONTROLLERS_DIR}pixels* ${CONTROLLERS_DIR}structs* | sha1sum | head -c 40)
RPI_HASH = $(shell sha1sum ${CONTROLLERS_DIR}*.py ${CONTROLLERS_DIR}pixels* ${CONTROLLERS_DIR}structs* | sha1sum | head -c 40)
WASM_ARGS = -Os -s ASSERTIONS=1 -s LLD_REPORT_UNDEFINED --no-entry
WASM_LIST = '_maxLEDPerStrip', '_ledStripCount', '_List_new', '_List_setCounter', '_List_getCounter', '_List_set', '_List_get', '_List_size'
WASM_PIXELS = '_Pixels_new', '_Pixels_size', '_Pixels_getBrightness', '_Pixels_setBrightness', '_Pixels_get', '_Pixels_increment', '_Pixels_animation', '_createAnimationArgs', '_Pixels_getCurrentState'
WASM_EXPORTED = -s "EXPORTED_FUNCTIONS=[${WASM_LIST}, ${WASM_PIXELS}]" -s "EXTRA_EXPORTED_RUNTIME_METHODS=['getValue']"
all:
# Create Directories
mkdir -p ${BUILD_ESP8266_DIR}
mkdir -p ${BUILD_DIR}raspberrypi/src
mkdir -p ${BUILD_DIR}webapp
# Create Version
touch ${BUILD_ESP8266_DIR}version.h
printf "// This file is generated by 'make build' and should not be edited\n\n" > ${BUILD_ESP8266_DIR}version.h
printf "#define MAJOR ${MAJOR}\n#define MINOR ${MINOR}\n#define PATCH ${PATCH}\n#define LABEL \"${LABEL}\"\n\n" >> ${BUILD_ESP8266_DIR}version.h
printf "#define ESP_HASH \"${ESP_HASH}\"\n#define RPI_HASH \"${RPI_HASH}\"\n" >> ${BUILD_ESP8266_DIR}version.h
cp ${BUILD_ESP8266_DIR}version.h ${BUILD_DIR}raspberrypi/src/version.h
cp ${BUILD_ESP8266_DIR}version.h ${CONTROLLERS_DIR}version.h
touch ${BUILD_DIR}raspberrypi/version.py
printf "# This file is generated by 'make build' and should not be edited\n\n" > ${BUILD_DIR}raspberrypi/version.py
printf "MAJOR = ${MAJOR}\nMINOR = ${MINOR}\nPATCH = ${PATCH}\nLABEL = \"${LABEL}\"\n\n" >> ${BUILD_DIR}raspberrypi/version.py
printf "ESP_HASH = \"${ESP_HASH}\"\nRPI_HASH = \"${RPI_HASH}\"\n" >> ${BUILD_DIR}raspberrypi/version.py
cp ${BUILD_DIR}raspberrypi/version.py ${WEBAPP_DIR}/version.py
# Copy to raspberrypi
cp ${CONTROLLERS_DIR}pixels.cpp ${CONTROLLERS_DIR}pixels.h -t ${BUILD_DIR}raspberrypi/src/
cp ${CONTROLLERS_DIR}structs.cpp ${CONTROLLERS_DIR}structs.h -t ${BUILD_DIR}raspberrypi/src/
cp ${CONTROLLERS_DIR}extern.cpp -t ${BUILD_DIR}raspberrypi/src/
cp ${CONTROLLERS_DIR}wrapper.py ${CONTROLLERS_DIR}controller_server.py ${CONTROLLERS_DIR}controller.py ${BUILD_DIR}raspberrypi/
cp ${SCRIPTS_DIR}rpi_startup.sh ${BUILD_DIR}raspberrypi/
cp makefiles/rpi_Makefile ${BUILD_DIR}raspberrypi/Makefile
# Copy to esp8266
cp ${CONTROLLERS_DIR}pixels.cpp ${CONTROLLERS_DIR}pixels.h -t ${BUILD_ESP8266_DIR}
cp ${CONTROLLERS_DIR}structs.cpp ${CONTROLLERS_DIR}structs.h -t ${BUILD_ESP8266_DIR}
cp ${CONTROLLERS_DIR}controller.ino ${BUILD_ESP8266_DIR}
touch ${BUILD_ESP8266_DIR}wifi_credentials.h
printf "#define WIFI_SSID \"ssid\"\n#define WIFI_PASSWORD \"password\"\n" > ${BUILD_ESP8266_DIR}wifi_credentials.h
g++ -c -fPIC ${BUILD_RPI_SRC_DIR}pixels.cpp -o ${BUILD_RPI_SRC_DIR}pixels.o ${CPP_FLAGS}
g++ -c -fPIC ${BUILD_RPI_SRC_DIR}structs.cpp -o ${BUILD_RPI_SRC_DIR}structs.o ${CPP_FLAGS}
g++ -c -fPIC ${BUILD_RPI_SRC_DIR}extern.cpp -o ${BUILD_RPI_SRC_DIR}extern.o ${CPP_FLAGS}
g++ -shared -o ${BUILD_RPI_DIR}pixels.so ${BUILD_RPI_SRC_DIR}pixels.o ${BUILD_RPI_SRC_DIR}structs.o ${BUILD_RPI_SRC_DIR}extern.o ${CPP_FLAGS}
rm -f ${BUILD_RPI_SRC_DIR}*.o
# Copy to webapp
cp -r ${WEBAPP_DIR} ${BUILD_DIR}
test:
make coverage
test_webapp:
cd src/webapp && python3 -m pytest && cd ../../
coverage:
cd src/webapp && coverage run --source=. --omit="*/tests*,*/sequences*,version.py,conftest.py" -m pytest && coverage report && coverage html && cd ../../
run_rpi: build
cd ${BUILD_RPI_DIR} && python3 controller_server.py --test && cd ../../
run_app: clean_logs
cd ${WEBAPP_DIR} && python3 app.py --config ${WEBAPP_CONFIG_ARG}
run_interactive:
cd ${WEBAPP_DIR} && python3 -i app.py --config ${WEBAPP_CONFIG_ARG} --nostart --noschedule
run_app_nosend:
cd ${WEBAPP_DIR} && python3 app.py -d --nosend --config ${WEBAPP_CONFIG_ARG}
run_local: all
cd ${TOOLS_DIR} && sudo python3 -i localtest.py
setup:
sudo apt update --fix-missing
sudo apt-get update
sudo apt install pylint
sudo apt install python3-pip
pip3 install eventlet
pip3 install setuptools
pip3 install black
pip3 install pytest-flask
pip3 install pytest-mock
pip3 install coverage
pip3 install pylint
pip3 install schedule
pip3 install coloredlogs
sudo pip3 install coloredlogs
sudo pip3 install schedule
sudo pip3 install rpi_ws281x
sudo apt install screen
sudo pip3 install Flask
sudo pip3 install flask_socketio
sudo pip3 install ruamel.yaml
sudo apt-get install libnode-dev nodejs-dev node-gyp libssl1.0-dev
sudo apt install npm
make node_modules
sudo npm i docsify-cli -g
node_modules:
npm install clang-format prettier html-validate eslint eslint-config-defaults eslint-config-google uglify-js
lint: all clean
${PRETTIER} ${PRETTIER_CONIG} --write ${CSS_DIR}*.css
${PRETTIER} ${PRETTIER_CONIG} --write ${HTML_DIR}*.html
find src/ -iname *.js | xargs ${CLANG_FORMAT} -i
${UGLIFYJS} ${WEBAPP_DIR}static/pixels/pixels.js --compress > ${BUILD_DIR}a.tmp
${UGLIFYJS} ${WEBAPP_DIR}static/lib/socket.io.js --compress > ${BUILD_DIR}b.tmp
mv ${BUILD_DIR}a.tmp ${WEBAPP_DIR}static/pixels/pixels.js
mv ${BUILD_DIR}b.tmp ${WEBAPP_DIR}static/lib/socket.io.js
${HTML_VALIDATE} ${HTML_VALIDATE_CONFG} ${HTML_DIR}*.html
${ESLINT} --fix ${ESLINT_CONFIG} ${JS_FILES}
python3 -m black --line-length 120 ${PY_FILES}
python3 -m pylint ${PYLINT_CONFIG} ${PY_FILES}
lol:
${UGLIFYJS} ${WEBAPP_DIR}static/pixels/pixels.js --compress > a.tmp
${UGLIFYJS} ${WEBAPP_DIR}static/lib/socket.io.js --compress > b.tmp
upload_rpi: all
cd tools && python3 upload_rpi.py
.PHONY: docs
docs:
cp -r images/ docs/images
cp README.md docs/README.md
docsify serve docs
git:
make clean
make test
make lint
git status
clean_logs:
rm -f ${WEBAPP_DIR}logs/*
clean: clean_logs
rm -fr ${BUILD_DIR}*
rm -f ${CONTROLLERS_DIR}*.so
rm -f ${WEBAPP_DIR}controller.py
rm -f ${WEBAPP_DIR}wrapper.py
find . -name __pycache__ -exec rm -rv {} +
find . -name .pytest_cache -exec rm -rv {} +
find . -name htmlcov -exec rm -rv {} +
find . -name .coverage -exec rm -rv {} +
wasm:
./sdk/emsdk/emsdk activate > /dev/null
echo "If em++: not found, run"
echo "cd sdk/emsdk/ && source ./emsdk_env.sh && cd ../../"
em++ ${WASM_ARGS} ${WASM_EXPORTED} -o ${WEBAPP_DIR}static/pixels/pixels.js ${CONTROLLERS_DIR}extern.cpp ${CONTROLLERS_DIR}structs.cpp ${CONTROLLERS_DIR}pixels.cpp
wasm-optimized:
em++ ${WASM_ARGS} -O3 ${WASM_EXPORTED} -o ${WEBAPP_DIR}static/pixels/pixels.js ${CONTROLLERS_DIR}extern.cpp ${CONTROLLERS_DIR}structs.cpp ${CONTROLLERS_DIR}pixels.cpp