mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-06-07 21:17:07 +09:00
Meta: Replace ladybird.sh contents with invocation to ladybird.py
All features supported by ladybird.sh should now work in ladybird.py. Let's forward invocations and warn that ladybird.sh will be removed.
This commit is contained in:
parent
f2eaf1e57b
commit
6ac729e03d
Notes:
github-actions[bot]
2025-05-29 23:35:03 +00:00
Author: https://github.com/trflynn89
Commit: 6ac729e03d
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/4904
Reviewed-by: https://github.com/ADKaster
1 changed files with 2 additions and 271 deletions
273
Meta/ladybird.sh
273
Meta/ladybird.sh
|
@ -1,275 +1,6 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
|
||||
BUILD_PRESET=${BUILD_PRESET:-default}
|
||||
|
||||
ARG0=$0
|
||||
print_help() {
|
||||
NAME=$(basename "$ARG0")
|
||||
cat <<EOF
|
||||
Usage: $NAME COMMAND [ARGS...]
|
||||
Supported COMMANDs:
|
||||
build: Compiles the target binaries, [ARGS...] are passed through to ninja
|
||||
install: Installs the target binary
|
||||
run: $NAME run EXECUTABLE [ARGS...]
|
||||
Runs the EXECUTABLE on the build host, e.g.
|
||||
'shell' or 'js', [ARGS...] are passed through to the executable
|
||||
gdb: Same as run, but also starts a gdb remote session.
|
||||
$NAME gdb EXECUTABLE [-ex 'any gdb command']...
|
||||
Passes through '-ex' commands to gdb
|
||||
vcpkg: Ensure that dependencies are available
|
||||
test: $NAME test [TEST_NAME_PATTERN]
|
||||
Runs the unit tests on the build host, or if TEST_NAME_PATTERN
|
||||
is specified tests matching it.
|
||||
delete: Removes the build environment
|
||||
rebuild: Deletes and re-creates the build environment, and compiles the project
|
||||
addr2line: $NAME addr2line BINARY_FILE ADDRESS
|
||||
Resolves the ADDRESS in BINARY_FILE to a file:line. It will
|
||||
attempt to find the BINARY_FILE in the appropriate build directory
|
||||
|
||||
Examples:
|
||||
$NAME run ladybird
|
||||
Runs the Ladybird browser
|
||||
$NAME run js -A
|
||||
Runs the js(1) REPL
|
||||
$NAME test
|
||||
Runs the unit tests on the build host
|
||||
$NAME addr2line RequestServer 0x12345678
|
||||
Resolves the address 0x12345678 in the RequestServer binary
|
||||
EOF
|
||||
}
|
||||
|
||||
usage() {
|
||||
>&2 print_help
|
||||
exit 1
|
||||
}
|
||||
|
||||
CMD=$1
|
||||
[ -n "$CMD" ] || usage
|
||||
shift
|
||||
if [ "$CMD" = "help" ]; then
|
||||
print_help
|
||||
exit 0
|
||||
fi
|
||||
|
||||
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
# shellcheck source=/dev/null
|
||||
. "${DIR}/shell_include.sh"
|
||||
|
||||
exit_if_running_as_root "Do not run ladybird.sh as root, your Build directory will become root-owned"
|
||||
|
||||
# shellcheck source=/dev/null
|
||||
. "${DIR}/find_compiler.sh"
|
||||
|
||||
CMAKE_ARGS=()
|
||||
CMD_ARGS=( "$@" )
|
||||
|
||||
if [ "$(uname -s)" = Linux ] && [ "$(uname -m)" = "aarch64" ]; then
|
||||
PKGCONFIG=$(which pkg-config)
|
||||
GN=$(command -v gn || echo "")
|
||||
CMAKE_ARGS+=("-DPKG_CONFIG_EXECUTABLE=$PKGCONFIG")
|
||||
# https://github.com/LadybirdBrowser/ladybird/issues/261
|
||||
if [ "$(getconf PAGESIZE)" != "4096" ]; then
|
||||
if [ -z "$GN" ]; then
|
||||
die "GN not found! Please build GN from source and put it in \$PATH"
|
||||
fi
|
||||
fi
|
||||
cat <<- EOF > Meta/CMake/vcpkg/user-variables.cmake
|
||||
set(PKGCONFIG $PKGCONFIG)
|
||||
set(GN $GN)
|
||||
EOF
|
||||
|
||||
fi
|
||||
|
||||
create_build_dir() {
|
||||
check_program_version_at_least CMake cmake 3.25 || exit 1
|
||||
cmake --preset "$BUILD_PRESET" "${CMAKE_ARGS[@]}" -S "$LADYBIRD_SOURCE_DIR" -B "$BUILD_DIR"
|
||||
}
|
||||
|
||||
cmd_with_target() {
|
||||
pick_host_compiler
|
||||
CMAKE_ARGS+=("-DCMAKE_C_COMPILER=${CC}")
|
||||
CMAKE_ARGS+=("-DCMAKE_CXX_COMPILER=${CXX}")
|
||||
|
||||
ensure_ladybird_source_dir
|
||||
|
||||
BUILD_DIR=$(get_build_dir "$BUILD_PRESET")
|
||||
|
||||
CMAKE_ARGS+=("-DCMAKE_INSTALL_PREFIX=$LADYBIRD_SOURCE_DIR/Build/ladybird-install-${BUILD_PRESET}")
|
||||
|
||||
export VCPKG_ROOT="${LADYBIRD_SOURCE_DIR}/Build/vcpkg"
|
||||
export PATH="${LADYBIRD_SOURCE_DIR}/Toolchain/Local/cmake/bin:${VCPKG_ROOT}:${PATH}"
|
||||
}
|
||||
|
||||
ensure_target() {
|
||||
[ -f "$BUILD_DIR/build.ninja" ] || create_build_dir
|
||||
}
|
||||
|
||||
run_tests() {
|
||||
local TEST_NAME="$1"
|
||||
local CTEST_ARGS=("--preset" "$BUILD_PRESET" "--output-on-failure" "--test-dir" "$BUILD_DIR")
|
||||
if [ -n "$TEST_NAME" ]; then
|
||||
if [ "$TEST_NAME" = "WPT" ]; then
|
||||
CTEST_ARGS+=("-C" "Integration")
|
||||
fi
|
||||
CTEST_ARGS+=("-R" "$TEST_NAME")
|
||||
fi
|
||||
ctest "${CTEST_ARGS[@]}"
|
||||
}
|
||||
|
||||
build_target() {
|
||||
# Get either the environment MAKEJOBS or all processors via CMake
|
||||
[ -z "$MAKEJOBS" ] && MAKEJOBS=$(cmake -P "$LADYBIRD_SOURCE_DIR/Meta/CMake/processor-count.cmake")
|
||||
|
||||
# With zero args, we are doing a standard "build"
|
||||
# With multiple args, we are doing an install/run
|
||||
if [ $# -eq 0 ]; then
|
||||
CMAKE_BUILD_PARALLEL_LEVEL="$MAKEJOBS" cmake --build "$BUILD_DIR"
|
||||
else
|
||||
ninja -j "$MAKEJOBS" -C "$BUILD_DIR" -- "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
delete_target() {
|
||||
[ ! -d "$BUILD_DIR" ] || rm -rf "$BUILD_DIR"
|
||||
|
||||
# Delete the vcpkg user variables created by this script if they exist
|
||||
VCPKG_USER_VARS="$LADYBIRD_SOURCE_DIR/Meta/CMake/vcpkg/user-variables.cmake"
|
||||
[ ! -f "$VCPKG_USER_VARS" ] || rm "$VCPKG_USER_VARS"
|
||||
}
|
||||
|
||||
build_vcpkg() {
|
||||
( cd "$LADYBIRD_SOURCE_DIR/Toolchain" && python3 ./BuildVcpkg.py )
|
||||
}
|
||||
|
||||
ensure_toolchain() {
|
||||
build_vcpkg
|
||||
}
|
||||
|
||||
run_gdb() {
|
||||
local GDB_ARGS=()
|
||||
local PASS_ARG_TO_GDB=""
|
||||
local LAGOM_EXECUTABLE=""
|
||||
local GDB=gdb
|
||||
if ! command -v "$GDB" > /dev/null 2>&1; then
|
||||
GDB=lldb
|
||||
if ! command -v "$GDB" > /dev/null 2>&1; then
|
||||
die "Please install gdb or lldb!"
|
||||
fi
|
||||
fi
|
||||
|
||||
for arg in "${CMD_ARGS[@]}"; do
|
||||
if [ "$PASS_ARG_TO_GDB" != "" ]; then
|
||||
GDB_ARGS+=( "$PASS_ARG_TO_GDB" "$arg" )
|
||||
|
||||
PASS_ARG_TO_GDB=""
|
||||
elif [ "$arg" = "-ex" ]; then
|
||||
PASS_ARG_TO_GDB="$arg"
|
||||
elif [[ "$arg" =~ ^-.*$ ]]; then
|
||||
die "Don't know how to handle argument: $arg"
|
||||
else
|
||||
if [ "$LAGOM_EXECUTABLE" != "" ]; then
|
||||
die "Lagom executable can't be specified more than once"
|
||||
fi
|
||||
LAGOM_EXECUTABLE="$arg"
|
||||
fi
|
||||
done
|
||||
if [ "$PASS_ARG_TO_GDB" != "" ]; then
|
||||
GDB_ARGS+=( "$PASS_ARG_TO_GDB" )
|
||||
fi
|
||||
if [ "$LAGOM_EXECUTABLE" = "ladybird" ]; then
|
||||
if [ "$(uname -s)" = "Darwin" ]; then
|
||||
LAGOM_EXECUTABLE="Ladybird.app"
|
||||
else
|
||||
LAGOM_EXECUTABLE="Ladybird"
|
||||
fi
|
||||
fi
|
||||
"$GDB" "$BUILD_DIR/bin/$LAGOM_EXECUTABLE" "${GDB_ARGS[@]}"
|
||||
}
|
||||
|
||||
build_and_run_lagom_target() {
|
||||
local lagom_target="${CMD_ARGS[0]}"
|
||||
local lagom_args=("${CMD_ARGS[@]:1}")
|
||||
|
||||
if [ -z "$lagom_target" ]; then
|
||||
lagom_target="Ladybird"
|
||||
fi
|
||||
|
||||
if [ "$lagom_target" = "ladybird" ]; then
|
||||
lagom_target="Ladybird"
|
||||
fi
|
||||
|
||||
# FIXME: Find some way to centralize these b/w CMakePresets.json, CI files, Documentation and here.
|
||||
if [ "$BUILD_PRESET" = "Sanitizer" ]; then
|
||||
export ASAN_OPTIONS=${ASAN_OPTIONS:-"strict_string_checks=1:check_initialization_order=1:strict_init_order=1:detect_stack_use_after_return=1:allocator_may_return_null=1"}
|
||||
export UBSAN_OPTIONS=${UBSAN_OPTIONS:-"print_stacktrace=1:print_summary=1:halt_on_error=1"}
|
||||
fi
|
||||
|
||||
build_target "${lagom_target}"
|
||||
|
||||
if [[ "$lagom_target" =~ ^(headless-browser|ImageDecoder|Ladybird|RequestServer|WebContent|WebDriver|WebWorker)$ ]] && [ "$(uname -s)" = "Darwin" ]; then
|
||||
"$BUILD_DIR/bin/Ladybird.app/Contents/MacOS/$lagom_target" "${lagom_args[@]}"
|
||||
else
|
||||
"$BUILD_DIR/bin/$lagom_target" "${lagom_args[@]}"
|
||||
fi
|
||||
}
|
||||
|
||||
if [[ "$CMD" =~ ^(build|install|run|gdb|test|rebuild|recreate|addr2line)$ ]]; then
|
||||
cmd_with_target
|
||||
[[ "$CMD" != "recreate" && "$CMD" != "rebuild" ]] || delete_target
|
||||
ensure_toolchain
|
||||
ensure_target
|
||||
case "$CMD" in
|
||||
build)
|
||||
build_target "${CMD_ARGS[@]}"
|
||||
;;
|
||||
install)
|
||||
build_target
|
||||
build_target install
|
||||
;;
|
||||
run)
|
||||
build_and_run_lagom_target
|
||||
;;
|
||||
gdb)
|
||||
[ $# -ge 1 ] || usage
|
||||
build_target "${CMD_ARGS[@]}"
|
||||
run_gdb "${CMD_ARGS[@]}"
|
||||
;;
|
||||
test)
|
||||
build_target
|
||||
run_tests "${CMD_ARGS[0]}"
|
||||
;;
|
||||
rebuild)
|
||||
build_target "${CMD_ARGS[@]}"
|
||||
;;
|
||||
recreate)
|
||||
;;
|
||||
addr2line)
|
||||
build_target
|
||||
[ $# -ge 2 ] || usage
|
||||
BINARY_FILE="$1"; shift
|
||||
BINARY_FILE_PATH="$BUILD_DIR/$BINARY_FILE"
|
||||
command -v addr2line >/dev/null 2>&1 || die "Please install addr2line!"
|
||||
ADDR2LINE=addr2line
|
||||
if [ -x "$BINARY_FILE_PATH" ]; then
|
||||
"$ADDR2LINE" -e "$BINARY_FILE_PATH" "$@"
|
||||
else
|
||||
find "$BUILD_DIR" -name "$BINARY_FILE" -executable -type f -exec "$ADDR2LINE" -e {} "$@" \;
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
build_target "$CMD" "${CMD_ARGS[@]}"
|
||||
;;
|
||||
esac
|
||||
elif [ "$CMD" = "delete" ]; then
|
||||
cmd_with_target
|
||||
delete_target
|
||||
elif [ "$CMD" = "vcpkg" ]; then
|
||||
cmd_with_target
|
||||
ensure_toolchain
|
||||
else
|
||||
>&2 echo "Unknown command: $CMD"
|
||||
usage
|
||||
fi
|
||||
echo -e "\033[33;1mWARNING\033[0m: ladybird.sh is deprecated and will be removed soon. Please use ladybird.py instead."
|
||||
"${DIR}/ladybird.py" "$@"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue