2960: Merge branch 'main' into 2960-keepstore-streaming
[arvados.git] / build / README
index 85513bdbef0e64764e27b5395adf181d29b76547..e6d14cf66404009c8a6ec6f44606fb6e40f5d5d2 100644 (file)
@@ -11,15 +11,18 @@ In order to build packages, you will need:
 Quickstart
 ==========
 
-Build and test all the packages for debian10 on your architecture by
+Build and test all the packages for a distribution on your architecture by
 running:
 
-    ./run-build-test-packages-one-target.sh --arch "$(arch)"
+    ./run-build-test-packages-one-target.sh --target DISTRO
 
-This will build package build and test Docker images for debian10, build all
-packages in a build container, then test all packages in a test container.
+This will build package build and test Docker images for the named target
+distribution, build all packages in a build container, then test all
+packages in a test container.
 
-Use a different distro by adding the `--target TARGET` option.
+Limit the build to a single architecture by adding the `--arch ARCH`
+option. Supported architectures are amd64 and arm64. Note cross-compilation
+from amd64 to arm64 is currently only supported on Debian 11+.
 
 Limit the build to a single package by adding the `--only-build
 PACKAGE_NAME` option. This is helpful when a build is mostly in good shape
@@ -67,3 +70,29 @@ build-dev-docker-jobs-image.sh           Build developer arvados/jobs Docker ima
 run-library.sh                           A library of functions shared by the
                                          various scripts in this
                                          directory.
+
+Adding a new target
+===================
+
+In order to build packages on a new distribution, you MUST:
+
+* Add a rule for `TARGET/generated` to `package-build-dockerfiles/Makefile`.
+* Add the new `TARGET/generated` rule to the `all` target in
+  `package-build-dockerfiles/Makefile`.
+* Write `package-build-dockerfiles/TARGET/Dockerfile`.
+* Add a rule for `TARGET/generated` to `package-test-dockerfiles/Makefile`.
+* Add the new `TARGET/generated` rule to the `all` target in
+  `package-test-dockerfiles/Makefile`.
+* Write `package-test-dockerfiles/TARGET/Dockerfile`.
+* Create `package-testing/test-packages-TARGET.sh`, ideally by making it a
+  symlink to `FORMAT-common-test-packages.sh`.
+* Update the package download code near the bottom of `test_package_presence`
+  in `run-library.sh` so it can download packages for the new distribution.
+
+Of course, any part of our package build or test infrastructure may need to
+be updated to accommodate the process for new distributions. If you're
+having trouble building lots of packages, consider grepping these build
+scripts for the identifier of the closest working target, and see if you may
+need to add branches or similar hooks for your target. If you're having
+trouble building specific packages, consider doing the same for those
+packages' `fpm-info.sh` files.