| Nico Huber | c0b52db | 2022-12-15 12:42:32 +0000 | [diff] [blame] | 1 | Manibuilder |
| 2 | =========== |
| 3 | |
| 4 | Manibuilder is a set of Dockerfiles for manic build testing, held |
| 5 | together by some make-foo. Most of the Dockerfiles make use of |
| 6 | *multiarch* images. This way we can test building on many platforms |
| 7 | supported by *Qemu*. The idea is to test in environments as close |
| 8 | as possible to those of potential users, i.e. no cross-compiling |
| 9 | (with some exceptions). |
| 10 | |
| 11 | Make targets |
| 12 | ------------ |
| 13 | |
| 14 | For each supported target OS/version/architecture exists a *tag* |
| 15 | target, for instance `alpine:amd64-v3.7`. These targets will |
| 16 | automatically check for existence of their respective *Docker* |
| 17 | images (sub target <tag>-check-build), and build them if necessary |
| 18 | (<tag>-build). Finally, flashrom revision `$(TEST_REVISION)` is |
| 19 | fetched and build tested. |
| 20 | |
| 21 | The results will be kept by *Docker* as stopped containers and |
| 22 | can be accessed with the <tag>-shell target. |
| 23 | |
| 24 | There are some additional targets that form sets of the *tag* |
| 25 | targets: |
| 26 | |
| 27 | * default: runs a preselected subset of all supported tags. |
| 28 | * native: runs all tags native to the host architecture. |
| 29 | * all: runs all supported tags. |
| 30 | |
| 31 | For each of these show-<set> lists the included *tags*. |
| 32 | |
| 33 | For preparation of *Qemu* for the *multiarch* images, there is the |
| 34 | `register` target. It has to be run once per boot, though as it |
| 35 | uses a privileged *Docker* container, that is kept as a manual step. |
| 36 | |
| 37 | Usage example |
| 38 | ------------- |
| 39 | |
| 40 | The most common use case may be testing the current upstream |
| 41 | *master* branch which is the default for `$(TEST_REVISION)`. |
| 42 | You'll need roughly 20GiB for the *Docker* images. Might look |
| 43 | like this: |
| 44 | |
| 45 | $ # have to register Qemu first: |
| 46 | $ make register |
| 47 | [...] |
| 48 | $ # run the default target: |
| 49 | $ make -j4 |
| 50 | debian-debootstrap:mips-stretch: 2 |
| 51 | debian-debootstrap:mips-sid: 2 |
| 52 | debian-debootstrap:mips-buster: 2 |
| 53 | ubuntu-debootstrap:powerpc-xenial: 2 |
| 54 | djgpp:6.1.0: 2 |
| 55 | |
| 56 | For each *tag* that returns with a non-zero exit code, the *tag* |
| 57 | and actual exit code is printed. An exit code of `2` is most likely |
| 58 | as that is what *make* returns on failure. Other exit codes might |
| 59 | hint towards a problem in the setup. Failing *tags* can then be |
| 60 | investigated individually with the <tag>-shell target, e.g.: |
| 61 | |
| 62 | $ make debian-debootstrap:mips-sid-shell |
| 63 | [...] |
| 64 | mani@63536fc102a5:~/flashrom$ make |
| 65 | [...] |
| 66 | cc -MMD -Os -Wall -Wshadow -Werror -I/usr/include/libusb-1.0 -D'CONFIG_DEFAULT_PROGRAMMER=PROGRAMMER_INVALID' -D'CONFIG_DEFAULT_PROGRAMMER_ARGS="''"' -D'CONFIG_SERPROG=1' -D'CONFIG_PONY_SPI=1' -D'CONFIG_BITBANG_SPI=1' -D'CONFIG_GFXNVIDIA=1' -D'CONFIG_SATASII=1' -D'CONFIG_ATAVIA=1' -D'CONFIG_IT8212=1' -D'CONFIG_FT2232_SPI=1' -D'CONFIG_USBBLASTER_SPI=1' -D'CONFIG_PICKIT2_SPI=1' -D'HAVE_FT232H=1' -D'CONFIG_DUMMY=1' -D'CONFIG_DRKAISER=1' -D'CONFIG_NICINTEL=1' -D'CONFIG_NICINTEL_SPI=1' -D'CONFIG_NICINTEL_EEPROM=1' -D'CONFIG_OGP_SPI=1' -D'CONFIG_BUSPIRATE_SPI=1' -D'CONFIG_DEDIPROG=1' -D'CONFIG_DEVELOPERBOX_SPI=1' -D'CONFIG_LINUX_MTD=1' -D'CONFIG_LINUX_SPI=1' -D'CONFIG_CH341A_SPI=1' -D'CONFIG_DIGILENT_SPI=1' -D'NEED_PCI=1' -D'NEED_RAW_ACCESS=1' -D'NEED_LIBUSB0=1' -D'NEED_LIBUSB1=1' -D'HAVE_UTSNAME=1' -D'HAVE_CLOCK_GETTIME=1' -D'FLASHROM_VERSION="p1.0-141-g9cecc7e"' -o libflashrom.o -c libflashrom.c |
| 67 | libflashrom.c:386:12: error: 'flashrom_layout_parse_fmap' defined but not used [-Werror=unused-function] |
| 68 | static int flashrom_layout_parse_fmap(struct flashrom_layout **layout, |
| 69 | ^~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 70 | cc1: all warnings being treated as errors |
| 71 | make: *** [Makefile:1075: libflashrom.o] Error 1 |
| 72 | $ # uh-huh, might be a problem with big-endian #if foo |