Hi,

We recently discussed internally about having a subpackage that provide
a binary bootstrap (for ports needing one), in order to avoid a too big
gap between base changes and ports bootstrap regeneration.

I took lang/rust example for testing some prototype. It might cover some
aspects but not all.

I opted to generate a plain tarball located at
/usr/local/lib/rustc-bootstrap-${MACHINE_ARCH}.tar

- a tarball : instead of copying files to one directory (and have to
  deal with filename changes due to MAJOR/MINOR in libraries in the
  PLIST), I prefered to use a tarball.

  so the PLIST-bootstrap is simple: just a unique file with stable name.

- a plain tarball : I didn't see strong need to generate a compressed
  tarball here. rust boostrap is using lzma compression and it is
  relatively ressource intensive. and as the package is also compressed,
  I prefered to stick with plain tarball.

- tarball destination : I put the tarball under /usr/local/lib, without
  specific name for the filename (I just reused the one I have for
  lang/rust). If we want some uniformisation, it might be preferable to
  have a commun directory (/usr/local/lib/bootstrap/ or
  /usr/local/share/bootstrap/ for example), and a common pattern for the
  name (lang-rust.tar ?)

- PLIST-boostrap with 'always-update' : as the content of the tarball
  might change without notice, due to library bump (in base, or in a
  ports dependency), I marked the package as 'always-update'. It might
  be useful or not. In pratice, nobody is expected to install this
  subpackage outside few porters.

- the tarball is in the format that lang/rust will expect for building
  (all files under rustc-bootstrap-${MACHINE_ARCH}-${V}). It means that
  minimal post-processing would be required to use it for building the
  port (in fact, only lzma compression).

  I intent to change slightly the extract step of the port to have a
  tarball named rustc-bootstrap-${MACHINE_ARCH}-${V}-YYYYMMDD and an
  extract directory named rustc-bootstrap-${MACHINE_ARCH}-${V}. The date
  part would be used only to pin the right tarball.

Any comments on the principe ?
-- 
Sebastien Marie


Index: Makefile
===================================================================
RCS file: /cvs/ports/lang/rust/Makefile,v
diff -u -p -r1.200 Makefile
--- Makefile    2 Apr 2024 12:14:19 -0000       1.200
+++ Makefile    4 Apr 2024 06:54:01 -0000
@@ -12,6 +12,7 @@ COMMENT-main =                compiler for Rust Langua
 COMMENT-gdb =          Rust debugger through gdb
 COMMENT-clippy =       Rust linter
 COMMENT-rustfmt =      Rust code formatter
+COMMENT-bootstrap =    Rust binary bootstrap
 COMMENT-src =          Rust source component
 
 V =                    1.77.1
@@ -31,9 +32,10 @@ PKGNAME-main =               rust-${V}
 PKGNAME-gdb =          rust-gdb-${V}
 PKGNAME-clippy =       rust-clippy-${V}
 PKGNAME-rustfmt =      rust-rustfmt-${V}
+PKGNAME-bootstrap =    rust-bootstrap-${V}
 PKGNAME-src =          rust-src-${V}
 
-MULTI_PACKAGES =       -main -gdb -clippy -rustfmt -src
+MULTI_PACKAGES =       -main -gdb -clippy -rustfmt -bootstrap -src
 
 CATEGORIES =           lang
 
@@ -254,7 +256,7 @@ do-build:
                rust-std rustc cargo clippy rustfmt rust-src
        rm -rf -- ${WRKBUILD}/build/tmp
 
-COMPONENTS ?=  rustc-${V}-${TRIPLE_ARCH} \
+COMPONENTS =   rustc-${V}-${TRIPLE_ARCH} \
                rust-std-${V}-${TRIPLE_ARCH} \
                cargo-${V}-${TRIPLE_ARCH} \
                clippy-${V}-${TRIPLE_ARCH} \
@@ -284,6 +286,20 @@ do-install:
                ${TRIPLE_ARCH} \
                ${LIBRUST_HASH} \
                ${LIBRUST_REHASH}
+       # create a bootstrap tarball
+       cd ${PREFIX} && pax -w \
+               -f ${PREFIX}/lib/rustc-bootstrap-${MACHINE_ARCH}.tar \
+               -s ',^,rustc-bootstrap-${MACHINE_ARCH}-${V}/,' \
+               bin/{rustc,rustdoc,cargo} \
+               lib/lib*.so \
+               lib/rustlib/${TRIPLE_ARCH}/
+       cd ${PREFIX} && ldd bin/{rustc,rustdoc,cargo} \
+       | sed -ne 's,.* \(/.*/lib/lib.*\.so.[.0-9]*\)$$,\1,p' \
+       | sort -u \
+       | pax -w -a \
+               -f ${PREFIX}/lib/rustc-bootstrap-${MACHINE_ARCH}.tar \
+               -s ',^/usr/lib/,rustc-bootstrap-${MACHINE_ARCH}-${V}/lib/,' \
+               -s 
',^/usr/local/lib/,rustc-bootstrap-${MACHINE_ARCH}-${V}/lib/,'
        # replace libraries by link
        for lib in ${PREFIX}/lib/lib*.* ; do \
                libname=$${lib##*/} ; \
@@ -302,37 +318,5 @@ do-install:
 
 do-test:
        ${TEST_BIN} test --jobs=${MAKE_JOBS} --no-fail-fast
-
-STRIP ?=       strip
-# Try to avoid strip from our ancient binutils-2.17
-.if ${LINKER_VERSION} != "lld"
-STRIP =                llvm-strip-${MODCLANG_VERSION}
-.endif
-
-# bootstrap target permits to regenerate the bootstrap archive
-BOOTSTRAPNAME=rustc-bootstrap-${MACHINE_ARCH}-${V}-new
-BOOTSTRAPDIR=${WRKDIR}/${BOOTSTRAPNAME}
-bootstrap: build
-       ${_PBUILD} rm -rf ${BOOTSTRAPDIR}
-       ${_PBUILD} mkdir -p ${BOOTSTRAPDIR}/{bin,lib}
-       ${MAKE} clean=fake
-       ${MAKE} fake \
-               PREFIX="${BOOTSTRAPDIR}" \
-               COMPONENTS="rustc-${V}-${TRIPLE_ARCH} 
rust-std-${V}-${TRIPLE_ARCH} cargo-${V}-${TRIPLE_ARCH}" \
-               FAKE_SETUP=""
-       ${_PBUILD} rm -rf ${BOOTSTRAPDIR}/{man,share} \
-               ${BOOTSTRAPDIR}/bin/rust-gdb*
-       ${_PBUILD} ${STRIP} ${BOOTSTRAPDIR}/lib/lib*.so \
-               ${BOOTSTRAPDIR}/lib/rustlib/${TRIPLE_ARCH}/lib/lib*.so
-.for _bin in rustc rustdoc cargo
-       ${_PBUILD} ${STRIP} ${BOOTSTRAPDIR}/bin/${_bin}
-       ldd ${BOOTSTRAPDIR}/bin/${_bin} \
-               | sed -ne 's,.* \(/.*/lib/lib.*\.so.[.0-9]*\)$$,\1,p' \
-               | xargs -r -J % ${_PBUILD} cp % ${BOOTSTRAPDIR}/lib || true
-       ${BOOTSTRAPDIR}/bin/${_bin} -vV >/dev/null
-       ${_PBUILD} chmod -R a+rX ${BOOTSTRAPDIR}
-.endfor
-       @echo '## to create a compressed tarball, use:'
-       @echo '$ tarlz --solid --anonymous -cf 
${FULLDISTDIR}/${BOOTSTRAPNAME}.tar.lz ${BOOTSTRAPNAME}'
 
 .include <bsd.port.mk>
Index: pkg/DESCR-bootstrap
===================================================================
RCS file: pkg/DESCR-bootstrap
diff -N pkg/DESCR-bootstrap
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ pkg/DESCR-bootstrap 4 Apr 2024 06:54:01 -0000
@@ -0,0 +1,6 @@
+Prepared tarball for bootstrapping lang/rust.
+
+To generate a suitable bootstrap archive for lang/rust, use:
+
+$ tarlz --solid -z ${PREFIX}/lib/rustc-bootstrap-${MACHINE_ARCH}.tar \
+       -o rustc-bootstrap-${MACHINE_ARCH}-${V}-YYYYMMDD.tar.lz
Index: pkg/PLIST-bootstrap
===================================================================
RCS file: pkg/PLIST-bootstrap
diff -N pkg/PLIST-bootstrap
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ pkg/PLIST-bootstrap 4 Apr 2024 06:54:01 -0000
@@ -0,0 +1,2 @@
+@option always-update
+lib/rustc-bootstrap-${MACHINE_ARCH}.tar

Reply via email to