#!/usr/bin/make -f export DH_VERBOSE = 1 export DEB_BUILD_MAINT_OPTIONS = hardening=+all #DPKG_EXPORT_BUILDFLAGS = 1 #include /usr/share/dpkg/buildflags.mk export VERBOSE = yes export BAZDIR = ${CURDIR}/debian/bazel-bootstrap export BAZDATADIR = ${CURDIR}/debian/bazel-bootstrap-data export BAZSRCDIR = ${CURDIR}/debian/bazel-bootstrap-source # Bypass ccache export CCACHE_DISABLE = 1 export CCACHE_TEMPDIR = ${CURDIR}/debian/ccachetmp # Set locale for reproducible builds export LC_ALL = C # Ensure packages build with no Internet access export http_proxy=127.0.0.1:9 export https_proxy=127.0.0.1:9 # Force Bazel to write its output base inside the workspace so it is preserved across sbuild namespaces export BAZEL_DIR_STARTUP_OPTIONS = --output_base=$(CURDIR)/output/out # Detect the Bazel output directory dynamically (varies by architecture, e.g., k8-dbg, aarch64-dbg) BAZEL_OUT_DIR = $(firstword $(wildcard output/out/execroot/_main/bazel-out/*-dbg)) # BAZEL_CXXOPTS and BAZEL_LINKOPTS take a list of flags seperated by colon export space = $() $() export BAZEL_CXXOPTS = $(subst $(space),:,-std=c++17 ${CPPFLAGS} ${CXXFLAGS}) export BAZEL_LINKOPTS = $(subst $(space),:,-lstdc++ -lm ${LDFLAGS}) # Use the local JDK export EXTRA_BAZEL_ARGS = \ --host_javabase=@local_jdk//:jdk \ --java_runtime_version=local_jdk \ --tool_java_runtime_version=local_jdk \ --host_javacopt=-proc:full \ --host_javacopt=-Acom.google.auto.value.AutoBuilderIsUnstable \ --javacopt=-proc:full \ --javacopt=-Acom.google.auto.value.AutoBuilderIsUnstable \ --strategy=Javac=local \ --worker_max_instances=0 \ --curses=no \ --color=no \ --define=distribution=debian \ --noremote_accept_cached \ --verbose_failures \ --subcommands \ --compilation_mode dbg \ --action_env=CCACHE_DISABLE \ --action_env=CCACHE_TEMPDIR \ --action_env=LC_ALL \ --host_action_env=CCACHE_DISABLE \ --host_action_env=CCACHE_TEMPDIR \ --host_action_env=LC_ALL \ --sandbox_debug \ --sandbox_writable_path=${CCACHE_TEMPDIR} \ --override_module=rules_license=$(CURDIR)/mock_repos/rules_license \ --override_module=bazel_skylib=$(CURDIR)/mock_repos/bazel_skylib \ --override_module=bazel_features=$(CURDIR)/mock_repos/bazel_features \ --override_module=platforms=$(CURDIR)/mock_repos/platforms \ --override_module=protobuf=$(CURDIR)/mock_repos/protobuf \ --override_module=grpc=$(CURDIR)/mock_repos/grpc \ --override_module=rules_pkg=$(CURDIR)/mock_repos/rules_pkg \ --override_module=stardoc=$(CURDIR)/mock_repos/stardoc \ --override_module=zstd-jni=$(CURDIR)/mock_repos/zstd-jni \ --override_module=blake3=$(CURDIR)/mock_repos/blake3 \ --override_module=zlib=$(CURDIR)/mock_repos/zlib \ --override_module=rules_cc=$(CURDIR)/mock_repos/rules_cc \ --override_module=rules_java=$(CURDIR)/mock_repos/rules_java \ --override_module=rules_graalvm=$(CURDIR)/mock_repos/rules_graalvm \ --override_module=rules_proto=$(CURDIR)/mock_repos/rules_proto \ --override_module=rules_jvm_external=$(CURDIR)/mock_repos/rules_jvm_external \ --override_module=rules_python=$(CURDIR)/mock_repos/rules_python \ --override_module=rules_testing=$(CURDIR)/mock_repos/rules_testing \ --override_module=googletest=$(CURDIR)/mock_repos/googletest \ --override_module=with_cfg.bzl=$(CURDIR)/mock_repos/with_cfg.bzl \ --override_module=apple_support=$(CURDIR)/mock_repos/apple_support \ --override_module=abseil-cpp=$(CURDIR)/mock_repos/abseil-cpp \ --override_module=c-ares=$(CURDIR)/mock_repos/c-ares \ --override_module=rules_go=$(CURDIR)/mock_repos/rules_go \ --override_module=rules_kotlin=$(CURDIR)/mock_repos/rules_kotlin \ --override_module=upb=$(CURDIR)/mock_repos/upb \ --override_module=buildozer=$(CURDIR)/mock_repos/buildozer export PROTOC = /usr/bin/protoc export GRPC_JAVA_PLUGIN = /usr/bin/grpc_java_plugin export JAVA_VERSION = 21 # Prevent Out-of-Memory failures on some architectures, enable annotation processing export BAZEL_JAVAC_OPTS = -J-Xmx4096m --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED -proc:full -Acom.google.auto.value.AutoBuilderIsUnstable # Strip Ubuntu-specific metadata, bazel tries to parse it as json and fails. LDFLAGS:=$(shell echo $(LDFLAGS) | sed 's/-Wl,--package-metadata=[^ ]*//g') %: dh $@ --with python3 override_dh_auto_build: mkdir -p ${CCACHE_TEMPDIR} # Copy missing WORKSPACE resource files for bootstrap cp debian/bootstrap-resources/coverage.WORKSPACE src/main/java/com/google/devtools/build/lib/bazel/rules/ # Setup android_databinding system library redirection mkdir -p third_party/java/android_databinding ln -sf /usr/share/java/com.android.databinding.compilerCommon.jar third_party/java/android_databinding/ ln -sf /usr/share/java/com.android.databinding.baseLibrary.jar third_party/java/android_databinding/ cp debian/bootstrap-resources/android_databinding.BUILD third_party/java/android_databinding/BUILD cp debian/bootstrap-resources/rules_license.WORKSPACE src/main/java/com/google/devtools/build/lib/bazel/rules/ cp debian/bootstrap-resources/jdk.WORKSPACE src/main/java/com/google/devtools/build/lib/bazel/rules/java/ cp debian/bootstrap-resources/cc_configure.WORKSPACE src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/ # Compile builtins_bzl.zip using upstream script ./src/zip_builtins.sh "" src/main/java/com/google/devtools/build/lib/bazel/rules/builtins_bzl.zip src/main/starlark/builtins_bzl $$(find src/main/starlark/builtins_bzl -name '*.bzl') # Generate Bzlmod mock stubs python3 debian/generate_mock_repos.py ./compile.sh # Copy the generated classpath file to debian/ for the client launcher to find during the build cp $$(find output/out/ -name "bazel_classpath_debian_depends.txt" | head -n 1) debian/ override_dh_auto_clean: dh_auto_clean rm -rf derived rm -rf output rm -rf bazel-* rm -rf mock_repos override_dh_install: @if [ -z "$(BAZEL_OUT_DIR)" ]; then echo "Error: BAZEL_OUT_DIR is empty"; exit 1; fi # Create target directories for the installation layout mkdir -p output/etc/bazel mkdir -p output/etc/bash_completion.d mkdir -p output/usr/bin mkdir -p output/usr/share/bazel/embedded_tools mkdir -p output/usr/share/zsh/vendor-completions # Copy the main Bazel binary cp output/bazel output/usr/bin/bazel # Generate bash completion dynamically using the compiled binary mkdir -p output/tmp env HOME=$(CURDIR)/output/tmp output/bazel --batch help completion > output/etc/bash_completion.d/bazel # Copy zsh completion static template cp scripts/zsh_completion/_bazel output/usr/share/zsh/vendor-completions/_bazel # Copy default bazelrc cp debian/bazelrc output/etc/bazel/bazelrc # Harvest helper binaries and libraries from persistent output base cp $(BAZEL_OUT_DIR)/bin/src/main/tools/build-runfiles output/usr/share/bazel/build-runfiles cp $(BAZEL_OUT_DIR)/bin/src/main/tools/process-wrapper output/usr/share/bazel/process-wrapper cp $(BAZEL_OUT_DIR)/bin/src/main/tools/linux-sandbox output/usr/share/bazel/linux-sandbox cp $(BAZEL_OUT_DIR)/bin/src/main/tools/daemonize output/usr/share/bazel/daemonize cp $(BAZEL_OUT_DIR)/bin/src/main/java/net/starlark/java/eval/libcpu_profiler.so output/usr/share/bazel/libcpu_profiler.so cp $(BAZEL_OUT_DIR)/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar output/usr/share/bazel/A-server.jar cp $(BAZEL_OUT_DIR)/bin/src/install_base_key_nojdk output/usr/share/bazel/install_base_key # Extract the embedded tools archive unzip -q $(BAZEL_OUT_DIR)/bin/src/embedded_tools_nojdk.zip -d output/usr/share/bazel/embedded_tools # Extract platforms tarball and copy builtins_bzl to satisfy install paths mkdir -p output/usr/share/bazel/platforms tar -xf $(BAZEL_OUT_DIR)/bin/platforms-srcs.tar -C output/usr/share/bazel/platforms/ cp -r src/main/starlark/builtins_bzl output/usr/share/bazel/ # Generate version label echo "7.7.1" > output/usr/share/bazel/build-label.txt # Clean up intermediate build caches so they do not end up in leftovers -chmod -R +w output/out 2>/dev/null || true -chmod -R +w output/tmp 2>/dev/null || true rm -rf output/out rm -rf output/tmp rm -f output/bazel # Original debian/rules install flow mkdir -p debian/tmp/usr/src/bazel-bootstrap ls | sed -r '/(debian|derived|examples|output|site|bazel-|mock_repos)/d' | \ xargs cp -r -t debian/tmp/usr/src/bazel-bootstrap rm -f debian/tmp/usr/src/bazel-bootstrap/scripts/packages/chocolatey/.gitignore rm -rf mock_repos rm -f output/usr/share/bazel/xcode-locator rm -rf output/usr/share/bazel/embedded_tools/tools/jdk/nosystemjdk mv output/etc debian/tmp mv output/usr/bin debian/tmp/usr mv output/usr/share debian/tmp/usr # Fail build (and show culprits) if Bazel components are not properly installed mv output debian/tmp/leftovers ls -laR debian/tmp/leftovers dh_install rm -rf ${BAZDATADIR}/usr/share/bazel/embedded_tools/tools/zip/zipper override_dh_installdocs-arch: dh_installdocs --package=bazel-bootstrap -XREADME.Debian override_dh_installdocs-indep: dh_installdocs --package=bazel-bootstrap-data \ --doc-main-package=bazel-bootstrap dh_installdocs --package=bazel-bootstrap-source \ --doc-main-package=bazel-bootstrap -XREADME.Debian override_dh_link-indep: jdupes -rl ${BAZDATADIR}/usr find ${BAZDATADIR}/usr/share/bazel/embedded_tools -type f -name \ '*.h' -printf '%h\n' | sort -u | sed 's@/build.*embedded_tools/@@' | \ xargs -I% mkdir -p ${BAZDATADIR}/usr/include/bazel/% find ${BAZDATADIR}/usr/share/bazel/embedded_tools -name '*.h' | \ sed 's@/build.*/embedded_tools/@@g' | xargs -I% ln -rs \ ${BAZDATADIR}/usr/share/bazel/embedded_tools/% \ ${BAZDATADIR}/usr/include/bazel/% dh_link override_dh_fixperms-indep: find ${BAZDATADIR}/usr/share -type f -print0 2>/dev/null | xargs -0r chmod a-x find ${BAZSRCDIR}/usr/src -type f -not -name '*.sh' -print0 2>/dev/null | \ xargs -0r chmod a-x find ${BAZDATADIR}/usr/share/doc/bazel/examples -type f \ -not -name '*.sh' -print0 2>/dev/null | xargs -0r chmod a-x find ${BAZDATADIR}/usr/share/bazel/embedded_tools/tools \ -type f -name '*.sh*' -print0 2>/dev/null | xargs -0r chmod a+x chmod a+x ${BAZDATADIR}/usr/share/bazel/embedded_tools/tools/buildstamp/get_workspace_status chmod a+x ${BAZDATADIR}/usr/share/bazel/embedded_tools/tools/cpp/build_interface_so chmod a+x ${BAZDATADIR}/usr/share/bazel/embedded_tools/tools/cpp/linux_cc_wrapper.sh.tpl chmod a+x ${BAZDATADIR}/usr/share/bazel/embedded_tools/tools/cpp/osx_cc_wrapper.sh.tpl chmod a+x ${BAZDATADIR}/usr/share/bazel/embedded_tools/tools/objc/gcov_stub chmod a+x ${BAZDATADIR}/usr/share/bazel/embedded_tools/tools/objc/mcov_stub chmod a+x ${BAZDATADIR}/usr/share/bazel/embedded_tools/tools/python/pywrapper_template.txt dh_fixperms