Mercurial > code > home > repos > homeauto
annotate service/iot2/tasks.py @ 1492:7c7415cfbc02
iot2: WIP still. more messages schema
Ignore-this: ef94336852ff8885df861146fc1b01b
darcs-hash:f5e1ffe61ecff1a7430b58a7504e35dcc809b1f8
author | drewp <drewp@bigasterisk.com> |
---|---|
date | Wed, 29 Jan 2020 01:03:40 -0800 |
parents | 455b1b80516e |
children | 17ff9322328b |
rev | line source |
---|---|
1489 | 1 from invoke import task |
2 from pathlib import Path | |
3 | |
1490
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
4 PY_ENV = f'build/py' |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
5 NIM_ENV = f'build/nim' |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
6 NIM_BIN = f'{NIM_ENV}/bin' |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
7 PY_SITE_PACKAGES = f'{PY_ENV}/lib/python3.7/site-packages' |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
8 SOME_PY_DEP = Path(f'{PY_SITE_PACKAGES}/standardservice') |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
9 |
1489 | 10 @task |
11 def nim_install(ctx): | |
1490
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
12 if Path(f'{NIM_BIN}/nim').exists(): |
1489 | 13 return |
1490
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
14 ctx.run(f'curl https://nim-lang.org/download/nim-1.0.4-linux_x64.tar.xz | ' |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
15 f'xz -dc | ' |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
16 f'tar --extract --strip-components=1 --one-top-level={NIM_ENV}') |
1489 | 17 |
18 @task | |
19 def py_install(ctx): | |
1490
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
20 if Path(f'{PY_ENV}/bin/python').exists(): |
1489 | 21 return |
1490
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
22 ctx.run(f'mkdir -p {PY_ENV}') |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
23 ctx.run(f'virtualenv -p /usr/bin/python3.7 {PY_ENV}') |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
24 # now .../wheel is newer than requirements.txt |
1489 | 25 |
26 @task(pre=[py_install]) | |
27 def py_deps(ctx): | |
1490
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
28 pip_install_ever_ran = SOME_PY_DEP.exists() |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
29 pip_install_last_ran = Path(f'{PY_SITE_PACKAGES}/wheel').stat().st_mtime |
1489 | 30 requirements = Path('requirements.txt').stat().st_mtime |
1490
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
31 if pip_install_ever_ran and pip_install_last_ran > requirements: |
1489 | 32 return |
1490
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
33 ctx.run(f'{PY_ENV}/bin/pip install ' |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
34 #f'--quiet ' |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
35 f'--index-url https://projects.bigasterisk.com/ ' |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
36 f'--extra-index-url https://pypi.org/simple ' |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
37 f'-r requirements.txt') |
1489 | 38 |
39 @task(pre=[nim_install]) | |
40 def nim_deps(ctx): | |
1490
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
41 pkgs = [('nimpy', 'nimpy-0.1.0'), |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
42 ('https://github.com/avsej/capnp.nim.git', 'capnp-0.0.3'), |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
43 ] |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
44 if all(Path(f'~/.nimble/pkgs/{pkg[1]}').expanduser().exists() for pkg in pkgs): |
1489 | 45 return |
1490
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
46 plain_names = ' '.join(p[0] for p in pkgs) |
1492
7c7415cfbc02
iot2: WIP still. more messages schema
drewp <drewp@bigasterisk.com>
parents:
1490
diff
changeset
|
47 print('todo: on initial install, this may need to be run a few times') |
7c7415cfbc02
iot2: WIP still. more messages schema
drewp <drewp@bigasterisk.com>
parents:
1490
diff
changeset
|
48 ctx.run(f'{NIM_BIN}/nimble install -y {plain_names}', |
7c7415cfbc02
iot2: WIP still. more messages schema
drewp <drewp@bigasterisk.com>
parents:
1490
diff
changeset
|
49 pty=True, env={'PATH': f'/usr/bin:{NIM_BIN}'}) |
1490
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
50 ctx.run(f'ln -s ~/.nimble/bin/capnpc ~/.nimble/bin/capnpc-nim') |
1489 | 51 |
52 | |
1490
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
53 @task(pre=[nim_deps]) |
1489 | 54 def nim_build_x86(ctx): |
1490
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
55 ctx.run(f'{NIM_BIN}/nim compile ' |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
56 f'--out:build/iot2_linux_x86 ' |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
57 f'iot2_linux.nim', |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
58 pty=True) |
1489 | 59 |
60 @task | |
61 def arm_cross_compiler_install(ctx): | |
1490
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
62 if Path('/usr/share/crossbuild-essential-armhf/list').exists(): |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
63 return |
1489 | 64 ctx.run(f'sudo apt install -y crossbuild-essential-armhf', pty=True) |
65 | |
1490
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
66 @task(pre=[arm_cross_compiler_install, nim_install]) |
1489 | 67 def nim_build_arm(ctx): |
1490
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
68 ctx.run(f'{NIM_BIN}/nim compile ' |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
69 f'--cpu:arm ' |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
70 f'--out:build/iot2_linux_arm ' |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
71 f'iot2_linux.nim', |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
72 pty=True) |
1489 | 73 |
74 @task(pre=[py_deps, nim_build_x86]) | |
75 def local_run(ctx): | |
1490
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
76 ctx.run(f'build/iot2_linux_x86') |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
77 |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
78 @task |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
79 def nim_build_esp32(ctx): |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
80 ctx.run(f'{NIM_BIN}/nim compile ' |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
81 f'--cpu:arm ' |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
82 f'--os:standalone ' |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
83 #f'--deadCodeElim:on ' |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
84 # --gc:refc|v2|markAndSweep|boehm|go|none|regions |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
85 f'--gc:stack ' |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
86 f'--compileOnly:on ' |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
87 f'--noMain ' |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
88 f'--nimcache:build/nimcache ' |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
89 f'--embedsrc:on ' |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
90 f'--verbosity:3 ' |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
91 #f'-d:release ' |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
92 f'iot2_esp32.nim') |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
93 ctx.run(f'') |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
94 |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
95 @task |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
96 def install_nim_capnp(ctx): |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
97 ctx.run(f'git clone git@github.com:drewp/capnp.nim.git build/capnp.nim') |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
98 ctx.run(f'cd build/capnp.nim; ./build.sh') |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
99 ctx.run(f'cd build/capnp.nim; bin/nim c capnp/capnpc.nim') |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
100 |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
101 @task |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
102 def messages_build_nim(ctx): |
455b1b80516e
introduce capnp, more build, some demos
drewp <drewp@bigasterisk.com>
parents:
1489
diff
changeset
|
103 ctx.run(f'capnp compile -o ./build/capnp.nim/capnp/capnpc messages.capnp > build/messages.nim') |
1489 | 104 |
105 | |
106 # pack this into docker for pushing to Pi | |
107 | |
108 # apt install -y sshfs | |
109 # sshfs drewp@10.2.0.110:/my/proj/homeauto/service/iot2 /mnt | |
110 # cd /mnt | |
111 # ./iot2_linux_arm |