Update build scripts to use manifests.

pull/12/head
Peter Hinch 2019-11-01 15:42:50 +00:00
rodzic 3608a86bb1
commit 4f00740ff0
3 zmienionych plików z 82 dodań i 31 usunięć

Wyświetl plik

@ -18,25 +18,52 @@ and `pyb_check` to determine the type of attached board. These use the
`pyboard.py` module in the source tree to execute scripts on the attached
board.
21st Oct 2019
Script modified to ignore the new FROZEN_MANIFEST system. It continues to work
without needing any change to the file layout. When some docs for the manifest
appear I will amend the script and this doc.
The scripts will require minor edits to reflect your directory structure.
###### [Main README](../README.md)
### Optional Edits
# Frozen modules and manifests
In the `buildpyb` script you may wish to edit the `-j 8` argument to `make`.
This radically speeds build on a multi core PC. Empirically 8 gave the fastest
build on my Core i7 4/8 core laptop: adjust to suit your PC.
The method of specifying modules to be frozen has changed (as of Oct 2019).
The files and directories to be frozen are now specified in a file with the
default name `manifest.py`. This may be found in `/ports/stm32/boards` or the
eqivalent for other ports.
This script defaults to a frozen modules directory `stmhal/modules`. This may
be overridden by creating an environment variable FROZEN_DIR: a recent update
enabled the directory for frozen to be located anywhere in the filesystem,
allowing project specific directories.
In practice it can be advantageous to override the default. You might want to
freeze a different set of files depending on the specific board or project.
This is done by issuing
```
make BOARD=$BOARD FROZEN_MANIFEST=$MANIFEST
```
where `BOARD` specifies the target (e.g. 'PYBV11') and `MANIFEST` specifies the
path to the manifest file (e.g. '~/my_manifest.py').
In `buildnew` you may wish to delete the unix make commands.
A simple manifest file comprises `freeze` calls with one or two args. The first
is a directory specifier. If the second exists it can specify a single file or
more, by passing an iterable. Consider the following manifest file:
```python
freeze('$(MPY_DIR)/drivers/dht', 'dht.py')
freeze('$(MPY_DIR)/tools', ('upip.py', 'upip_utarfile.py'))
freeze('/path/to/pyb_d_modules')
```
Taking the lines in order:
1. The single file argument freezes the file 'dht.py' found in the MicroPython
source tree `drivers` directory.
2. Passing an iterable causes the two specified files to be frozen.
3. Passing a directory without arguments causes all files and subdirectories
to be frozen. Assume '../pyb_d_modules' contains a file `rats.py` and a
subdirectory `foo` containing `bar.py`. Then `help('modules')` will show
`rats` and `foo/bar`. This means that Python packages are frozen correctly.
On Linux symlinks are handled as you would expect.
# The build scripts
### Optional Edit (all scripts)
In these scripts you may wish to edit the `-j 8` argument to `make`. This
radically speeds build on a multi core PC. Empirically 8 gave the fastest build
on my Core i7 4/8 core laptop: adjust to suit your PC.
### Dependencies and setup (on PC)
@ -53,6 +80,18 @@ cp 49-micropython.rules /etc/udev/rules.d
pip3 install rshell
```
The build scripts expect an environment variable MPDIR holding the path to the
MicroPython source tree. To set this up, as normal user issue (edited for your
path to the MicroPython source tree):
```
cd ~
echo export MPDIR='/mnt/qnap2/data/Projects/MicroPython/micropython' >> .bashrc
echo >> .bashrc
```
Close and restart the terminal session before proceding.
Verify that `pyboard.py` works. To do this, close and restart the terminal
session. Run Python3, paste the following and check that the red LED lights:
@ -67,24 +106,19 @@ pyb.exec('pyb.LED(1).on()')
pyb.exit_raw_repl()
```
The build scripts expect an environment variable MPDIR holding the path to the
MicroPython source tree. To set this up, as normal user issue (edited for your
path to the MicroPython source tree):
```
cd ~
echo export MPDIR='/mnt/qnap2/data/Projects/MicroPython/micropython' >> .bashrc
echo >> .bashrc
```
Close and restart the terminal session before running the scripts.
### Build script: `buildpyb`
This checks the attached pyboard. If it's a V1.0, V1.1 or Lite it or a Pyboard
D series it builds the correct firmware and deploys it. Otherwise it produces
an error message.
It freezes a different set of files depending on whether the board is a Pyboard
V1.x or a Pyboard D. It can readily be adapted for finer-grain control or to
produce project-specific builds.
You will need to change the `MANIFESTS` variable which is the directory
specifier for my manifest files.
Optional argument `--clean` - if supplied does a `make clean` to delete
all files produced by the previous build before proceeding.
@ -93,7 +127,14 @@ all files produced by the previous build before proceeding.
Report state of master branch, update sources and issue `make clean` for
Pyboard variants and ESP8266. Builds cross compiler and unix port.
If you don't use the Unix build you may wish to delete the unix make commands.
### ESP8266 Build
`buildesp` A script to build and deploy ESP8266 firmware. Accepts optional
`--clean` argument.
`--clean` or `--erase` arguments. Both perform a `make clean` but the second
also erases the ESP8266 flash.
You will need to change the `MANIFEST` variable which is the directory
specifier for my esp8266 manifest file.

Wyświetl plik

@ -1,5 +1,6 @@
#! /bin/bash
cd /mnt/qnap2/data/Projects/MicroPython/micropython/ports/esp8266
MANIFEST='/mnt/qnap2/Scripts/manifests/esp8266_manifest.py'
if [ $# -eq 1 ] && [ $1 = "--clean" ]
then
@ -12,10 +13,10 @@ then
esptool.py --port /dev/ttyUSB0 erase_flash
fi
if make -j 8
if make -j 8 FROZEN_MANIFEST=$MANIFEST
then
sleep 1
esptool.py --port /dev/ttyUSB0 --baud 115200 write_flash --verify --flash_size=detect -fm dio 0 build-GENERIC/firmware-combined.bin
esptool.py --port /dev/ttyUSB0 --baud 115200 write_flash --flash_size=detect -fm dio 0 build-GENERIC/firmware-combined.bin
cd -
sleep 4
rshell -p /dev/ttyUSB0 --editor nano --buffer-size=30

Wyświetl plik

@ -5,9 +5,18 @@
# Also requires the pyboard.py utility to be on the path (micropython/tools/pyboard.py)
MPDEVICE='/dev/pyboard'
MANIFESTS='/mnt/qnap2/Scripts/manifests'
# Determine board type
BOARD=$(pyb_check $MPDEVICE)
# Currently have only two manifest variants for V1.x and D
if [[ $BOARD == 'PYBV11' || $BOARD == 'PYBV10' || $BOARD == 'PYBLITEV10' ]]
then
MANIFEST=$MANIFESTS/pyb_v1_manifest.py
fi
if [[ $BOARD == 'PYBD_SF2' || $BOARD == 'PYBD_SF3' || $BOARD == 'PYBD_SF6' ]]
then
MANIFEST=$MANIFESTS/pyb_d_manifest.py
fi
# Check for user override of frozen directory
if [ $FROZEN_DIR ]
@ -25,10 +34,10 @@ then
then
make BOARD=$BOARD clean
fi
if make -j 8 BOARD=$BOARD FROZEN_MPY_DIR=$FROZEN_DIR FROZEN_MANIFEST= && pyb_boot $MPDEVICE
if make -j 8 BOARD=$BOARD FROZEN_MANIFEST=$MANIFEST && pyb_boot $MPDEVICE
then
sleep 1
make PYTHON=python3 BOARD=$BOARD FROZEN_MPY_DIR=$FROZEN_DIR FROZEN_MANIFEST= deploy
make PYTHON=python3 BOARD=$BOARD FROZEN_MANIFEST=$MANIFEST deploy
else
echo Build failure
fi