Do not re-compress during dev build. Instead of building the target //src:bazel use //src:bazel-dev. File I/O is much slower on Windows compared to Linux and the recompressing step was causing a multi-minute slowdown on Windows. This change should bring iteration times of simple changes for Bazel developers down to significantly less than a minute. RELNOTES: None Closes #8760. PiperOrigin-RevId: 255962558
diff --git a/src/package-bazel.sh b/src/package-bazel.sh index 0ebefed..a5e5e84 100755 --- a/src/package-bazel.sh +++ b/src/package-bazel.sh
@@ -27,6 +27,12 @@ PLATFORMS_ARCHIVE=$5 shift 4 +if [[ "$OUT" == *jdk_allmodules.zip ]]; then + DEV_BUILD=1 +else + DEV_BUILD=0 +fi + TMP_DIR=${TMPDIR:-/tmp} PACKAGE_DIR="$(mktemp -d ${TMP_DIR%%/}/bazel.XXXXXXXX)" mkdir -p "${PACKAGE_DIR}" @@ -34,28 +40,32 @@ cp $* ${PACKAGE_DIR} -# Unpack the deploy jar for postprocessing and for "re-compressing" to save -# ~10% of final binary size. -unzip -q -d recompress ${DEPLOY_JAR} -cd recompress +if [[ $DEV_BUILD -eq 0 ]]; then + # Unpack the deploy jar for postprocessing and for "re-compressing" to save + # ~10% of final binary size. + unzip -q -d recompress ${DEPLOY_JAR} + cd recompress -# Zero out timestamps and sort the entries to ensure determinism. -find . -type f -print0 | xargs -0 touch -t 198001010000.00 -find . -type f | sort | zip -q0DX@ ../deploy-uncompressed.jar + # Zero out timestamps and sort the entries to ensure determinism. + find . -type f -print0 | xargs -0 touch -t 198001010000.00 + find . -type f | sort | zip -q0DX@ ../deploy-uncompressed.jar -# While we're in the deploy jar, grab the label and pack it into the final -# packaged distribution zip where it can be used to quickly determine version -# info. -bazel_label="$(\ - (grep '^build.label=' build-data.properties | cut -d'=' -f2- | tr -d '\n') \ - || echo -n 'no_version')" -echo -n "${bazel_label:-no_version}" > "${PACKAGE_DIR}/build-label.txt" + # While we're in the deploy jar, grab the label and pack it into the final + # packaged distribution zip where it can be used to quickly determine version + # info. + bazel_label="$(\ + (grep '^build.label=' build-data.properties | cut -d'=' -f2- | tr -d '\n') \ + || echo -n 'no_version')" + echo -n "${bazel_label:-no_version}" > "${PACKAGE_DIR}/build-label.txt" -cd .. + cd .. + + DEPLOY_JAR="deploy-uncompressed.jar" +fi # The server jar needs to be the first binary we extract. This is how the Bazel # client knows what .jar to pass to the JVM. -cp deploy-uncompressed.jar ${PACKAGE_DIR}/A-server.jar +cp ${DEPLOY_JAR} ${PACKAGE_DIR}/A-server.jar cp ${INSTALL_BASE_KEY} ${PACKAGE_DIR}/install_base_key # The timestamp of embedded tools should already be zeroed out in the input zip touch -t 198001010000.00 ${PACKAGE_DIR}/*