@@ -16,11 +16,7 @@ set -euo pipefail
1616PREFIX=" "
1717CI=" no"
1818SAVE_DEPS_PREFIXES=" "
19- if [[ " $OSTYPE " == " darwin" * ]]; then
20- NUM_THREADS=$( sysctl -n hw.logicalcpu)
21- else
22- NUM_THREADS=$( nproc)
23- fi
19+ NUM_THREADS=$( nproc 2> /dev/null || sysctl -n hw.ncpu 2> /dev/null || echo 2)
2420SKIP_SYSTEM_OR_TOOLS=" false"
2521BASE_DIR=$( mktemp -d /tmp/DependencyInstaller-XXXXXX)
2622CMAKE_PACKAGE_ROOT_ARGS=" "
@@ -76,6 +72,15 @@ FLEX_CHECKSUM="2882e3179748cc9f9c23ec593d6adc8d"
7672OR_TOOLS_VERSION_BIG=" 9.14"
7773OR_TOOLS_VERSION_SMALL=" ${OR_TOOLS_VERSION_BIG} .6206"
7874EQUIVALENCE_DEPS=" no"
75+ INSTALL_BAZEL=" no"
76+ INSTALL_BAZEL_DEV=" no"
77+ NO_GUI=" no"
78+ BAZELISK_VERSION=" 1.28.1"
79+ BAZELISK_CHECKSUM_AMD64=" 2dc74b7ad6bdd6b6b08f6802d14fc1fd"
80+ BAZELISK_CHECKSUM_ARM64=" 94415d08ed2f86a49375f25a7f2f9cca"
81+ BUILDIFIER_VERSION=" 8.5.1"
82+ BUILDIFIER_CHECKSUM_AMD64=" 72f5953ab6dcc309a4447c2e2d79c680"
83+ BUILDIFIER_CHECKSUM_ARM64=" 06f52f0872bde33685c6260110261cf7"
7984# ... configuration variables will be added here ...
8085
8186# ==============================================================================
@@ -784,6 +789,93 @@ _install_or_tools() {
784789# Each dependency will have its own dedicated function for installation and
785790# version management. This modular approach makes the script easier to
786791# maintain and extend.
792+ # ------------------------------------------------------------------------------
793+ # Bazel
794+ # ------------------------------------------------------------------------------
795+ _install_bazel () {
796+ local bazel_prefix=${PREFIX:- " /usr/local" }
797+ log " Checking Bazel (via bazelisk)"
798+ if _command_exists " bazelisk" ; then
799+ log " bazelisk already installed, skipping."
800+ INSTALL_SUMMARY+=(" Bazel: system=found, required=any, status=skipped" )
801+ return
802+ fi
803+ if [[ " $OSTYPE " == " darwin" * ]]; then
804+ _execute " Installing bazelisk via Homebrew..." brew install bazelisk
805+ else
806+ local arch
807+ arch=$( uname -m)
808+ local bazelisk_arch=" amd64"
809+ if [[ " ${arch} " == " aarch64" ]]; then
810+ bazelisk_arch=" arm64"
811+ fi
812+ local bazelisk_checksum=" ${BAZELISK_CHECKSUM_AMD64} "
813+ if [[ " ${bazelisk_arch} " == " arm64" ]]; then
814+ bazelisk_checksum=" ${BAZELISK_CHECKSUM_ARM64} "
815+ fi
816+ (
817+ cd " ${BASE_DIR} "
818+ _execute " Downloading bazelisk v${BAZELISK_VERSION} ..." curl -Lo bazelisk \
819+ " https://github.com/bazelbuild/bazelisk/releases/download/v${BAZELISK_VERSION} /bazelisk-linux-${bazelisk_arch} "
820+ _verify_checksum " ${bazelisk_checksum} " " bazelisk" || error " Bazelisk checksum failed."
821+ chmod +x bazelisk
822+ _execute " Installing bazelisk..." mv bazelisk " ${bazel_prefix} /bin/bazelisk"
823+ )
824+ if [[ " ${NO_GUI} " != " yes" ]]; then
825+ # Install xcb libraries needed for GUI support with Bazel builds
826+ if _command_exists " apt-get" ; then
827+ _execute " Installing xcb libraries for GUI support..." \
828+ apt-get -y install --no-install-recommends \
829+ libxcb1-dev libxcb-util-dev libxcb-icccm4-dev libxcb-image0-dev \
830+ libxcb-keysyms1-dev libxcb-randr0-dev libxcb-render-util0-dev \
831+ libxcb-xinerama0-dev libxcb-xkb-dev
832+ elif _command_exists " yum" ; then
833+ _execute " Installing xcb libraries for GUI support..." \
834+ yum install -y \
835+ libxcb-devel xcb-util-devel xcb-util-image-devel \
836+ xcb-util-keysyms-devel xcb-util-renderutil-devel xcb-util-wm-devel
837+ fi
838+ fi
839+ fi
840+ INSTALL_SUMMARY+=(" Bazel: system=none, required=latest, status=installed" )
841+ }
842+
843+ # ------------------------------------------------------------------------------
844+ # Bazel Dev Tools (buildifier, etc.)
845+ # ------------------------------------------------------------------------------
846+ _install_bazel_dev () {
847+ local bazel_prefix=${PREFIX:- " /usr/local" }
848+ log " Checking Bazel dev tools (buildifier)"
849+ if _command_exists " buildifier" ; then
850+ log " buildifier already installed, skipping."
851+ INSTALL_SUMMARY+=(" buildifier: system=found, required=any, status=skipped" )
852+ return
853+ fi
854+ if [[ " $OSTYPE " == " darwin" * ]]; then
855+ _execute " Installing buildifier via Homebrew..." brew install buildifier
856+ else
857+ local arch
858+ arch=$( uname -m)
859+ local buildifier_arch=" amd64"
860+ if [[ " ${arch} " == " aarch64" ]]; then
861+ buildifier_arch=" arm64"
862+ fi
863+ local buildifier_checksum=" ${BUILDIFIER_CHECKSUM_AMD64} "
864+ if [[ " ${buildifier_arch} " == " arm64" ]]; then
865+ buildifier_checksum=" ${BUILDIFIER_CHECKSUM_ARM64} "
866+ fi
867+ (
868+ cd " ${BASE_DIR} "
869+ _execute " Downloading buildifier v${BUILDIFIER_VERSION} ..." curl -Lo buildifier \
870+ " https://github.com/bazelbuild/buildtools/releases/download/v${BUILDIFIER_VERSION} /buildifier-linux-${buildifier_arch} "
871+ _verify_checksum " ${buildifier_checksum} " " buildifier" || error " Buildifier checksum failed."
872+ chmod +x buildifier
873+ _execute " Installing buildifier..." mv buildifier " ${bazel_prefix} /bin/buildifier"
874+ )
875+ fi
876+ INSTALL_SUMMARY+=(" buildifier: system=none, required=latest, status=installed" )
877+ }
878+
787879_install_common_dev () {
788880 log " Install common development dependencies (-common or -all)"
789881 rm -rf " ${BASE_DIR} "
@@ -1043,6 +1135,9 @@ Options:
10431135 -base Install base dependencies using package managers. Requires privileged access.
10441136 -common Install common dependencies.
10451137 -eqy Install equivalence dependencies (yosys, eqy, sby).
1138+ -bazel Download and install bazel (via bazelisk).
1139+ -bazel-dev Download and install bazel developer tools (buildifier, etc.).
1140+ -no-gui Skip GUI-only dependencies (e.g. xcb libraries) when used with -bazel.
10461141 -prefix=DIR Install common dependencies in a user-specified directory.
10471142 -local Install common dependencies in \$ {HOME}/.local.
10481143 -ci Install dependencies required for CI.
@@ -1068,6 +1163,9 @@ main() {
10681163 -base) option=" base" ;;
10691164 -common) option=" common" ;;
10701165 -eqy) EQUIVALENCE_DEPS=" yes" ;;
1166+ -bazel) INSTALL_BAZEL=" yes" ;;
1167+ -bazel-dev) INSTALL_BAZEL_DEV=" yes" ;;
1168+ -no-gui) NO_GUI=" yes" ;;
10711169 -ci) CI=" yes" ;;
10721170 -verbose) VERBOSE_MODE=" yes" ;;
10731171 -local)
@@ -1113,8 +1211,23 @@ main() {
11131211 shift 1
11141212 done
11151213
1214+ if [[ " ${option} " == " none" && " ${INSTALL_BAZEL} " == " no" && " ${INSTALL_BAZEL_DEV} " == " no" ]]; then
1215+ error " You must use one of: -all, -base, -common, -bazel, or -bazel-dev."
1216+ fi
1217+
1218+ # -bazel-dev implies -bazel (you need bazelisk to use buildifier)
1219+ if [[ " ${INSTALL_BAZEL} " == " yes" || " ${INSTALL_BAZEL_DEV} " == " yes" ]]; then
1220+ _install_bazel
1221+ fi
1222+
1223+ if [[ " ${INSTALL_BAZEL_DEV} " == " yes" ]]; then
1224+ _install_bazel_dev
1225+ fi
1226+
11161227 if [[ " ${option} " == " none" ]]; then
1117- error " You must use one of: -all, -base, or -common."
1228+ _print_summary
1229+ rm -rf " ${BASE_DIR} "
1230+ return
11181231 fi
11191232
11201233 OR_TOOLS_PATH=${PREFIX:- " /opt/or-tools" }
0 commit comments