mirror of
https://github.com/browseros-ai/BrowserOS.git
synced 2026-05-13 23:53:25 +00:00
updating to 0.3.0 version remove ai agent side panel removing AI agent updates to release flags updating name of agent new parallel manus agent Fixing build flags to get it working clean-up take chrome version from chromium_version.txt updating ai chat with history support fix: pin patch. update the toolbar name change
251 lines
7.7 KiB
Bash
Executable File
251 lines
7.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# ==========================================================================
|
|
# NXTscape Browser Build Script
|
|
# ==========================================================================
|
|
# Usage: ./build.sh [options] [architecture]
|
|
#
|
|
# Options:
|
|
# -r Build release version (default is debug build)
|
|
# -n Non-interactive mode (use all defaults, no prompts)
|
|
#
|
|
# Architecture:
|
|
# arm64 Build for Apple Silicon (default)
|
|
# x64 Build for Intel processors
|
|
#
|
|
# Examples:
|
|
# ./build.sh # Debug build for arm64
|
|
# ./build.sh -r # Release build for arm64
|
|
# ./build.sh x64 # Debug build for x64
|
|
# ./build.sh -r x64 # Release build for x64
|
|
# ./build.sh -n # Debug build with all defaults (no prompts)
|
|
# ./build.sh -nr # Release build with all defaults (no prompts)
|
|
# ==========================================================================
|
|
|
|
# Exit immediately if a command fails (e), treat unset variables as errors (u),
|
|
# and print commands before execution (x)
|
|
set -eux
|
|
|
|
# Build script for local macOS environment
|
|
|
|
# Some path variables
|
|
_root_dir=$(dirname $(greadlink -f $0)) # Gets the absolute path of the script directory
|
|
_src_dir="$_root_dir/build/src/" # Chromium source code directory
|
|
_out_dir="Default"
|
|
|
|
chromium_version=$(cat "$_root_dir/scripts/chromium_version.txt")
|
|
|
|
# Function to copy icons from resources to the Chromium theme directory
|
|
copy_icons() {
|
|
local src_dir="$1"
|
|
local chromium_theme_dir="$2"
|
|
|
|
echo "Copying icon files to Chromium theme directory: $chromium_theme_dir"
|
|
|
|
if [ -d "$src_dir" ]; then
|
|
# Main PNG files
|
|
echo "Copying PNG files..."
|
|
cp -f "$src_dir/"*.png "$chromium_theme_dir/"
|
|
|
|
# SVG and AI files
|
|
echo "Copying SVG and AI files..."
|
|
cp -f "$src_dir/"*.svg "$chromium_theme_dir/"
|
|
cp -f "$src_dir/"*.ai "$chromium_theme_dir/"
|
|
|
|
# Copy subdirectories
|
|
echo "Copying platform-specific icons..."
|
|
|
|
# Mac icons
|
|
if [ -d "$src_dir/mac" ]; then
|
|
mkdir -p "$chromium_theme_dir/mac"
|
|
cp -f "$src_dir/mac/"* "$chromium_theme_dir/mac/"
|
|
fi
|
|
|
|
# Windows icons
|
|
if [ -d "$src_dir/win" ]; then
|
|
mkdir -p "$chromium_theme_dir/win"
|
|
cp -rf "$src_dir/win/"* "$chromium_theme_dir/win/"
|
|
fi
|
|
|
|
# Linux icons
|
|
if [ -d "$src_dir/linux" ]; then
|
|
mkdir -p "$chromium_theme_dir/linux"
|
|
cp -f "$src_dir/linux/"* "$chromium_theme_dir/linux/"
|
|
fi
|
|
|
|
# ChromeOS icons
|
|
if [ -d "$src_dir/chromeos" ]; then
|
|
mkdir -p "$chromium_theme_dir/chromeos"
|
|
cp -f "$src_dir/chromeos/"* "$chromium_theme_dir/chromeos/"
|
|
fi
|
|
|
|
echo "Icon files copied successfully."
|
|
else
|
|
echo "Warning: Icon source directory $src_dir not found. Skipping icon copy step."
|
|
fi
|
|
}
|
|
|
|
# Parse command line options
|
|
release=false # Default is debug build
|
|
non_interactive=false # Default is interactive mode
|
|
while getopts 'rn' OPTION; do
|
|
case "$OPTION" in
|
|
r)
|
|
release=true # -r option enables release build
|
|
;;
|
|
n)
|
|
non_interactive=true # -n option enables non-interactive mode
|
|
;;
|
|
esac
|
|
done
|
|
|
|
shift "$(($OPTIND - 1))" # Shift positional parameters to access non-option arguments
|
|
|
|
_arch=${1:-arm64} # Set build architecture, default to arm64 if not specified
|
|
|
|
# Variables for build steps - will be prompted
|
|
# Initialize to false so pressing Enter means "No"
|
|
should_apply_patches=false
|
|
should_sign_package=false
|
|
should_clean_build=false
|
|
should_reset_git=false
|
|
should_clean_git=false
|
|
|
|
if [ "$non_interactive" = true ]; then
|
|
should_apply_patches=true
|
|
should_sign_package=true
|
|
should_clean_build=true
|
|
should_reset_git=true
|
|
should_clean_git=true
|
|
fi
|
|
|
|
# Handle interactive vs non-interactive mode
|
|
if [ "$non_interactive" = false ]; then
|
|
read -p "Clean previous build artifacts (out/ directory)? (y/N). Press enter for NO: " -r reply
|
|
if [[ "$reply" =~ ^[Yy]$ ]]; then
|
|
should_clean_build=true
|
|
fi
|
|
read -p "Apply patches? (y/N). Press enter for NO: " -r reply
|
|
if [[ "$reply" =~ ^[Yy]$ ]]; then
|
|
should_apply_patches=true
|
|
fi
|
|
read -p "Sign and package the application after build? (y/N). Press enter for NO: " -r reply
|
|
if [[ "$reply" =~ ^[Yy]$ ]]; then
|
|
should_sign_package=true
|
|
fi
|
|
read -p "Reset git branch and remove all tracked files? (y/N). Press enter for NO: " -r reply
|
|
if [[ "$reply" =~ ^[Yy]$ ]]; then
|
|
should_reset_git=true
|
|
fi
|
|
else
|
|
echo "Running in non-interactive mode with default settings:"
|
|
echo " - Clean build: $should_clean_build"
|
|
echo " - Apply patches: $should_apply_patches"
|
|
echo " - Sign package: $should_sign_package"
|
|
echo " - Reset git: $should_reset_git"
|
|
echo " - Clean git: $should_clean_git"
|
|
fi
|
|
|
|
# Reset git branch if requested
|
|
if [ "$should_reset_git" = true ]; then
|
|
echo "Resetting git branch and removing all tracked files..."
|
|
cd "$_src_dir"
|
|
git reset --hard HEAD
|
|
cd "$_root_dir"
|
|
fi
|
|
|
|
# Clean git with exclusions for important directories
|
|
if [ "$should_clean_git" = true ]; then
|
|
cd "$_src_dir"
|
|
echo "Running git clean with exclusions for gn and other important tools..."
|
|
|
|
# let's clean only in chrome
|
|
git clean -fdx chrome/ \
|
|
--exclude="third_party/" \
|
|
--exclude="build_tools/" \
|
|
--exclude="uc_staging/" \
|
|
--exclude="buildtools/" \
|
|
--exclude="tools/" \
|
|
--exclude="build/"
|
|
cd "$_root_dir"
|
|
fi
|
|
|
|
# Fetch tags and switch to Chromium version tag
|
|
cd "$_src_dir"
|
|
echo "Fetching tags and switching to Chromium version $chromium_version..."
|
|
git fetch --tags
|
|
git checkout tags/$chromium_version
|
|
|
|
echo "Running gclient sync with minimal history..."
|
|
# Use --no-history to skip git history and --shallow for minimal checkout
|
|
# These reduce checkout size and time significantly
|
|
gclient sync -D --no-history --shallow
|
|
cd "$_root_dir"
|
|
|
|
# Clean up previous build artifacts
|
|
if [ "$should_clean_build" = true ]; then
|
|
echo "Cleaning up previous build artifacts..."
|
|
rm -rf "$_src_dir/out/$_out_dir" || true # Remove previous output directory
|
|
fi
|
|
|
|
# Create output directory
|
|
mkdir -p "$_src_dir/out/$_out_dir"
|
|
|
|
# Apply patches
|
|
if [ "$should_apply_patches" = true ]; then
|
|
echo "Applying patches..."
|
|
python3 "$_root_dir/scripts/patches.py" apply "$_src_dir" "$_root_dir/patches"
|
|
fi
|
|
|
|
# Set build flags based on build type
|
|
if [ "$release" = true ]; then
|
|
echo "Using release build configuration..."
|
|
cat "$_root_dir/scripts/flags.macos.release.gn" >"$_src_dir/out/$_out_dir/args.gn"
|
|
else
|
|
echo "Using debug build configuration..."
|
|
cat "$_root_dir/scripts/flags.macos.debug.gn" >"$_src_dir/out/$_out_dir/args.gn"
|
|
fi
|
|
|
|
# Set target_cpu to the corresponding architecture
|
|
if [[ $_arch == "arm64" ]]; then
|
|
echo 'target_cpu = "arm64"' >>"$_src_dir/out/$_out_dir/args.gn" # For ARM64/Apple Silicon
|
|
else
|
|
echo 'target_cpu = "x64"' >>"$_src_dir/out/$_out_dir/args.gn" # For Intel x64
|
|
fi
|
|
|
|
# Copy over AI side panel resources
|
|
_ai_side_panel_dir="$_src_dir/chrome/browser/resources/ai_side_panel"
|
|
|
|
echo "Creating directory:"
|
|
echo " $_ai_side_panel_dir"
|
|
|
|
mkdir -p "$_ai_side_panel_dir"
|
|
|
|
echo "Copying content from felafax-chromium:"
|
|
echo " from: $_root_dir/files/ai_side_panel"
|
|
echo " to: $_ai_side_panel_dir"
|
|
|
|
cp -r $_root_dir/files/ai_side_panel/* "$_ai_side_panel_dir"
|
|
|
|
# Copy icons from resources/output to the Chromium theme directory
|
|
_chromium_theme_dir="$_src_dir/chrome/app/theme/chromium"
|
|
copy_icons "$_root_dir/resources/gen" "$_chromium_theme_dir"
|
|
|
|
# Change to source directory for building
|
|
cd "$_src_dir"
|
|
|
|
# Generate ninja build files
|
|
if [ "$should_clean_build" = true ]; then
|
|
echo "Generating ninja build files..."
|
|
gn gen out/$_out_dir --fail-on-unused-args
|
|
fi
|
|
|
|
# autoninja is a wrapper around ninja that automatically sets optimal parameters
|
|
autoninja -C out/$_out_dir chrome chromedriver
|
|
|
|
# Sign and package the application
|
|
if [ "$should_sign_package" = true ]; then
|
|
echo "Signing and packaging the application..."
|
|
$_root_dir/sign_and_package_app.sh
|
|
fi
|