Everywhere: Remove GN build system

We've had some impressive efforts going into setting up and maintaining
GN as an alternative to CMake, but as of today we're still using CMake
and the GN files have bitrotted quite severely.

We've found no convincing reason to keep maintaining two build systems
in parallel - so let's remove GN and make life a bit simpler for us.
This commit is contained in:
Jelle Raaijmakers 2026-04-15 20:44:27 +02:00 committed by Tim Flynn
parent b2e0a2515a
commit c3fb1be321
181 changed files with 0 additions and 6970 deletions

5
.gn
View file

@ -1,5 +0,0 @@
buildconfig = "//Meta/gn/build/BUILDCONFIG.gn"
exec_script_whitelist = []
export_compile_commands = [ ":*" ]
script_executable = "python3"
secondary_source = "//Meta/gn/secondary/"

View file

@ -354,15 +354,6 @@ open -W --stdout $(tty) --stderr $(tty) ./Build/release/bin/Ladybird.app
open -W --stdout $(tty) --stderr $(tty) ./Build/release/bin/Ladybird.app --args https://ladybird.dev
```
### Experimental GN build
There is an experimental GN build for Ladybird. It is not officially supported, but it is kept up to date on a best-effort
basis by interested contributors. See the [GN build instructions](../Meta/gn/README.md) for more information.
In general, the GN build organizes ninja rules in a more compact way than the CMake build, and it may be faster on some systems.
GN also allows building host and cross-targets in the same build directory, which is useful for managing dependencies on host tools when
cross-compiling to other platforms.
### Debugging with CLion
Ladybird should be built with debug symbols first. This can be done by adding `-DCMAKE_BUILD_TYPE=Debug` to the cmake command line,

1
Meta/gn/.gitignore vendored
View file

@ -1 +0,0 @@
!build

View file

@ -1,76 +0,0 @@
# gn build for Ladybird
Warning! The GN build is experimental and best-effort. It might not work, and if you use it you're expected to feel comfortable to unbreak it if necessary. Ladybird's official build system is CMake, if in doubt use that. If you add files, you're expected to update the CMake build but you don't need to update GN build files. Reviewers should not ask authors to update GN build files. Keeping the GN build files up-to-date is on the people who use the GN build.
GN is a metabuild system. It always creates ninja files, but it can create some IDE projects (MSVC, Xcode, ...) which then shell out to ninja for the actual build.
This is a good [overview of GN](https://docs.google.com/presentation/d/15Zwb53JcncHfEwHpnG_PoIbbzQ3GQi_cpujYwbpcbZo/edit#slide=id.g119d702868_0_12).
For more information, motivation, philosophy, and inspiration, see the LLVM documentation on its [GN build](https://github.com/llvm/llvm-project/tree/main/llvm/utils/gn#quick-start)
# Creating a gn build
To create a GN build, you need to have GN installed. It's available in some Linux package managers, but if not, or on other OSes, see below.
On Ubuntu 22.04, the main package repos do not have an up to date enough package for GN, so you will need to build it from source or get a binary from Google.
The easiest way to build GN from source is to use our [Toolchain/BuildGN.sh](../../Toolchain/BuildGN.sh) script, which will
drop the built binary into the `Toolchain/Local/gn/bin` directory. The instructions for downloading a prebuilt binary from Google are
[here](https://gn.googlesource.com/gn/+/refs/heads/main#getting-a-binary).
Once you have GN installed, you can create a build directory by running the following commands:
```sh
gn gen out
```
`gn gen` creates a ninja build in the `out` directory. You can then build the project with ninja:
```sh
ninja -C out
```
If GN or ninja report a bunch of errors, it's likely that you need to create an `args.gn` that points to all the required tools.
`args.gn` belongs at the root of the build directory, and can be placed there before running gn gen, or modified with
`gn args <build dir>`. See the section below for a typical `args.gn`.
If you modify `args.gn` outside of `gn args`, be sure to run `gn gen` again to regenerate the ninja files.
# Typical gn args
On macOS, the default args should work out of the box. For compiling Ladybird there won't be any tailoring needed if you have Qt6 installed via homebrew and the Xcode tools installed.
On Ubuntu, it's likely that the default ``cc`` and ``c++`` will not be able to compile the project. For compiling Ladybird, a typical ``args.gn`` might look like the below:
args.gn
```gn
# Set build arguments here. See `gn help buildargs`.
# Chosen clang must be >= version 15.0.0
host_cc="clang"
host_cxx="clang++"
is_clang=true
use_lld=true
qt_install_headers="/usr/include/x86_64-linux-gnu/qt6/"
qt_install_lib="/usr/lib/x86_64-linux-gnu"
qt_install_libexec="/usr/lib/qt6/libexec/"
```
As with any gn project, ``gn args <build dir> --list`` is your best friend.
# Running binaries from the GN build
Targets in the gn build are prefixed by the directory they are declared in. For example, to build the default target
in the Ladybird/ directory and LibWeb, you would run:
```shell
ninja -C out Ladybird
ninja -C out Userland/Libraries/LibWeb
```
Binaries are placed in the `out/bin` directory, and can be run from there.
```shell
./out/bin/Ladybird
# or on macOS
open -W --stdout $(tty) --stderr $(tty) ./out/bin/Ladybird.app --args https://ladybird.dev
```

View file

@ -1,207 +0,0 @@
import("//Meta/gn/build/buildflags.gni")
import("//Meta/gn/build/mac_sdk.gni")
import("//Meta/gn/build/sysroot.gni")
import("//Meta/gn/build/toolchain/compiler.gni")
declare_args() {
# If set, puts relative paths in debug info.
# Makes the build output independent of the build directory, but makes
# most debuggers harder to use. See "Getting to local determinism" and
# "Getting debuggers to work well with locally deterministic builds" in
# http://blog.llvm.org/2019/11/deterministic-builds-with-clang-and-lld.html
# for more information.
use_relative_paths_in_debug_info = false
# The version of host gcc. Ignored if is_clang is true.
gcc_version = 12
}
config("compiler_defaults") {
defines = []
asmflags = []
cflags = []
cflags_cc = []
ldflags = []
if (symbol_level == 2) {
if (is_debug_gdb) {
cflags += [ "-ggdb" ]
} else if (is_clang && is_debug_lldb) {
# GCC (as of version 13) does not support lldb-specific debug information
cflags += [ "-glldb" ]
} else {
cflags += [ "-g" ]
}
# For full debug-info -g builds, --gdb-index makes links ~15% slower, and
# gdb symbol reading time 1500% faster (lld links in 4.4 instead of 3.9s,
# and gdb loads and runs it in 2s instead of in 30s). It's likely that
# people doing symbol_level=2 want to run a debugger (since
# symbol_level=2 isn't the default). So this seems like the right
# tradeoff.
if (current_os != "mac" && use_lld) {
cflags += [ "-ggnu-pubnames" ] # llvm PR34820
ldflags += [ "-Wl,--gdb-index" ]
# Use debug fission. In this mode, detailed debug information is
# written to a .dwo file next to each .o file instead of into the .o
# file directly. The linker then only links the .o files, which contain
# a pointer to each .dwo file. The debugger then reads debug info out
# of all the .dwo files instead of from the binary.
#
# (The dwp tool can link all the debug info together into a single
# "debug info binary", but that's not done as part of the build.)
#
# This requires `-Wl,--gdb-index` (above) to work well.
#
# With lld, this reduces link time:
# - in release + symbol_level=2 builds: From 2.3s to 1.3s
# - in debug builds: From 5.2s to 4.6s
#
# Time needed for gdb startup and setting a breakpoint is comparable,
# the time from from `r` to hititng a breakpoint on main goes from 4s
# to 2s.
#
# (macOS's linker always keeps debug info out of its output executables
# and debuggers there also know to load debug info from the .o files.
# macOS also has a debug info linker like dwp, it's called dsymutil.
# This happens by default, so there's no need to pass a flag there.)
cflags += [ "-gsplit-dwarf" ]
ldflags += [ "-gsplit-dwarf" ] # Needed for ThinLTO builds.
}
} else if (symbol_level == 1) {
cflags += [ "-g1" ]
# For linetable-only -g1 builds, --gdb-index makes links ~8% slower, but
# links are 4x faster than -g builds so it's a fairly small absolute cost.
# On the other hand, gdb startup is well below 1s with and without the
# index, and people using -g1 likely don't use a debugger. So don't use
# the flag here.
# Linetables always go in the .o file, even with -gsplit-dwarf, so there's
# no point in passing -gsplit-dwarf here.
}
if (is_optimized) {
cflags += [ "-O2" ]
}
cflags += [
"-D_FILE_OFFSET_BITS=64",
"-DENABLE_COMPILETIME_FORMAT_CHECK",
]
cflags += [
"-fdiagnostics-color",
"-ffp-contract=off",
"-fsigned-char",
]
if (use_lld) {
ldflags += [ "-Wl,--color-diagnostics" ]
}
if (current_os == "mac") {
# FIXME: Use -std=c++23 once Xcode's clang supports that.
cflags_cc += [ "-std=c++2b" ]
} else {
cflags_cc += [ "-std=c++23" ]
}
cflags_cc += [ "-fvisibility-inlines-hidden" ]
# Warning setup.
cflags += [
"-Wall",
"-Wextra",
"-Werror",
]
cflags += [
"-Wno-invalid-offsetof",
"-Wno-unknown-warning-option",
"-Wno-unused-parameter",
]
if (is_clang) {
cflags += [
"-Wdelete-non-virtual-dtor",
"-Wstring-conversion",
"-Wno-user-defined-literals",
"-fconstexpr-steps=16777216",
"-Wno-implicit-const-int-float-conversion",
"-Wno-vla-cxx-extension",
"-Wno-unqualified-std-cast-call",
]
} else {
cflags += [
# Disable gcc's potentially uninitialized use analysis as it presents
# lots of false positives.
"-Wno-maybe-uninitialized",
# Disable -Wredundant-move on GCC>=9. GCC wants to remove std::move
# in code like "A foo(ConvertibleToA a) { return std::move(a); }",
# but this code does not compile (or uses the copy constructor
# instead) on clang<=3.8. Clang also has a -Wredundant-move, but it
# only fires when the types match exactly, so we can keep it here.
"-Wno-redundant-move",
"-Wno-literal-suffix",
]
}
if (use_lld) {
ldflags += [ "-fuse-ld=lld" ]
}
# Deterministic build setup, see
# http://blog.llvm.org/2019/11/deterministic-builds-with-clang-and-lld.html
if (is_clang) {
cflags += [
"-no-canonical-prefixes",
"-Werror=date-time",
]
if (use_relative_paths_in_debug_info) {
cflags += [ "-fdebug-compilation-dir=." ]
}
}
if (sysroot != "") {
if (current_os != "mac" && current_os != "android") {
cflags += [ "--sysroot=" + rebase_path(sysroot, root_build_dir) ]
ldflags += [ "--sysroot=" + rebase_path(sysroot, root_build_dir) ]
}
}
if (current_os == "mac") {
sdk_path = mac_sdk_path
cflags += [
"-isysroot",
rebase_path(sdk_path, root_build_dir),
]
ldflags += [
"-isysroot",
rebase_path(sdk_path, root_build_dir),
]
} else {
cflags += [ "-fno-semantic-interposition" ]
}
if (sysroot != "" && current_os != "win" && is_clang) {
cflags += [ "-Wpoison-system-directories" ]
}
cflags_objcc = cflags_cc
}
config("no_exceptions") {
cflags_cc = [ "-fno-exceptions" ]
cflags_objcc = cflags_cc
}
config("zdefs") {
if (current_os != "mac" && current_os != "android") {
ldflags = [ "-Wl,-z,defs" ]
}
}
config("pic") {
if (current_os != "mac") {
cflags_cc = [ "-fPIC" ]
}
}

View file

@ -1,44 +0,0 @@
# All targets will get this list of configs by default.
# Targets can opt out of a config by removing it from their local configs list.
# If you're adding global flags and don't need targets to be able to opt out,
# add the flags to compiler_defaults, not to a new config.
shared_binary_target_configs = [
"//Meta/gn/build:compiler_defaults",
"//Meta/gn/build:no_exceptions",
"//Meta/gn/build:pic",
]
# Apply that default list to the binary target types.
set_defaults("executable") {
configs = shared_binary_target_configs
}
set_defaults("loadable_module") {
configs = shared_binary_target_configs
}
set_defaults("static_library") {
configs = shared_binary_target_configs
}
set_defaults("shared_library") {
configs = shared_binary_target_configs + [ "//Meta/gn/build:zdefs" ]
}
set_defaults("source_set") {
configs = shared_binary_target_configs
}
if (target_os == "") {
target_os = host_os
}
if (current_os == "") {
current_os = target_os
}
if (target_cpu == "") {
target_cpu = host_cpu
}
if (current_cpu == "") {
current_cpu = target_cpu
}
host_toolchain = "//Meta/gn/build/toolchain:unix"
set_default_toolchain(host_toolchain)

View file

@ -1,26 +0,0 @@
declare_args() {
# https://clang.llvm.org/docs/UsersManual.html#controlling-debugger-tuning
# Build with clang for debugging, tuned for a specific debugger.
# Both imply is_debug = true.
is_debug_lldb = false
is_debug_gdb = false
}
# args that depend on other args must live in a later declare_args() block.
declare_args() {
# Build for debugging. Equivalent to is_optimized=false symbol_level=2.
is_debug = is_debug_lldb || is_debug_gdb
}
declare_args() {
# Whether to build with optimizations.
is_optimized = !is_debug
if (is_debug) {
# Debug info symbol level. 0: No symbols; 1: Line numbers; 2: Full symbols.
symbol_level = 2
} else {
# Debug info symbol level. 0: No symbols; 1: Line numbers; 2: Full symbols.
symbol_level = 1
}
}

View file

@ -1,77 +0,0 @@
# Defines compiled_action().
#
# compiled_action() is like action(), except that it runs a built binary
# instead of a script.
#
# Parameters:
#
# tool (required)
# [label] Label of the tool to run. This should be an executable, and
# this label should not include a toolchain (anything in parens). This
# tool will be built for the host.
#
# outputs (required)
# [list of files] Same meaning as for action().
#
# args (required)
# [list of strings] Flags to pass to the built binary. Almost identical
# to action()'s `args`, except that `tool` is implicitly added as first
# element.
#
# depfile
# inputs
# public_configs
# visibility (all optional)
# Same meaning as for action().
#
# Example use:
#
# compiled_action("run_my_tool") {
# tool = "//tools/something:mytool"
# inputs = [ "my_input_file.txt" ]
# outputs = [ "$target_gen_dir/mysource.inc" ]
# args = [
# rebase_path(inputs[0], root_build_dir),
# rebase_path(outputs[0], root_build_dir),
# ]
# }
#
# You would typically declare your tool like this:
# if (host_toolchain == current_toolchain) {
# executable("mytool") {
# ...
# }
# }
# The if statement around the executable is optional. It means "I only care
# about this target in the host toolchain". Usually this is what you want, and
# saves unnecessarily compiling your tool for the target platform. If you
# need a target build of your tool as well, omit the if statement.
template("compiled_action") {
assert(defined(invoker.args), "must set 'args' in $target_name")
assert(defined(invoker.outputs), "must set 'outputs' in $target_name")
assert(defined(invoker.tool), "must set 'tool' in $target_name")
assert(!defined(invoker.sources),
"use 'inputs' instead of 'sources' in $target_name")
action(target_name) {
forward_variables_from(invoker,
[
"depfile",
"inputs",
"outputs",
"public_configs",
"testonly",
"visibility",
])
host_tool = invoker.tool + "($host_toolchain)"
host_executable = get_label_info(host_tool, "root_out_dir") + "/bin/" +
get_label_info(host_tool, "name")
deps = [ host_tool ]
if (defined(invoker.deps)) {
deps += invoker.deps
}
script = "//Meta/gn/build/run_compiled_binary.py"
args = [ rebase_path(host_executable, root_build_dir) ] + invoker.args
}
}

View file

@ -1,4 +0,0 @@
declare_args() {
# Location of shared cache of downloaded files
cache_path = "$root_gen_dir/Cache/"
}

View file

@ -1,88 +0,0 @@
#
# This file introduces a template for calling download_file.py
#
# download_file behaves like CMake's file(DOWNLOAD) with the addtion
# of version checking the file against a build system defined version.
#
# Parameters:
# url (required) [string]
#
# output (required) [string]
#
# version (required) [string]
# Version of the file for caching purposes
#
# version_file (reqiured) [string]
# Filename to write the version to in the filesystem
#
# cache [String]
# Directory to clear on version mismatch
#
# sha256 [String]
# Expected SHA-256 hash of the downloaded file
#
# Example use:
#
# download_file("my_tarball") {
# url = "http://example.com/xyz.tar.gz"
# output = "$root_gen_dir/MyModule/xyz.tar.gz"
# version = "1.2.3"
# version_file = "$root_gen_dir/MyModule/xyz_version.txt"
# }
#
template("download_file") {
assert(defined(invoker.url), "must set 'url' in $target_name")
assert(defined(invoker.output), "must set 'output' in $target_name")
assert(defined(invoker.version), "must set 'version' in $target_name")
assert(defined(invoker.version_file),
"must set 'version_file' in $target_name")
action(target_name) {
script = "//Meta/gn/build/download_file.py"
sources = []
if (defined(invoker.cache)) {
outputs = [
invoker.cache + "/" + invoker.output,
invoker.cache + "/" + invoker.version_file,
]
} else {
outputs = [
invoker.output,
invoker.version_file,
]
}
args = [
"-o",
rebase_path(outputs[0], root_build_dir),
"-f",
rebase_path(outputs[1], root_build_dir),
"-v",
invoker.version,
invoker.url,
]
if (defined(invoker.cache)) {
args += [
"-c",
rebase_path(invoker.cache, root_build_dir),
]
}
if (defined(invoker.sha256)) {
args += [
"-s",
invoker.sha256,
]
}
forward_variables_from(invoker,
[
"configs",
"deps",
"public_configs",
"public_deps",
"testonly",
"visibility",
])
}
}

View file

@ -1,84 +0,0 @@
#!/usr/bin/env python3
r"""Downloads a file as a build artifact.
The file is downloaded to the specified directory.
It's intended to be used for files that are cached between runs.
"""
import argparse
import hashlib
import os
import pathlib
import shutil
import sys
import tempfile
import urllib.request
def compute_sha256(path):
sha256 = hashlib.sha256()
with open(path, "rb") as file:
while True:
data = file.read(256 << 10)
if not data:
break
sha256.update(data)
return sha256.hexdigest()
def main():
parser = argparse.ArgumentParser(epilog=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter)
parser.add_argument("url", help="input url")
parser.add_argument("-o", "--output", required=True, help="output file")
parser.add_argument("-v", "--version", required=True, help="version of file to detect mismatches and redownload")
parser.add_argument("-f", "--version-file", required=True, help="filesystem location to cache version")
parser.add_argument("-c", "--cache-path", required=False, help="path for cached files to clear on version mismatch")
parser.add_argument("-s", "--sha256", required=False, help="expected SHA-256 hash of the downloaded file")
args = parser.parse_args()
version_from_file = ""
version_file = pathlib.Path(args.version_file)
if version_file.exists():
with version_file.open("r") as f:
version_from_file = f.readline().strip()
if version_from_file == args.version:
return 0
# Fresh build or version mismatch, delete old cache
if args.cache_path:
cache_path = pathlib.Path(args.cache_path)
shutil.rmtree(cache_path, ignore_errors=True)
cache_path.mkdir(parents=True)
output_file = pathlib.Path(args.output)
print(f"Downloading file {output_file} from {args.url}")
with urllib.request.urlopen(args.url) as f:
try:
with tempfile.NamedTemporaryFile(delete=False, dir=output_file.parent) as out:
out.write(f.read())
os.rename(out.name, output_file)
except IOError:
os.unlink(out.name)
if args.sha256:
actual_sha256 = compute_sha256(output_file)
if args.sha256 != actual_sha256:
print(f"SHA-256 mismatch for downloaded file {output_file}")
print(f"Expected: {args.sha256}")
print(f"Actual: {actual_sha256}")
return 1
with open(version_file, "w") as f:
f.write(args.version)
if __name__ == "__main__":
sys.exit(main())

View file

@ -1,64 +0,0 @@
# This file introduces a template for calling embed_as_string.py.
#
# embed_as_string behaves like C++23 #embed, converting an input file into
# an AK::StringView literal rather than a C-string literal. The literal will
# be placed into a global variable, optionally with a namespace wrapping it.
#
# Note that the file must not contain any tokens that need to be escaped
# in C++, or the script will fail to produce a valid C++ translation unit.
#
# Parameters:
#
# input (required) [string]
#
# output (required) [string]
#
# variable_name (required) [string]
#
# namespace (optional) [string]
#
# Example use:
#
# embed_as_string("embed_my_file") {
# input = "MyFile.txt"
# output = "$root_gen_dir/MyDirectory/MyFile.cpp"
# variable_name = "my_file_contents"
# namespace = "My::NS"
# }
template("embed_as_string") {
assert(defined(invoker.input), "must set 'input' in $target_name")
assert(defined(invoker.output), "must set 'output' in $target_name")
assert(defined(invoker.variable_name),
"must set 'variable_name' in $target_name")
action(target_name) {
script = "//Meta/embed_as_string.py"
sources = [ invoker.input ]
outputs = [ invoker.output ]
args = [
"-o",
rebase_path(outputs[0], root_build_dir),
"-n",
invoker.variable_name,
]
if (defined(invoker.namespace)) {
args += [
"-s",
invoker.namespace,
]
}
args += [ rebase_path(sources[0], root_build_dir) ]
forward_variables_from(invoker,
[
"configs",
"deps",
"public_configs",
"public_deps",
"testonly",
"visibility",
])
}
}

View file

@ -1,76 +0,0 @@
#
# This file introduces templates for calling extract_archive_contents.py
#
# extract_archive_contents.py behaves like CMake's file(ARCHIVE_EXTRACT)
#
# Parameters:
# archive (required) [string]
#
# files (required) [list of strings]
# Relative paths to the root of the archive of files to extract
#
# directory (required) [string]
# Output directory root for all the files
#
# paths (optional) [list of strings]
# Relative paths to the root of the archive of directories to extract
#
# Example use:
#
# extract_archive_contents("my_files") {
# archive = "$root_gen_dir/MyModule/xyz.tar.gz"
# directory = "$root_gen_dir/MyModule"
# files = [
# "file_one.txt",
# "file_two"
# ]
# paths = [ "some_dir" ]
# }
#
template("extract_archive_contents") {
assert(defined(invoker.archive), "must set 'archive' in $target_name")
assert(defined(invoker.files) || defined(invoker.paths),
"must set 'files' and/or 'paths' in $target_name")
assert(defined(invoker.directory), "must set 'directory' in $target_name")
action(target_name) {
script = "//Meta/gn/build/extract_archive_contents.py"
paths = []
if (defined(invoker.paths)) {
foreach(path, invoker.paths) {
paths += [ path + "/" ]
}
}
files = []
if (defined(invoker.files)) {
files = invoker.files
}
stamp_file = invoker.directory + "$target_name.stamp"
sources = invoker.archive
outputs = []
args = [
"-d",
rebase_path(invoker.directory, root_build_dir),
"-s",
rebase_path(stamp_file, root_build_dir),
rebase_path(sources[0], root_build_dir),
] + files + paths
foreach(file, files) {
outputs += [ invoker.directory + file ]
}
outputs += [ stamp_file ]
forward_variables_from(invoker,
[
"configs",
"deps",
"public_configs",
"public_deps",
"testonly",
"visibility",
])
}
}

View file

@ -1,92 +0,0 @@
#!/usr/bin/env python3
r"""Extracts files from an archive for use in the build
It's intended to be used for files that are cached between runs.
"""
import argparse
import pathlib
import sys
import tarfile
import zipfile
def extract_member(file, destination, path):
"""
Extract a single file from a ZipFile or TarFile
:param ZipFile|TarFile file: Archive object to extract from
:param Path destination: Location to write the file
:param str path: Filename to extract from archive.
"""
destination_path = destination / path
if destination_path.exists():
return
destination_path.parent.mkdir(parents=True, exist_ok=True)
if isinstance(file, tarfile.TarFile):
with file.extractfile(path) as member:
destination_path.write_text(member.read().decode("utf-8"))
else:
assert isinstance(file, zipfile.ZipFile)
with file.open(path) as member:
destination_path.write_text(member.read().decode("utf-8"))
def extract_directory(file, destination, path):
"""
Extract a directory from a ZipFile or TarFile
:param ZipFile|TarFile file: Archive object to extract from
:param Path destination: Location to write the files
:param str path: Directory name to extract from archive.
"""
destination_path = destination / path
if destination_path.exists():
return
destination_path.mkdir(parents=True, exist_ok=True)
if not isinstance(file, zipfile.ZipFile):
raise NotImplementedError
# FIXME: This loops over the entire archive len(args.paths) times. Decrease complexity
for entry in file.namelist():
if entry.startswith(path):
file.extract(entry, destination)
def main():
parser = argparse.ArgumentParser(epilog=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter)
parser.add_argument("archive", help="input archive")
parser.add_argument("paths", nargs="*", help="paths to extract from the archive")
parser.add_argument("-s", "--stamp", required=False, help="stamp file name to create after operation is done")
parser.add_argument("-d", "--destination", required=True, help="directory to write the extracted file to")
args = parser.parse_args()
archive = pathlib.Path(args.archive)
destination = pathlib.Path(args.destination)
def extract_paths(file, paths):
for path in paths:
if path.endswith("/"):
extract_directory(file, destination, path)
else:
extract_member(file, destination, path)
if tarfile.is_tarfile(archive):
with tarfile.open(archive) as f:
extract_paths(f, args.paths)
elif zipfile.is_zipfile(archive):
with zipfile.ZipFile(archive) as f:
extract_paths(f, args.paths)
else:
print(f"Unknown file type for {archive}, unable to extract {args.path}")
return 1
if args.stamp:
pathlib.Path(args.stamp).touch()
return 0
if __name__ == "__main__":
sys.exit(main())

View file

@ -1,56 +0,0 @@
#!/usr/bin/env python3
import argparse
import os
import pathlib
import subprocess
import sys
def main():
parser = argparse.ArgumentParser(description="Install vcpkg dependencies")
parser.add_argument("--cc", type=str, required=True, help="The C compiler to use")
parser.add_argument("--cxx", type=str, required=True, help="The C++ compiler to use")
parser.add_argument("--manifest", type=str, required=True, help="The vcpkg manifest to install")
parser.add_argument("--vcpkg", type=str, required=True, help="The path to the vcpkg executable")
parser.add_argument("--vcpkg-root", type=str, required=True, help="The path to the vcpkg root directory")
parser.add_argument("--vcpkg-triplet", type=str, required=True, help="The vcpkg triplet to use")
parser.add_argument("--vcpkg-overlay-triplets", type=str, help="Path to a vcpkg overlay triplets directory")
parser.add_argument("--vcpkg-binary-cache-dir", type=str, help="Path to a vcpkg binary cache directory")
parser.add_argument("--stamp-file", type=str, help="Path to a file to touch after installation")
parser.add_argument("install_directory", type=str, help="The directory to install vcpkg deps into")
args = parser.parse_args()
manifest_directory = pathlib.Path(args.manifest).parent
env = os.environ.copy()
env["CC"] = args.cc
env["CXX"] = args.cxx
vcpkg_arguments = [
args.vcpkg,
"install",
"--no-print-usage",
"--x-wait-for-lock",
f"--triplet={args.vcpkg_triplet}",
f"--vcpkg-root={args.vcpkg_root}",
f"--x-manifest-root={manifest_directory}",
f"--x-install-root={args.install_directory}",
]
if args.vcpkg_overlay_triplets:
vcpkg_arguments += [f"--overlay-triplets={args.vcpkg_overlay_triplets}"]
if args.vcpkg_binary_cache_dir:
binary_cache_dir = pathlib.Path(args.vcpkg_binary_cache_dir).absolute()
vcpkg_arguments += [f"--binarysource=clear;files,{binary_cache_dir},readwrite"]
subprocess.run(vcpkg_arguments, env=env, check=True)
if args.stamp_file:
pathlib.Path(args.stamp_file).touch()
return 0
if __name__ == "__main__":
sys.exit(main())

View file

@ -1,6 +0,0 @@
#!/usr/bin/env python3
import subprocess
import sys
sys.exit(subprocess.call(sys.argv[1:]))

View file

@ -1,43 +0,0 @@
import("//Meta/gn/build/buildflags.gni")
import("//Meta/gn/build/toolchain/compiler.gni")
import("//Meta/gn/build/vcpkg.gni")
action("install_vcpkg_manifest") {
script = "//Meta/gn/build/install_vcpkg.py"
overlay_triplet_root = "//Meta/CMake/vcpkg"
config_name = "release"
if (is_debug) {
config_name = "debug"
}
# FIXME: if (is_sanitizer) vcpkg_config_name = "sanitizer"
overlay_triplet_path = "${overlay_triplet_root}/${config_name}-triplets"
stamp_file = "${vcpkg_install_root}/.vcpkg_installed-${vcpkg_triplet}-${config_name}.stamp"
sources = [ vcpkg_manifest ]
outputs = [ stamp_file ]
args = [
"--cc",
"${host_cc}",
"--cxx",
"${host_cxx}",
"--manifest",
rebase_path(vcpkg_manifest, root_build_dir),
"--vcpkg",
rebase_path(vcpkg_binary, root_build_dir),
"--vcpkg-root",
rebase_path(vcpkg_root, root_build_dir),
"--vcpkg-triplet",
vcpkg_triplet,
"--vcpkg-overlay-triplets",
rebase_path(overlay_triplet_path, root_build_dir),
"--vcpkg-binary-cache",
rebase_path(vcpkg_binary_cache, root_build_dir),
"--stamp-file",
rebase_path(stamp_file, root_build_dir),
rebase_path(vcpkg_install_root, root_build_dir),
]
}

View file

@ -1,9 +0,0 @@
import("//Meta/gn/build/libs/third_party.gni")
third_party_dependency("avif") {
libs = [
"avif",
"dav1d",
"yuv",
]
}

View file

@ -1,10 +0,0 @@
config("crypt_config") {
visibility = [ ":crypt" ]
libs = [ "crypt" ]
}
group("crypt") {
if (current_os == "linux") {
public_configs = [ ":crypt_config" ]
}
}

View file

@ -1,24 +0,0 @@
import("//Meta/gn/build/libs/third_party.gni")
third_party_dependency("curl") {
libs = [
"curl",
"z",
"brotlidec",
"brotlicommon",
"nghttp2",
]
if (current_os == "mac") {
frameworks = [
"SystemConfiguration.framework",
"Security.framework",
"CoreFoundation.framework",
"CoreServices.framework",
]
} else {
libs += [
"ssl",
"crypto",
]
}
}

View file

@ -1,37 +0,0 @@
import("//Meta/gn/build/libs/ffmpeg/enable.gni")
declare_args() {
# Select whether to look for ffmpeg in the homebrew installation
ffmpeg_homebrew = current_os == "mac"
# Root directory for the homebrew installation
homebrew_prefix = "/opt/homebrew"
}
declare_args() {
# Root directory for the ffmpeg installation, e.g. from brew --prefix ffmpeg
ffmpeg_prefix = "/usr"
if (ffmpeg_homebrew) {
ffmpeg_prefix = "${homebrew_prefix}/opt/ffmpeg"
}
}
# FIXME: We don't build this, we pull it from the user's system
# So it doesn't follow the usual third_party_dependency pattern
config("ffmpeg_config") {
visibility = [ ":ffmpeg" ]
include_dirs = [ "${ffmpeg_prefix}/include" ]
lib_dirs = [ "${ffmpeg_prefix}/lib" ]
libs = [
"avcodec",
"avformat",
"avutil",
"swresample",
]
}
group("ffmpeg") {
if (enable_ffmpeg) {
public_configs = [ ":ffmpeg_config" ]
}
}

View file

@ -1,4 +0,0 @@
declare_args() {
# Select whether to build with ffmpeg support in LibMedia
enable_ffmpeg = true
}

View file

@ -1,5 +0,0 @@
import("//Meta/gn/build/libs/third_party.gni")
third_party_dependency("fontconfig") {
libs = [ "fontconfig" ]
}

View file

@ -1,16 +0,0 @@
import("//Meta/gn/build/libs/third_party.gni")
third_party_dependency("harfbuzz") {
libs = [
"harfbuzz",
"freetype",
"z",
"bz2",
"png16",
"brotlidec",
"brotlicommon",
]
if (current_os == "mac") {
frameworks = [ "ApplicationServices.framework" ]
}
}

View file

@ -1,9 +0,0 @@
import("//Meta/gn/build/libs/third_party.gni")
third_party_dependency("icu") {
libs = [
"icui18n",
"icuuc",
"icudata",
]
}

View file

@ -1,5 +0,0 @@
import("//Meta/gn/build/libs/third_party.gni")
third_party_dependency("jpeg") {
libs = [ "jpeg" ]
}

View file

@ -1,20 +0,0 @@
import("//Meta/gn/build/libs/third_party.gni")
third_party_dependency("jxl") {
libs = [
"jxl",
"hwy",
"brotlienc",
"brotlidec",
"brotlicommon",
"jxl_cms",
"lcms2",
]
defines = [
# FIXME: These static defines depend on whether you built jxl as static or not...
"JXL_STATIC_DEFINE",
"JXL_CMS_STATIC_DEFINE",
"HWY_STATIC_DEFINE",
"CMS_NO_REGISTER_KEYWORD",
]
}

View file

@ -1,5 +0,0 @@
import("//Meta/gn/build/libs/third_party.gni")
third_party_dependency("openssl") {
libs = [ "openssl" ]
}

View file

@ -1,9 +0,0 @@
import("//Meta/gn/build/libs/third_party.gni")
third_party_dependency("png") {
third_party_includes = [ "libpng16" ]
libs = [
"png16",
"z",
]
}

View file

@ -1,11 +0,0 @@
config("pthread_config") {
visibility = [ ":pthread" ]
libs = [ "pthread" ]
}
group("pthread") {
# On Android, bionic has built-in support for pthreads.
if (current_os != "android") {
public_configs = [ ":pthread_config" ]
}
}

View file

@ -1,13 +0,0 @@
import("//Meta/gn/build/libs/pulse/enable.gni")
config("pulseaudio_config") {
visibility = [ ":pulse" ]
libs = [ "pulse" ]
defines = [ "HAVE_PULSEAUDIO" ]
}
group("pulse") {
if (enable_pulseaudio) {
public_configs = [ ":pulseaudio_config" ]
}
}

View file

@ -1,4 +0,0 @@
declare_args() {
# Select whether to build with PulseAudio support in LibMedia
enable_pulseaudio = current_os == "linux"
}

View file

@ -1,6 +0,0 @@
import("//Meta/gn/build/libs/third_party.gni")
third_party_dependency("simdutf") {
libs = [ "simdutf" ]
extra_public_configs = [ "//Meta/gn/build:pic" ]
}

View file

@ -1,79 +0,0 @@
import("//Meta/gn/build/libs/third_party.gni")
third_party_dependency("skia") {
third_party_includes = [ "skia" ]
libs = [
"skia",
"fontconfig",
"expat",
"turbojpeg",
"jpeg",
"harfbuzz-subset",
"harfbuzz",
"freetype",
"bz2",
"brotlidec",
"brotlicommon",
"png16",
"z",
"webpdecoder",
"webpdemux",
"webpmux",
"webp",
"sharpyuv",
]
if (current_os == "mac") {
frameworks = [
"ApplicationServices.framework",
"OpenGL.framework",
"AppKit.framework",
"Metal.framework",
"Foundation.framework",
]
} else {
libs += [ "GL" ]
}
defines = [
"SK_CODEC_DECODES_BMP",
"SK_CODEC_DECODES_WBMP",
"SK_ENABLE_PRECOMPILE",
"SK_GANESH",
"SK_DISABLE_TRACING",
"SK_USE_PERFETTO",
"SK_GAMMA_APPLY_TO_A8",
"SK_ENABLE_AVX512_OPTS",
"SK_TYPEFACE_FACTORY_FREETYPE",
"SK_FONTMGR_ANDROID_AVAILABLE",
"SK_FONTMGR_FREETYPE_DIRECTORY_AVAILABLE",
"SK_FONTMGR_FREETYPE_EMBEDDED_AVAILABLE",
"SK_FONTMGR_FREETYPE_EMPTY_AVAILABLE",
"SK_FONTMGR_FONTCONFIG_AVAILABLE",
"SK_GL",
"SK_SUPPORT_PDF",
"SK_CODEC_DECODES_JPEG",
"SK_CODEC_DECODES_ICO",
"SK_CODEC_DECODES_PNG",
"SK_CODEC_DECODES_RAW",
"SK_CODEC_DECODES_WEBP",
"SK_HAS_WUFFS_LIBRARY",
"SK_CODEC_DECODES_GIF",
"SK_XML",
]
if (current_os == "mac") {
defines += [
"SK_ASSUME_GL=1",
"SK_ENABLE_API_AVAILABLE",
"SK_TYPEFACE_FACTORY_CORETEX",
"SK_FONTMGR_CORETEXT_AVAILABLE",
"SK_METAL",
]
} else if (current_os == "linux") {
defines += [
"SK_R32_SHIFT=16",
"SK_USE_VMA",
"SK_VULKAN",
]
}
}

View file

@ -1,5 +0,0 @@
import("//Meta/gn/build/libs/third_party.gni")
third_party_dependency("sqlite3") {
libs = [ "sqlite3" ]
}

View file

@ -1,57 +0,0 @@
import("//Meta/gn/build/vcpkg.gni")
declare_args() {
# Whether to use vcpkg for dependency management
use_vcpkg = true
}
declare_args() {
# Location to find installed third_party headers and libraries
third_party_prefix = "/usr"
if (use_vcpkg) {
third_party_prefix = "${vcpkg_install_root}/${vcpkg_triplet}"
}
}
declare_args() {
# Library directory for third_party libraries
third_party_lib_dir = third_party_prefix + "/lib"
# Include directory for third_party headers
third_party_include_dir = third_party_prefix + "/include"
}
template("third_party_dependency") {
config("${target_name}_config") {
forward_variables_from(invoker, "*")
visibility = [ ":${target_name}" ]
include_dirs = [ "$third_party_include_dir" ]
if (defined(third_party_includes)) {
foreach(dir, third_party_includes) {
include_dirs += [ "$third_party_include_dir/$dir" ]
}
}
lib_dirs = [ "$third_party_lib_dir" ]
not_needed([
"enable",
"extra_public_configs",
])
}
group(target_name) {
forward_variables_from(invoker,
[
"enable",
"extra_public_configs",
])
if (!defined(enable) || enable) {
public_configs = [ ":${target_name}_config" ]
if (use_vcpkg) {
deps = [ "//Meta/gn/build/libs:install_vcpkg_manifest" ]
}
}
if (defined(extra_public_configs)) {
public_configs += extra_public_configs
}
}
}

View file

@ -1,8 +0,0 @@
import("//Meta/gn/build/libs/third_party.gni")
import("//Meta/gn/build/libs/vulkan/enable.gni")
third_party_dependency("vulkan") {
libs = [ "vulkan" ]
defines = [ "USE_VULKAN=1" ]
enable = enable_vulkan
}

View file

@ -1,4 +0,0 @@
declare_args() {
# Select whether to build with Vulkan support
enable_vulkan = current_os == "linux"
}

View file

@ -1,12 +0,0 @@
import("//Meta/gn/build/libs/third_party.gni")
third_party_dependency("webp") {
third_party_includes = [ "webp" ]
libs = [
"webp",
"sharpyuv",
"webpdecoder",
"webpdemux",
"webpmux",
]
}

View file

@ -1,11 +0,0 @@
import("//Meta/gn/build/libs/third_party.gni")
third_party_dependency("woff2") {
third_party_includes = [ "woff2" ]
libs = [
"woff2common",
"brotlidec",
"brotlicommon",
"woff2dec",
]
}

View file

@ -1,37 +0,0 @@
#
# This file introduces a template for compiling Apple platform interface
# builder files.
#
# The output files will be placed in $target_gen_dir with the source name
# suffix-replaced from "Foo.xib" to "Foo.nib"
#
# Example use:
#
# compile_xib_resources("my_nibs") {
# sources = [
# "A.xib",
# "B.xib",
# ]
# }
#
template("compile_xib_resources") {
action_foreach(target_name) {
forward_variables_from(invoker, [ "sources" ])
script = "//Meta/gn/build/invoke_process_with_args.py"
outputs = [ "$target_gen_dir/{{source_name_part}}.nib" ]
args = [
"ibtool",
"--errors",
"--warnings",
"--notices",
"--output-format",
"human-readable-text",
"--compile",
rebase_path(target_gen_dir, root_build_dir) + "/{{source_name_part}}.nib",
"{{source}}",
]
}
}

View file

@ -1,22 +0,0 @@
import("//Meta/gn/build/sysroot.gni")
if (sysroot == "") {
declare_args() {
# Set to true if you don't have Xcode installed, but do have the commandline
# tools.
mac_use_commandline_tools_sdk = false
}
# Location of the mac sdk.
# The correct way to do this is to call xcrun
# (https://reviews.llvm.org/D70835), but that makes `gn gen` take twice as
# long and almost everyone has Xcode installed. So require that people who
# don't have it installed set a gn arg.
if (mac_use_commandline_tools_sdk) {
mac_sdk_path = "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk"
} else {
mac_sdk_path = "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk"
}
} else {
mac_sdk_path = sysroot + "/MacOSX.sdk"
}

View file

@ -1,8 +0,0 @@
#!/usr/bin/env python3
"""Runs a built binary."""
import subprocess
import sys
# Prefix with ./ to run built binary, not arbitrary stuff from PATH.
sys.exit(subprocess.call(["./" + sys.argv[1]] + sys.argv[2:]))

View file

@ -1,4 +0,0 @@
declare_args() {
# Path of sysroot to use.
sysroot = ""
}

View file

@ -1,165 +0,0 @@
import("//Meta/gn/build/toolchain/compiler.gni")
unix_copy_command = "ln -f {{source}} {{output}} 2>/dev/null || (rm -rf {{output}} && cp -af {{source}} {{output}})"
template("unix_toolchain") {
toolchain(target_name) {
ar = "ar"
cc = "cc"
cxx = "c++"
ld = cxx
forward_variables_from(invoker.toolchain_args, "*")
forward_variables_from(invoker, "*")
not_needed([
"current_cpu",
"cc",
"is_clang",
"use_lld",
])
tool("cc") {
if (enable_ccache) {
command_launcher = "ccache"
}
depfile = "{{output}}.d"
command = "$cc -MMD -MF $depfile -o {{output}} -c {{source}} {{defines}} {{include_dirs}} {{cflags}} {{cflags_c}}"
depsformat = "gcc"
description = "CC {{output}}"
outputs = [ "{{source_out_dir}}/{{label_name}}.{{source_name_part}}.o" ]
}
tool("cxx") {
if (enable_ccache) {
command_launcher = "ccache"
}
depfile = "{{output}}.d"
command = "$cxx -MMD -MF $depfile -o {{output}} -c {{source}} {{defines}} {{include_dirs}} {{cflags}} {{cflags_cc}}"
depsformat = "gcc"
description = "CXX {{output}}"
outputs = [ "{{source_out_dir}}/{{label_name}}.{{source_name_part}}.o" ]
}
tool("objcxx") {
if (enable_ccache) {
command_launcher = "ccache"
}
depfile = "{{output}}.d"
command = "$cxx -MMD -MF $depfile -o {{output}} -c {{source}} {{defines}} {{include_dirs}} {{cflags}} {{cflags_objcc}}"
depsformat = "gcc"
description = "OBJCXX {{output}}"
outputs = [ "{{source_out_dir}}/{{label_name}}.{{source_name_part}}.o" ]
}
tool("asm") {
if (enable_ccache) {
command_launcher = "ccache"
}
depfile = "{{output}}.d"
command = "$cc -MMD -MF $depfile -o {{output}} -c {{source}} {{defines}} {{include_dirs}} {{asmflags}}"
depsformat = "gcc"
description = "ASM {{output}}"
outputs = [ "{{source_out_dir}}/{{label_name}}.{{source_name_part}}.o" ]
}
tool("alink") {
if (current_os == "ios" || current_os == "mac") {
command = "libtool -D -static -no_warning_for_no_symbols {{arflags}} -o {{output}} {{inputs}}"
not_needed([ "ar" ])
} else {
# Remove the output file first so that ar doesn't try to modify the
# existing file.
command =
"rm -f {{output}} && $ar rcsD {{arflags}} {{output}} {{inputs}}"
}
description = "AR {{output}}"
outputs = [ "{{output_dir}}/{{target_output_name}}.a" ]
output_prefix = "liblagom-"
default_output_dir = "{{root_out_dir}}/lib"
}
# Make these apply to all tools below.
lib_switch = "-l"
lib_dir_switch = "-L"
tool("solink") {
outfile = "{{output_dir}}/{{target_output_name}}{{output_extension}}"
if (current_os == "ios" || current_os == "mac") {
command = "$ld -shared {{ldflags}} -o $outfile {{inputs}} {{libs}} {{frameworks}} -Wl,-install_name,@rpath/{{target_output_name}}{{output_extension}}"
default_output_extension = ".dylib"
} else {
command = "$ld -shared {{ldflags}} -Wl,-soname,{{target_output_name}}{{output_extension}} -Wl,-rpath,\\\$ORIGIN -o $outfile {{inputs}} {{libs}}"
default_output_extension = ".so"
}
description = "SOLINK $outfile"
outputs = [ outfile ]
output_prefix = "liblagom-"
default_output_dir = "{{root_out_dir}}/lib"
}
tool("solink_module") {
outfile = "{{output_dir}}/{{target_output_name}}{{output_extension}}"
if (current_os == "ios" || current_os == "mac") {
command = "$ld -shared {{ldflags}} -Wl,-flat_namespace -Wl,-undefined,suppress -o $outfile {{inputs}} {{libs}} {{frameworks}} -Wl,-install_name,@rpath/{{target_output_name}}{{output_extension}}"
default_output_extension = ".dylib"
} else {
command = "$ld -shared {{ldflags}} -Wl,-soname,{{target_output_name}}{{output_extension}} -Wl,-rpath,\\\$ORIGIN -o $outfile {{inputs}} {{libs}}"
default_output_extension = ".so"
}
description = "SOLINK $outfile"
outputs = [ outfile ]
output_prefix = "lagom-"
default_output_dir = "{{root_out_dir}}/lib"
}
tool("link") {
if (enable_ccache) {
command_launcher = "ccache"
}
outfile = "{{output_dir}}/{{target_output_name}}{{output_extension}}"
if (current_os == "ios" || current_os == "mac") {
command = "$ld {{ldflags}} -o $outfile {{inputs}} {{libs}} {{frameworks}} -Wl,-rpath,@executable_path/../lib"
} else {
command = "$ld {{ldflags}} -o $outfile -Wl,--start-group {{inputs}} -Wl,--end-group -Wl,-rpath,\\\$ORIGIN/../lib {{libs}}"
}
description = "LINK $outfile"
outputs = [ outfile ]
default_output_dir = "{{root_out_dir}}/bin"
}
tool("copy") {
command = unix_copy_command
description = "COPY {{source}} {{output}}"
}
if (current_os == "ios" || current_os == "mac") {
tool("copy_bundle_data") {
# https://github.com/nico/hack/blob/master/notes/copydir.md
_copydir = "cd {{source}} && " +
"find . | cpio -pdl \"\$OLDPWD\"/{{output}} 2>/dev/null"
command = "rm -rf {{output}} && if [[ -d {{source}} ]]; then " +
_copydir + "; else " + unix_copy_command + "; fi"
description = "COPY_BUNDLE_DATA {{source}} {{output}}"
}
tool("compile_xcassets") {
command = "false"
description = "The Ladybird build doesn't use any xcasset files"
}
}
tool("stamp") {
command = "touch {{output}}"
description = "STAMP {{output}}"
}
}
}
unix_toolchain("unix") {
toolchain_args = {
current_os = host_os
cc = host_cc
cxx = host_cxx
ld = host_cxx
}
}

View file

@ -1,17 +0,0 @@
declare_args() {
# Set to true when host compiler is clang so that clang flags will be passed to it
is_clang = current_os == "mac"
# Enable setting -fuse-ld and other flags for using the lld linker.
# Should not be set on macOS when using the default system compiler.
use_lld = false
# Use ccache as a compiler launcher for compile and link jobs
enable_ccache = true
# C compiler for native builds
host_cc = "cc"
# C++ compiler for native builds
host_cxx = "c++"
}

View file

@ -1,32 +0,0 @@
declare_args() {
# Root directory for vcpkg port files. Should be a checkout of microsoft/vcpkg.
vcpkg_root = "//Toolchain/Tarballs/vcpkg"
# The os name to use for the default vcpkg triplet.
# If vcpkg_triplet is explicitly set, this is ignored.
vcpkg_os = current_os
if (current_os == "mac") {
vcpkg_os = "osx"
} else if (current_os == "win") {
vcpkg_os = "windows"
}
# Location to cache vcpkg build artifacts.
vcpkg_binary_cache = "//Toolchain/Build/vcpkg-binary-cache"
# Path to the vcpkg manifest file that describes all the vcpkg dependencies of the project
vcpkg_manifest = "//vcpkg.json"
# The directory to install vcpkg dependencies into.
vcpkg_install_root = "${root_build_dir}/vcpkg_installed"
}
declare_args() {
# Path to the vcpkg-tool binary, as bootstrapped in the vcpkg root directory.
vcpkg_binary = "${vcpkg_root}/vcpkg"
}
declare_args() {
# The vcpkg triplet to use. If not set, it is derived from the current_os and current_cpu.
vcpkg_triplet = "${current_cpu}-${vcpkg_os}"
}

View file

@ -1,50 +0,0 @@
# This file introduces a template for calling write_cmake_config.py.
#
# write_cmake_config behaves like CMake's configure_file(), but runs at build
# time, not at generator time. See write_cmake_config.py for details.
#
# Parameters:
#
# input (required) [string]
#
# output (required) [string]
#
# values (required) [list of strings]
# Each entry is a '='-separated key-value pair used for substitution.
#
# Example use:
#
# write_cmake_config("attributes_compat_func_gen") {
# input = "Version.inc.in"
# output = "$root_gen_dir/clang/include/clang/Basic/Version.inc",
# values = [
# "CLANG_VERSION=$llvm_version",
# ]
# }
template("write_cmake_config") {
assert(defined(invoker.input), "must set 'input' in $target_name")
assert(defined(invoker.output), "must set 'output' in $target_name")
assert(defined(invoker.values), "must set 'values' in $target_name")
action(target_name) {
script = "//Meta/gn/build/write_cmake_config.py"
sources = [ invoker.input ]
outputs = [ invoker.output ]
args = [
"-o",
rebase_path(outputs[0], root_build_dir),
rebase_path(sources[0], root_build_dir),
] + invoker.values
forward_variables_from(invoker,
[
"configs",
"deps",
"public_configs",
"public_deps",
"visibility",
])
}
}

View file

@ -1,117 +0,0 @@
#!/usr/bin/env python3
r"""Emulates the bits of CMake's configure_file() function needed in serenity.
The CMake build uses configure_file() for several things. This emulates that
function for the GN build. In the GN build, this runs at build time instead
of at generator time.
Takes a list of KEY=VALUE pairs (where VALUE can be empty).
The sequence `\` `n` in each VALUE is replaced by a newline character.
On each line, replaces '${KEY}' or '@KEY@' with VALUE.
Then, handles these special cases (note that FOO= sets the value of FOO to the
empty string, which is falsy, but FOO=0 sets it to '0' which is truthy):
1.) #cmakedefine01 FOO
Checks if key FOO is set to a truthy value, and depending on that prints
one of the following two lines:
#define FOO 1
#define FOO 0
2.) #cmakedefine FOO [...]
Checks if key FOO is set to a truthy value, and depending on that prints
one of the following two lines:
#define FOO [...]
/* #undef FOO */
Fails if any of the KEY=VALUE arguments aren't needed for processing the
input file, or if the input file references keys that weren't passed in.
"""
import argparse
import os
import re
import sys
def main():
parser = argparse.ArgumentParser(epilog=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter)
parser.add_argument("input", help="input file")
parser.add_argument("values", nargs="*", help="several KEY=VALUE pairs")
parser.add_argument("-o", "--output", required=True, help="output file")
args = parser.parse_args()
values = {}
for value in args.values:
key, val = value.split("=", 1)
if key in values:
print('duplicate key "%s" in args' % key, file=sys.stderr)
return 1
values[key] = val.replace("\\n", "\n")
unused_values = set(values.keys())
# Matches e.g. '${FOO}' or '@FOO@' and captures FOO in group 1 or 2.
var_re = re.compile(r"\$\{([^}]*)\}|@([^@]*)@")
with open(args.input) as f:
in_lines = f.readlines()
out_lines = []
for in_line in in_lines:
def repl(m):
key = m.group(1) or m.group(2)
unused_values.discard(key)
return values[key]
in_line = var_re.sub(repl, in_line)
if in_line.startswith("#cmakedefine01 ") or in_line.startswith("# cmakedefine01"):
in_line = in_line.replace("# cmakedefine01", "#cmakedefine01")
_, var = in_line.split()
if values[var] == "0":
print('error: "%s=0" used with #cmakedefine01 %s' % (var, var))
print(" '0' evaluates as truthy with #cmakedefine01")
print(' use "%s=" instead' % var)
return 1
in_line = "#define %s %d\n" % (var, 1 if values[var] else 0)
unused_values.discard(var)
elif in_line.startswith("#cmakedefine "):
_, var = in_line.split(None, 1)
try:
var, val = var.split(None, 1)
in_line = "#define %s %s" % (var, val) # val ends in \n.
except ValueError:
var = var.rstrip()
in_line = "#define %s\n" % var
if not values[var]:
in_line = "/* #undef %s */\n" % var
unused_values.discard(var)
out_lines.append(in_line)
if unused_values:
print("unused values args:", file=sys.stderr)
print(" " + "\n ".join(unused_values), file=sys.stderr)
return 1
output = "".join(out_lines)
leftovers = var_re.findall(output)
if leftovers:
print("unprocessed values:\n", "\n".join([x[0] or x[1] for x in leftovers]), file=sys.stderr)
return 1
def read(filename):
with open(filename) as f:
return f.read()
if not os.path.exists(args.output) or read(args.output) != output:
with open(args.output, "w") as f:
f.write(output)
os.chmod(args.output, os.stat(args.input).st_mode & 0o777)
if __name__ == "__main__":
sys.exit(main())

View file

@ -1,306 +0,0 @@
import("//Meta/gn/build/write_cmake_config.gni")
config("ak_headers") {
include_dirs = [
"//",
"$root_gen_dir",
]
}
shared_library("AK") {
output_name = "ak"
public_configs = [ ":ak_headers" ]
public_deps = [
":ak_backtrace_gen",
":ak_debug_gen",
]
deps = [ "//Meta/gn/build/libs/simdutf" ]
sources = [
"AllOf.h",
"AnyOf.h",
"Array.h",
"Assertions.cpp",
"Assertions.h",
"Atomic.h",
"AtomicRefCounted.h",
"Badge.h",
"Base64.cpp",
"Base64.h",
"BigIntBase.h",
"BinaryHeap.h",
"BinarySearch.h",
"BitCast.h",
"BitStream.h",
"Bitmap.h",
"BitmapView.h",
"BufferedStream.h",
"BuiltinWrappers.h",
"BumpAllocator.h",
"ByteBuffer.h",
"ByteReader.h",
"ByteString.cpp",
"ByteString.h",
"ByteStringImpl.cpp",
"ByteStringImpl.h",
"COWVector.h",
"CharacterTypes.h",
"Checked.h",
"CheckedFormatString.h",
"CircularBuffer.cpp",
"CircularBuffer.h",
"CircularQueue.h",
"Concepts.h",
"ConstrainedStream.cpp",
"ConstrainedStream.h",
"CopyOnWrite.h",
"CountingStream.cpp",
"CountingStream.h",
"DateConstants.h",
"DefaultDelete.h",
"Demangle.h",
"Diagnostics.h",
"DisjointChunks.h",
"DistinctNumeric.h",
"DoublyLinkedList.h",
"Endian.h",
"EnumBits.h",
"Enumerate.h",
"Error.cpp",
"Error.h",
"Find.h",
"FixedArray.h",
"FixedPoint.h",
"FloatingPoint.h",
"FloatingPointStringConversions.cpp",
"FloatingPointStringConversions.h",
"FlyString.cpp",
"FlyString.h",
"Format.cpp",
"Format.h",
"Forward.h",
"Function.h",
"GenericLexer.cpp",
"GenericLexer.h",
"GenericShorthands.h",
"HashFunctions.h",
"HashMap.h",
"HashTable.h",
"Hex.cpp",
"Hex.h",
"IDAllocator.h",
"IPv4Address.h",
"IPv6Address.h",
"InsertionSort.h",
"IntegralMath.h",
"IntrusiveDetails.h",
"IntrusiveList.h",
"IntrusiveListRelaxedConst.h",
"IntrusiveRedBlackTree.h",
"IterationDecision.h",
"Iterator.h",
"JsonArray.h",
"JsonArraySerializer.h",
"JsonObject.cpp",
"JsonObject.h",
"JsonObjectSerializer.h",
"JsonParser.cpp",
"JsonParser.h",
"JsonValue.cpp",
"JsonValue.h",
"LEB128.h",
"LexicalPath.cpp",
"LexicalPath.h",
"LsanSuppressions.h",
"Math.h",
"MaybeOwned.h",
"MemMem.h",
"Memory.h",
"MemoryStream.cpp",
"MemoryStream.h",
"NeverDestroyed.h",
"Noncopyable.h",
"NonnullOwnPtr.h",
"NonnullRefPtr.h",
"NumberFormat.cpp",
"NumberFormat.h",
"NumericLimits.h",
"OptionParser.cpp",
"OptionParser.h",
"Optional.h",
"OwnPtr.h",
"Platform.h",
"Queue.h",
"QuickSelect.h",
"QuickSort.h",
"Random.cpp",
"Random.h",
"RedBlackTree.h",
"RefCounted.h",
"RefPtr.h",
"Result.h",
"ReverseIterator.h",
"SIMD.h",
"SIMDExtras.h",
"SIMDMath.h",
"ScopeGuard.h",
"ScopeLogger.h",
"ScopedValueRollback.h",
"SegmentedVector.h",
"Singleton.h",
"SinglyLinkedList.h",
"SinglyLinkedListSizePolicy.h",
"SourceGenerator.h",
"SourceLocation.h",
"Span.h",
"Stack.h",
"StackInfo.cpp",
"StackInfo.h",
"Statistics.h",
"StdLibExtraDetails.h",
"StdLibExtras.h",
"Stream.cpp",
"Stream.h",
"String.cpp",
"String.h",
"StringBase.cpp",
"StringBase.h",
"StringBuilder.cpp",
"StringBuilder.h",
"StringData.h",
"StringFloatingPointConversions.cpp",
"StringFloatingPointConversions.h",
"StringHash.h",
"StringUtils.cpp",
"StringUtils.h",
"StringView.cpp",
"StringView.h",
"TemporaryChange.h",
"Time.cpp",
"Time.h",
"Traits.h",
"Trie.h",
"Try.h",
"Tuple.h",
"TypeCasts.h",
"TypeList.h",
"TypedTransfer.h",
"Types.h",
"UFixedBigInt.h",
"UFixedBigIntDivision.h",
"UnicodeUtils.h",
"Utf16View.cpp",
"Utf16View.h",
"Utf32View.cpp",
"Utf32View.h",
"Utf8View.cpp",
"Utf8View.h",
"Variant.h",
"Vector.h",
"WeakPtr.h",
"Weakable.h",
"kmalloc.cpp",
"kmalloc.h",
]
}
write_cmake_config("ak_debug_gen") {
input = "Debug.h.in"
output = "$root_gen_dir/AK/Debug.h"
values = [
"AUDIO_DEBUG=",
"BINDINGS_GENERATOR_DEBUG=",
"BMP_DEBUG=",
"CACHE_DEBUG=",
"CALLBACK_MACHINE_DEBUG=",
"CANVAS_RENDERING_CONTEXT_2D_DEBUG=",
"CRYPTO_DEBUG=",
"CSS_LOADER_DEBUG=",
"CSS_PARSER_DEBUG=",
"CSS_TOKENIZER_DEBUG=",
"CSS_TRANSITIONS_DEBUG=",
"EDITOR_DEBUG=",
"EMOJI_DEBUG=",
"FILE_WATCHER_DEBUG=",
"FLAC_ENCODER_DEBUG=",
"GENERATE_DEBUG=",
"GHASH_PROCESS_DEBUG=",
"GIF_DEBUG=",
"HEAP_DEBUG=",
"HIGHLIGHT_FOCUSED_FRAME_DEBUG=",
"HTML_SCRIPT_DEBUG=",
"HTTPJOB_DEBUG=",
"HUNKS_DEBUG=",
"ICO_DEBUG=",
"IDL_DEBUG=",
"IMAGE_DECODER_DEBUG=",
"IMAGE_LOADER_DEBUG=",
"JOB_DEBUG=",
"JS_BYTECODE_DEBUG=",
"JS_MODULE_DEBUG=",
"LEXER_DEBUG=",
"LIBWEB_CSS_ANIMATION_DEBUG=",
"LIBWEB_CSS_DEBUG=",
"LIBWEB_WASM_DEBUG=",
"LINE_EDITOR_DEBUG=",
"LZW_DEBUG=",
"MACH_PORT_DEBUG=",
"MATROSKA_DEBUG=",
"MATROSKA_TRACE_DEBUG=",
"NETWORKJOB_DEBUG=",
"NT_DEBUG=",
"OPENTYPE_GPOS_DEBUG=",
"HTML_PARSER_DEBUG=",
"PATH_DEBUG=",
"PLAYBACK_MANAGER_DEBUG=",
"PNG_DEBUG=",
"PROMISE_DEBUG=",
"REGEX_DEBUG=",
"REQUESTSERVER_DEBUG=",
"RESOURCE_DEBUG=",
"RSA_PARSE_DEBUG=",
"SHARED_QUEUE_DEBUG=",
"SPAM_DEBUG=",
"STYLE_INVALIDATION_DEBUG=",
"SYNTAX_HIGHLIGHTING_DEBUG=",
"TEXTEDITOR_DEBUG=",
"TIFF_DEBUG=",
"TIME_ZONE_DEBUG=",
"TLS_DEBUG=",
"TOKENIZER_TRACE_DEBUG=",
"URL_PARSER_DEBUG=",
"UTF8_DEBUG=",
"VPX_DEBUG=",
"WASI_DEBUG=",
"WASI_FINE_GRAINED_DEBUG=",
"WASM_BINPARSER_DEBUG=",
"WASM_TRACE_DEBUG=",
"WASM_VALIDATOR_DEBUG=",
"WEBDRIVER_DEBUG=",
"WEBDRIVER_ROUTE_DEBUG=",
"WEBGL_CONTEXT_DEBUG=",
"WEBVIEW_PROCESS_DEBUG=",
"WEB_FETCH_DEBUG=",
"WEB_WORKER_DEBUG=",
"WEBP_DEBUG=",
"XML_PARSER_DEBUG=",
]
}
write_cmake_config("ak_backtrace_gen") {
input = "Backtrace.h.in"
output = "$root_gen_dir/AK/Backtrace.h"
if (current_os == "win") {
values = [
"Backtrace_FOUND=",
"Backtrace_HEADER=",
]
} else {
values = [
"Backtrace_FOUND=1",
"Backtrace_HEADER=execinfo.h",
]
}
}

View file

@ -1,18 +0,0 @@
import("//Meta/gn/build/toolchain/compiler.gni")
group("default") {
deps = [
"//Ladybird",
"//Meta/Lagom/Tools/CodeGenerators/IPCCompiler",
"//Tests",
"//Userland/Libraries/LibWeb",
"//Userland/Utilities:js",
]
testonly = true
}
# A pool called "console" in the root BUILD.gn is magic and represents ninja's
# built-in console pool. (Requires a GN with `gn --version` >= 552353.)
pool("console") {
depth = 1
}

View file

@ -1,552 +0,0 @@
import("//Ladybird/compile_qt_resource_file.gni")
import("//Ladybird/enable_appkit.gni")
import("//Ladybird/enable_qt.gni")
import("//Ladybird/link_qt.gni")
import("//Ladybird/moc_qt_objects.gni")
group("Ladybird") {
if (current_os == "mac") {
deps = [ ":Ladybird.app" ]
} else {
deps = [ ":ladybird_executable" ]
}
}
moc_qt_objects("generate_moc") {
sources = [
"Qt/Application.h",
"Qt/AutoComplete.h",
"Qt/BrowserWindow.h",
"Qt/EventLoopImplementationQtEventTarget.h",
"Qt/FindInPageWidget.h",
"Qt/InspectorWidget.h",
"Qt/LocationEdit.h",
"Qt/Settings.h",
"Qt/SettingsDialog.h",
"Qt/Tab.h",
"Qt/TabBar.h",
"Qt/TaskManagerWindow.h",
"Qt/WebContentView.h",
]
}
compile_qt_resource_file("compile_resource_file") {
sources = [ "Qt/ladybird.qrc" ]
}
link_qt("ladybird_qt_components") {
qt_components = [
"Core",
"Gui",
"Widgets",
]
}
config("ladybird_config") {
include_dirs = [
"//Userland",
"//Userland/Applications",
"//Userland/Services",
]
}
ladybird_helper_processes = [
"ImageDecoder",
"RequestServer",
"WebContent",
"WebWorker",
]
executable("ladybird_executable") {
configs += [ ":ladybird_config" ]
data_deps = ladybird_helper_processes
deps = [
"//AK",
"//Userland/Libraries/LibCore",
"//Userland/Libraries/LibFileSystem",
"//Userland/Libraries/LibGfx",
"//Userland/Libraries/LibIPC",
"//Userland/Libraries/LibImageDecoderClient",
"//Userland/Libraries/LibJS",
"//Userland/Libraries/LibMain",
"//Userland/Libraries/LibRequests",
"//Userland/Libraries/LibURL",
"//Userland/Libraries/LibWeb",
"//Userland/Libraries/LibWebView",
]
sources = [
"HelperProcess.cpp",
"Utilities.cpp",
]
if (enable_qt) {
configs += [ ":ladybird_qt_components" ]
sources += [
"Qt/Application.cpp",
"Qt/AutoComplete.cpp",
"Qt/BrowserWindow.cpp",
"Qt/EventLoopImplementationQt.cpp",
"Qt/EventLoopImplementationQtEventTarget.cpp",
"Qt/FindInPageWidget.cpp",
"Qt/Icon.cpp",
"Qt/InspectorWidget.cpp",
"Qt/LocationEdit.cpp",
"Qt/Settings.cpp",
"Qt/SettingsDialog.cpp",
"Qt/StringUtils.cpp",
"Qt/TVGIconEngine.cpp",
"Qt/Tab.cpp",
"Qt/TabBar.cpp",
"Qt/TaskManagerWindow.cpp",
"Qt/WebContentView.cpp",
"Qt/main.cpp",
]
sources += get_target_outputs(":generate_moc") +
get_target_outputs(":compile_resource_file")
deps += [
":compile_resource_file",
":generate_moc",
]
} else if (enable_appkit) {
sources += [
"AppKit/Application/Application.mm",
"AppKit/Application/ApplicationDelegate.mm",
"AppKit/Application/EventLoopImplementation.mm",
"AppKit/UI/Event.mm",
"AppKit/UI/Inspector.mm",
"AppKit/UI/InspectorController.mm",
"AppKit/UI/LadybirdWebView.mm",
"AppKit/UI/LadybirdWebViewBridge.cpp",
"AppKit/UI/Palette.mm",
"AppKit/UI/SearchPanel.mm",
"AppKit/UI/Tab.mm",
"AppKit/UI/TabController.mm",
"AppKit/UI/TaskManager.mm",
"AppKit/UI/TaskManagerController.mm",
"AppKit/Utilities/Conversions.mm",
"AppKit/main.mm",
]
deps += [ "//Userland/Libraries/LibUnicode" ]
cflags_objcc = [
"-fobjc-arc",
"-Wno-deprecated-anon-enum-enum-conversion", # Required for CGImageCreate
]
include_dirs = [
"AppKit",
"//Userland",
]
frameworks = [
"Cocoa.framework",
"UniformTypeIdentifiers.framework",
]
}
if (current_os == "mac") {
sources += [ "MachPortServer.cpp" ]
deps += [ "//Userland/Libraries/LibThreading" ]
} else {
data_deps += [
":ladybird_copy_about_pages",
":ladybird_copy_config_resources",
":ladybird_copy_fonts",
":ladybird_copy_icons_128x128",
":ladybird_copy_icons_16x16",
":ladybird_copy_icons_32x32",
":ladybird_copy_icons_48x48",
":ladybird_copy_icons_browser",
":ladybird_copy_themes",
":ladybird_copy_web_resources",
":ladybird_copy_web_templates",
]
}
output_name = "Ladybird"
}
executable("headless-browser") {
include_dirs = [ "//Userland/Services" ]
configs += [ ":ladybird_config" ]
deps = [
"//AK",
"//Userland/Libraries/LibCore",
"//Userland/Libraries/LibCrypto",
"//Userland/Libraries/LibDiff",
"//Userland/Libraries/LibFileSystem",
"//Userland/Libraries/LibGfx",
"//Userland/Libraries/LibHTTP",
"//Userland/Libraries/LibIPC",
"//Userland/Libraries/LibImageDecoderClient",
"//Userland/Libraries/LibJS",
"//Userland/Libraries/LibMain",
"//Userland/Libraries/LibRequests",
"//Userland/Libraries/LibTLS",
"//Userland/Libraries/LibURL",
"//Userland/Libraries/LibWeb",
"//Userland/Libraries/LibWebSocket",
"//Userland/Libraries/LibWebView",
]
data_deps = ladybird_helper_processes
sources = [
"//Userland/Utilities/headless-browser.cpp",
"HelperProcess.cpp",
"Utilities.cpp",
]
}
fonts = [
"//Base/res/fonts/SerenitySans-Regular.ttf",
"//Base/res/fonts/NotoEmoji.ttf",
]
icons_16x16 = [
"//Base/res/icons/16x16/app-system-monitor.png",
"//Base/res/icons/16x16/audio-volume-high.png",
"//Base/res/icons/16x16/audio-volume-muted.png",
"//Base/res/icons/16x16/close-tab.png",
"//Base/res/icons/16x16/edit-copy.png",
"//Base/res/icons/16x16/filetype-css.png",
"//Base/res/icons/16x16/filetype-folder-open.png",
"//Base/res/icons/16x16/filetype-html.png",
"//Base/res/icons/16x16/filetype-image.png",
"//Base/res/icons/16x16/filetype-sound.png",
"//Base/res/icons/16x16/filetype-video.png",
"//Base/res/icons/16x16/find.png",
"//Base/res/icons/16x16/go-forward.png",
"//Base/res/icons/16x16/history.png",
"//Base/res/icons/16x16/layers.png",
"//Base/res/icons/16x16/layout.png",
"//Base/res/icons/16x16/network.png",
"//Base/res/icons/16x16/new-tab.png",
"//Base/res/icons/16x16/open-parent-directory.png",
"//Base/res/icons/16x16/paste.png",
"//Base/res/icons/16x16/pause.png",
"//Base/res/icons/16x16/play.png",
"//Base/res/icons/16x16/select-all.png",
"//Base/res/icons/16x16/settings.png",
"//Base/res/icons/16x16/spoof.png",
"//Base/res/icons/16x16/trash-can.png",
"//Base/res/icons/16x16/zoom-in.png",
"//Base/res/icons/16x16/zoom-out.png",
"//Base/res/icons/16x16/zoom-reset.png",
]
icons_32x32 = [
"//Base/res/icons/32x32/app-system-monitor.png",
"//Base/res/icons/32x32/filetype-folder.png",
"//Base/res/icons/32x32/filetype-unknown.png",
]
icons_48x48 = [ "//Base/res/icons/48x48/app-browser.png" ]
icons_128x128 = [
"//Base/res/icons/128x128/app-browser.png",
"//Base/res/icons/128x128/app-browser-dark.png",
]
icons_browser = [
"//Base/res/icons/browser/clear-cache.png",
"//Base/res/icons/browser/cookie.png",
"//Base/res/icons/browser/dom-tree.png",
"//Base/res/icons/browser/local-storage.png",
]
themes = [
"//Base/res/themes/Default.ini",
"//Base/res/themes/Dark.ini",
]
web_resources = [
"//Base/res/ladybird/inspector.css",
"//Base/res/ladybird/inspector.html",
"//Base/res/ladybird/inspector.js",
]
about_pages = [
"//Base/res/ladybird/about-pages/about.html",
"//Base/res/ladybird/about-pages/newtab.html",
]
web_templates = [
"//Base/res/ladybird/templates/directory.html",
"//Base/res/ladybird/templates/error.html",
"//Base/res/ladybird/templates/version.html",
]
config_resources =
[ "//Base/res/ladybird/default-config/BrowserContentFilters.txt" ]
if (current_os != "mac") {
copy("ladybird_copy_fonts") {
sources = fonts
outputs = [ "$root_out_dir/share/Lagom/fonts/{{source_file_part}}" ]
}
copy("ladybird_copy_icons_16x16") {
sources = icons_16x16
outputs = [ "$root_out_dir/share/Lagom/icons/16x16/{{source_file_part}}" ]
}
copy("ladybird_copy_icons_32x32") {
sources = icons_32x32
outputs = [ "$root_out_dir/share/Lagom/icons/32x32/{{source_file_part}}" ]
}
copy("ladybird_copy_icons_48x48") {
sources = icons_48x48
outputs = [ "$root_out_dir/share/Lagom/icons/48x48/{{source_file_part}}" ]
}
copy("ladybird_copy_icons_128x128") {
sources = icons_128x128
outputs = [ "$root_out_dir/share/Lagom/icons/128x128/{{source_file_part}}" ]
}
copy("ladybird_copy_icons_browser") {
sources = icons_browser
outputs = [ "$root_out_dir/share/Lagom/icons/browser/{{source_file_part}}" ]
}
copy("ladybird_copy_themes") {
sources = themes
outputs = [ "$root_out_dir/share/Lagom/themes/{{source_file_part}}" ]
}
copy("ladybird_copy_web_resources") {
sources = web_resources
outputs = [ "$root_out_dir/share/Lagom/ladybird/{{source_file_part}}" ]
}
copy("ladybird_copy_about_pages") {
sources = about_pages
outputs = [
"$root_out_dir/share/Lagom/ladybird/about-pages/{{source_file_part}}",
]
}
copy("ladybird_copy_web_templates") {
sources = web_templates
outputs =
[ "$root_out_dir/share/Lagom/ladybird/templates/{{source_file_part}}" ]
}
copy("ladybird_copy_config_resources") {
sources = config_resources
outputs = [
"$root_out_dir/share/Lagom/ladybird/default-config/{{source_file_part}}",
]
}
} else {
# macOS bundle steps
bundle_data("ladybird_bundle_info_plist") {
sources = [ "Info.plist" ]
outputs = [ "{{bundle_contents_dir}}/Info.plist" ]
}
bundle_data("ladybird_bundle_executables") {
public_deps = [
":headless-browser",
":ladybird_executable",
"ImageDecoder",
"RequestServer",
"WebContent",
"WebDriver",
"WebWorker",
]
sources = [
"$root_out_dir/bin/Ladybird",
"$root_out_dir/bin/WebDriver",
"$root_out_dir/bin/headless-browser",
"$root_out_dir/libexec/ImageDecoder",
"$root_out_dir/libexec/RequestServer",
"$root_out_dir/libexec/WebContent",
"$root_out_dir/libexec/WebWorker",
]
outputs = [ "{{bundle_executable_dir}}/{{source_file_part}}" ]
}
bundle_data("ladybird_bundle_libs") {
public_deps = [
"//AK",
"//Userland/Libraries/LibCompress",
"//Userland/Libraries/LibCore",
"//Userland/Libraries/LibCrypto",
"//Userland/Libraries/LibDiff",
"//Userland/Libraries/LibFileSystem",
"//Userland/Libraries/LibGfx",
"//Userland/Libraries/LibHTTP",
"//Userland/Libraries/LibIDL",
"//Userland/Libraries/LibIPC",
"//Userland/Libraries/LibImageDecoderClient",
"//Userland/Libraries/LibJS",
"//Userland/Libraries/LibLine",
"//Userland/Libraries/LibMedia",
"//Userland/Libraries/LibRegex",
"//Userland/Libraries/LibRequests",
"//Userland/Libraries/LibSyntax",
"//Userland/Libraries/LibTLS",
"//Userland/Libraries/LibTextCodec",
"//Userland/Libraries/LibThreading",
"//Userland/Libraries/LibURL",
"//Userland/Libraries/LibWasm",
"//Userland/Libraries/LibWeb",
"//Userland/Libraries/LibWebSocket",
"//Userland/Libraries/LibWebView",
"//Userland/Libraries/LibXML",
]
sources = [
"$root_out_dir/lib/liblagom-ak.dylib",
"$root_out_dir/lib/liblagom-compress.dylib",
"$root_out_dir/lib/liblagom-core-minimal.dylib",
"$root_out_dir/lib/liblagom-core.dylib",
"$root_out_dir/lib/liblagom-crypto.dylib",
"$root_out_dir/lib/liblagom-diff.dylib",
"$root_out_dir/lib/liblagom-filesystem.dylib",
"$root_out_dir/lib/liblagom-gfx.dylib",
"$root_out_dir/lib/liblagom-http.dylib",
"$root_out_dir/lib/liblagom-idl.dylib",
"$root_out_dir/lib/liblagom-imagedecoderclient.dylib",
"$root_out_dir/lib/liblagom-ipc.dylib",
"$root_out_dir/lib/liblagom-js.dylib",
"$root_out_dir/lib/liblagom-line.dylib",
"$root_out_dir/lib/liblagom-media.dylib",
"$root_out_dir/lib/liblagom-regex.dylib",
"$root_out_dir/lib/liblagom-requests.dylib",
"$root_out_dir/lib/liblagom-syntax.dylib",
"$root_out_dir/lib/liblagom-textcodec.dylib",
"$root_out_dir/lib/liblagom-threading.dylib",
"$root_out_dir/lib/liblagom-tls.dylib",
"$root_out_dir/lib/liblagom-url.dylib",
"$root_out_dir/lib/liblagom-wasm.dylib",
"$root_out_dir/lib/liblagom-web.dylib",
"$root_out_dir/lib/liblagom-websocket.dylib",
"$root_out_dir/lib/liblagom-webview.dylib",
"$root_out_dir/lib/liblagom-xml.dylib",
]
outputs = [ "{{bundle_contents_dir}}/lib/{{source_file_part}}" ]
}
bundle_data("ladybird_fonts") {
sources = fonts
outputs = [ "{{bundle_resources_dir}}/fonts/{{source_file_part}}" ]
}
bundle_data("ladybird_icons_16x16") {
sources = icons_16x16
outputs = [ "{{bundle_resources_dir}}/icons/16x16/{{source_file_part}}" ]
}
bundle_data("ladybird_icons_32x32") {
sources = icons_32x32
outputs = [ "{{bundle_resources_dir}}/icons/32x32/{{source_file_part}}" ]
}
bundle_data("ladybird_icons_48x48") {
sources = icons_48x48
outputs = [ "{{bundle_resources_dir}}/icons/48x48/{{source_file_part}}" ]
}
bundle_data("ladybird_icons_128x128") {
sources = icons_128x128
outputs = [ "{{bundle_resources_dir}}/icons/128x128/{{source_file_part}}" ]
}
bundle_data("ladybird_icons_browser") {
sources = icons_browser
outputs = [ "{{bundle_resources_dir}}/icons/browser/{{source_file_part}}" ]
}
bundle_data("ladybird_themes") {
sources = themes
outputs = [ "{{bundle_resources_dir}}/themes/{{source_file_part}}" ]
}
bundle_data("ladybird_web_resources") {
sources = web_resources
outputs = [ "{{bundle_resources_dir}}/ladybird/{{source_file_part}}" ]
}
bundle_data("ladybird_about_pages") {
sources = about_pages
outputs =
[ "{{bundle_resources_dir}}/ladybird/about-pages/{{source_file_part}}" ]
}
bundle_data("ladybird_web_templates") {
sources = web_templates
outputs =
[ "{{bundle_resources_dir}}/ladybird/templates/{{source_file_part}}" ]
}
bundle_data("ladybird_config_resources") {
sources = config_resources
outputs = [
"{{bundle_resources_dir}}/ladybird/default-config/{{source_file_part}}",
]
}
action("ladybird_create_icon") {
script = "//Meta/gn/build/invoke_process_with_args.py"
icon_path = "//Ladybird/Icons/macos/app_icon.iconset"
sources = [
"$icon_path/icon_128x128.png",
"$icon_path/icon_128x128@2x.png",
"$icon_path/icon_16x16.png",
"$icon_path/icon_16x16@2x.png",
"$icon_path/icon_256x256.png",
"$icon_path/icon_256x256@2x.png",
"$icon_path/icon_32x32.png",
"$icon_path/icon_32x32@2x.png",
"$icon_path/icon_512x512.png",
"$icon_path/icon_512x512@2x.png",
]
outputs = [ "$target_gen_dir/app_icon.icns" ]
args = [
"iconutil",
"--convert",
"icns",
rebase_path(icon_path, root_build_dir),
"--output",
rebase_path(outputs[0], root_build_dir),
]
}
bundle_data("ladybird_icon") {
public_deps = [ ":ladybird_create_icon" ]
sources = get_target_outputs(public_deps[0])
outputs = [ "{{bundle_resources_dir}}/{{source_file_part}}" ]
}
create_bundle("Ladybird.app") {
product_type = "com.apple.product-type.application"
bundle_root_dir = "$root_build_dir/$target_name"
bundle_contents_dir = "$bundle_root_dir/Contents"
bundle_resources_dir = "$bundle_contents_dir/Resources"
bundle_executable_dir = "$bundle_contents_dir/MacOS"
deps = [
":ladybird_about_pages",
":ladybird_bundle_executables",
":ladybird_bundle_info_plist",
":ladybird_bundle_libs",
":ladybird_config_resources",
":ladybird_fonts",
":ladybird_icon",
":ladybird_icons_128x128",
":ladybird_icons_16x16",
":ladybird_icons_32x32",
":ladybird_icons_48x48",
":ladybird_icons_browser",
":ladybird_themes",
":ladybird_web_resources",
":ladybird_web_templates",
]
}
}

View file

@ -1,21 +0,0 @@
executable("ImageDecoder") {
configs += [ "//Ladybird:ladybird_config" ]
include_dirs = [
"//Userland/Libraries",
"//Userland/Services",
]
deps = [
"//AK",
"//Userland/Libraries/LibCore",
"//Userland/Libraries/LibGfx",
"//Userland/Libraries/LibIPC",
"//Userland/Libraries/LibImageDecoderClient",
"//Userland/Libraries/LibMain",
"//Userland/Libraries/LibThreading",
]
sources = [
"//Userland/Services/ImageDecoder/ConnectionFromClient.cpp",
"main.cpp",
]
output_dir = "$root_out_dir/libexec"
}

View file

@ -1,27 +0,0 @@
executable("RequestServer") {
configs += [ "//Ladybird:ladybird_config" ]
include_dirs = [
"//Userland/Libraries",
"//Userland/Services",
]
deps = [
"//AK",
"//Meta/gn/build/libs/curl",
"//Userland/Libraries/LibCore",
"//Userland/Libraries/LibCrypto",
"//Userland/Libraries/LibFileSystem",
"//Userland/Libraries/LibIPC",
"//Userland/Libraries/LibMain",
"//Userland/Libraries/LibRequests:RequestClientEndpoint",
"//Userland/Libraries/LibRequests:RequestServerEndpoint",
"//Userland/Libraries/LibTLS",
"//Userland/Libraries/LibThreading",
"//Userland/Libraries/LibURL",
"//Userland/Libraries/LibWebSocket",
]
sources = [
"//Userland/Services/RequestServer/ConnectionFromClient.cpp",
"main.cpp",
]
output_dir = "$root_out_dir/libexec"
}

View file

@ -1,70 +0,0 @@
import("//Ladybird/enable_qt.gni")
import("//Ladybird/link_qt.gni")
import("//Ladybird/moc_qt_objects.gni")
import("//Meta/gn/build/libs/pulse/enable.gni")
moc_qt_objects("generate_moc") {
sources = [ "//Ladybird/Qt/EventLoopImplementationQtEventTarget.h" ]
}
link_qt("WebContent_qt") {
qt_components = [ "Core" ]
}
executable("WebContent") {
configs += [ "//Ladybird:ladybird_config" ]
include_dirs = [
"//Userland/Services",
"//Ladybird",
]
deps = [
"//AK",
"//Meta/gn/build/libs/fontconfig",
"//Meta/gn/build/libs/pulse",
"//Userland/Libraries/LibCore",
"//Userland/Libraries/LibFileSystem",
"//Userland/Libraries/LibGfx",
"//Userland/Libraries/LibIPC",
"//Userland/Libraries/LibImageDecoderClient",
"//Userland/Libraries/LibJS",
"//Userland/Libraries/LibMain",
"//Userland/Libraries/LibRequests",
"//Userland/Libraries/LibURL",
"//Userland/Libraries/LibWeb",
"//Userland/Libraries/LibWebSocket",
"//Userland/Libraries/LibWebView",
"//Userland/Libraries/LibWebView:WebContentClientEndpoint",
"//Userland/Libraries/LibWebView:WebContentServerEndpoint",
"//Userland/Libraries/LibWebView:WebDriverClientEndpoint",
"//Userland/Libraries/LibWebView:WebDriverServerEndpoint",
]
sources = [
"//Ladybird/FontPlugin.cpp",
"//Ladybird/HelperProcess.cpp",
"//Ladybird/ImageCodecPlugin.cpp",
"//Ladybird/Utilities.cpp",
"//Userland/Services/WebContent/BackingStoreManager.cpp",
"//Userland/Services/WebContent/ConnectionFromClient.cpp",
"//Userland/Services/WebContent/ConsoleGlobalEnvironmentExtensions.cpp",
"//Userland/Services/WebContent/PageClient.cpp",
"//Userland/Services/WebContent/PageHost.cpp",
"//Userland/Services/WebContent/WebContentConsoleClient.cpp",
"//Userland/Services/WebContent/WebDriverConnection.cpp",
"main.cpp",
]
if (enable_qt) {
defines = [ "HAVE_QT" ]
configs += [ ":WebContent_qt" ]
sources += [
"//Ladybird/Qt/EventLoopImplementationQt.cpp",
"//Ladybird/Qt/EventLoopImplementationQtEventTarget.cpp",
"//Ladybird/Qt/StringUtils.cpp",
]
sources += get_target_outputs(":generate_moc")
deps += [ ":generate_moc" ]
}
output_dir = "$root_out_dir/libexec"
}

View file

@ -1,34 +0,0 @@
import("//Ladybird/link_qt.gni")
executable("WebDriver") {
configs += [ "//Ladybird:ladybird_config" ]
include_dirs = [
"//Userland/Services",
"//Ladybird",
]
data_deps = [
"//Ladybird:headless-browser",
"//Ladybird:ladybird_executable",
]
deps = [
"//AK",
"//Userland/Libraries/LibCore",
"//Userland/Libraries/LibFileSystem",
"//Userland/Libraries/LibGfx",
"//Userland/Libraries/LibIPC",
"//Userland/Libraries/LibJS",
"//Userland/Libraries/LibMain",
"//Userland/Libraries/LibURL",
"//Userland/Libraries/LibWeb",
"//Userland/Libraries/LibWebSocket",
"//Userland/Libraries/LibWebView:WebDriverClientEndpoint",
"//Userland/Libraries/LibWebView:WebDriverServerEndpoint",
]
sources = [
"//Ladybird/Utilities.cpp",
"//Userland/Services/WebDriver/Client.cpp",
"//Userland/Services/WebDriver/Session.cpp",
"//Userland/Services/WebDriver/WebContentConnection.cpp",
"main.cpp",
]
}

View file

@ -1,34 +0,0 @@
executable("WebWorker") {
configs += [ "//Ladybird:ladybird_config" ]
include_dirs = [
"//Userland/Libraries",
"//Userland/Services",
]
deps = [
"//AK",
"//Meta/gn/build/libs/fontconfig",
"//Userland/Libraries/LibCore",
"//Userland/Libraries/LibFileSystem",
"//Userland/Libraries/LibGfx",
"//Userland/Libraries/LibIPC",
"//Userland/Libraries/LibImageDecoderClient",
"//Userland/Libraries/LibJS",
"//Userland/Libraries/LibMain",
"//Userland/Libraries/LibRequests",
"//Userland/Libraries/LibURL",
"//Userland/Libraries/LibWeb",
"//Userland/Libraries/LibWeb:WebWorkerClientEndpoint",
"//Userland/Libraries/LibWeb:WebWorkerServerEndpoint",
"//Userland/Libraries/LibWebView",
]
sources = [
"//Ladybird/FontPlugin.cpp",
"//Ladybird/HelperProcess.cpp",
"//Ladybird/Utilities.cpp",
"//Userland/Services/WebWorker/ConnectionFromClient.cpp",
"//Userland/Services/WebWorker/DedicatedWorkerHost.cpp",
"//Userland/Services/WebWorker/PageHost.cpp",
"main.cpp",
]
output_dir = "$root_out_dir/libexec"
}

View file

@ -1,24 +0,0 @@
import("qt_install_prefix.gni")
template("compile_qt_resource_file") {
action_foreach(target_name) {
forward_variables_from(invoker, [ "sources" ])
script = "//Meta/gn/build/invoke_process_with_args.py"
outputs = [ "$target_gen_dir/rcc_{{source_name_part}}.cpp" ]
depfile = "$target_gen_dir/rcc_{{source_name_part}}.cpp.d"
args = [
qt_install_libexec + "rcc",
"-g",
"cpp",
"-d",
rebase_path(target_gen_dir, root_build_dir) +
"/rcc_{{source_name_part}}.cpp.d",
"-o",
rebase_path(target_gen_dir, root_build_dir) +
"/rcc_{{source_name_part}}.cpp",
"{{source}}",
]
}
}

View file

@ -1,4 +0,0 @@
declare_args() {
# Build the Ladybird application using the AppKit UI.
enable_appkit = current_os == "mac"
}

View file

@ -1,4 +0,0 @@
declare_args() {
# Build the Ladybird application using the Qt UI.
enable_qt = current_os != "mac"
}

View file

@ -1,25 +0,0 @@
import("qt_install_prefix.gni")
template("link_qt") {
assert(defined(invoker.qt_components),
"Must define qt_component on $target_name")
config(target_name) {
include_dirs = [ qt_install_headers ]
if (current_os == "mac") {
frameworks = []
framework_dirs = [ qt_install_frameworks ]
foreach(component, invoker.qt_components) {
include_dirs += [ qt_install_headers + "Qt" + component ]
frameworks += [ "Qt" + component + ".framework" ]
}
} else {
libs = []
lib_dirs = [ qt_install_lib ]
foreach(component, invoker.qt_components) {
include_dirs += [ qt_install_headers + "Qt" + component ]
libs += [ "Qt6" + component ]
}
}
}
}

View file

@ -1,18 +0,0 @@
import("qt_install_prefix.gni")
template("moc_qt_objects") {
action_foreach(target_name) {
forward_variables_from(invoker, [ "sources" ])
script = "//Meta/gn/build/invoke_process_with_args.py"
outputs = [ "$target_gen_dir/moc_{{source_name_part}}.cpp" ]
args = [
qt_install_libexec + "moc",
"{{source}}",
"-o",
rebase_path(target_gen_dir, root_build_dir) +
"/moc_{{source_name_part}}.cpp",
]
}
}

View file

@ -1,26 +0,0 @@
declare_args() {
# Location of Qt6 binaries/libraries/frameworks.
# Likely /opt/homebrew on macOS and /usr or /usr/local on Linux
# FIXME: We could get these by parsing `qmake -query` or `pkg-config`
if (host_os == "mac") {
qt_install_prefix = "/opt/homebrew/"
} else {
qt_install_prefix = "/usr/"
}
}
declare_args() {
# Location of Qt6 headers, normally set based on $qt_install_prefix
qt_install_headers = qt_install_prefix + "include/"
if (current_os == "mac") {
# Location of Qt6 frameworks, normally set based on $qt_install_prefix
qt_install_frameworks = qt_install_prefix + "Frameworks/"
} else {
# Location of Qt6 libraries, normally set based on $qt_install_prefix
qt_install_lib = qt_install_prefix + "lib"
}
# Location of Qt6 helper programs, normally set based on $qt_install_prefix
# Programs such as moc and rcc are expected to be in this location.
qt_install_libexec = qt_install_prefix + "share/qt/libexec/"
}

View file

@ -1,6 +0,0 @@
import("//Meta/Lagom/Tools/lagom_tool.gni")
lagom_tool("IPCCompiler") {
sources = [ "main.cpp" ]
deps = [ "//Userland/Libraries/LibMain" ]
}

View file

@ -1,6 +0,0 @@
import("//Meta/Lagom/Tools/lagom_tool.gni")
lagom_tool("GenerateEncodingIndexes") {
sources = [ "GenerateEncodingIndexes.cpp" ]
deps = [ "//Userland/Libraries/LibMain" ]
}

View file

@ -1,94 +0,0 @@
import("//Meta/Lagom/Tools/lagom_tool.gni")
source_set("headers") {
sources = [ "GeneratorUtil.h" ]
}
lagom_tool("GenerateAriaRoles") {
sources = [ "GenerateAriaRoles.cpp" ]
deps = [
":headers",
"//Userland/Libraries/LibMain",
]
}
lagom_tool("GenerateCSSEnums") {
sources = [ "GenerateCSSEnums.cpp" ]
deps = [
":headers",
"//Userland/Libraries/LibMain",
]
}
lagom_tool("GenerateCSSMathFunctions") {
sources = [ "GenerateCSSMathFunctions.cpp" ]
deps = [
":headers",
"//Userland/Libraries/LibMain",
]
}
lagom_tool("GenerateCSSMediaFeatureID") {
sources = [ "GenerateCSSMediaFeatureID.cpp" ]
deps = [
":headers",
"//Userland/Libraries/LibMain",
]
}
lagom_tool("GenerateCSSPropertyID") {
sources = [ "GenerateCSSPropertyID.cpp" ]
deps = [
":headers",
"//Userland/Libraries/LibMain",
]
}
lagom_tool("GenerateCSSPseudoClass") {
sources = [ "GenerateCSSPseudoClass.cpp" ]
deps = [
":headers",
"//Userland/Libraries/LibMain",
]
}
lagom_tool("GenerateCSSPseudoElement") {
sources = [ "GenerateCSSPseudoElement.cpp" ]
deps = [
":headers",
"//Userland/Libraries/LibMain",
]
}
lagom_tool("GenerateCSSTransformFunctions") {
sources = [ "GenerateCSSTransformFunctions.cpp" ]
deps = [
":headers",
"//Userland/Libraries/LibMain",
]
}
lagom_tool("GenerateCSSKeyword") {
sources = [ "GenerateCSSKeyword.cpp" ]
deps = [
":headers",
"//Userland/Libraries/LibMain",
]
}
lagom_tool("GenerateWindowOrWorkerInterfaces") {
sources = [ "GenerateWindowOrWorkerInterfaces.cpp" ]
deps = [
":headers",
"//Userland/Libraries/LibIDL",
"//Userland/Libraries/LibMain",
]
}
lagom_tool("GenerateNamedCharacterReferences") {
sources = [ "GenerateNamedCharacterReferences.cpp" ]
deps = [
":headers",
"//Userland/Libraries/LibMain",
]
}

View file

@ -1,13 +0,0 @@
import("//Meta/Lagom/Tools/lagom_tool.gni")
lagom_tool("BindingsGenerator") {
sources = [
"IDLGenerators.cpp",
"Namespaces.h",
"main.cpp",
]
deps = [
"//Userland/Libraries/LibIDL",
"//Userland/Libraries/LibMain",
]
}

View file

@ -1,6 +0,0 @@
import("//Meta/Lagom/Tools/lagom_tool.gni")
lagom_tool("GeneratePublicSuffixData") {
sources = [ "GeneratePublicSuffixData.cpp" ]
deps = [ "//Userland/Libraries/LibMain" ]
}

View file

@ -1,16 +0,0 @@
template("lagom_tool") {
assert(current_toolchain == host_toolchain,
"Must only depend on Lagom tools from the host_toolchain")
executable(target_name) {
forward_variables_from(invoker, "*")
include_dirs = [
"//",
"$root_gen_dir",
"//Userland/Libraries",
]
deps += [
"//Userland/Libraries/LibCore:minimal",
"//Userland/Libraries/LibFileSystem",
]
}
}

View file

@ -1,101 +0,0 @@
import("//Tests/unittest.gni")
tests = [
"TestAllOf",
"TestAnyOf",
"TestArray",
"TestAtomic",
"TestBadge",
"TestBase64",
"TestBinaryHeap",
"TestBinarySearch",
"TestBitCast",
"TestBitmap",
"TestBitStream",
"TestBuiltinWrappers",
"TestByteBuffer",
"TestCharacterTypes",
"TestChecked",
"TestCircularBuffer",
"TestCircularQueue",
"TestByteString",
"TestDisjointChunks",
"TestDistinctNumeric",
"TestDoublyLinkedList",
"TestDuration",
"TestEndian",
"TestEnumBits",
"TestFind",
"TestFixedArray",
"TestFixedPoint",
"TestFloatingPointParsing",
"TestFlyString",
"TestFormat",
"TestGenericLexer",
"TestGenericShorthands",
"TestHashFunctions",
"TestHashMap",
"TestHashTable",
"TestHex",
"TestIPv4Address",
"TestIPv6Address",
"TestIndexSequence",
"TestInsertionSort",
"TestIntegerMath",
"TestIntrusiveList",
"TestIntrusiveRedBlackTree",
"TestJSON",
"TestLEB128",
"TestLexicalPath",
"TestMemory",
"TestMemoryStream",
"TestNeverDestroyed",
"TestNonnullRefPtr",
"TestNumberFormat",
"TestOptional",
"TestOwnPtr",
"TestPrint",
"TestQueue",
"TestQuickSelect",
"TestQuickSort",
"TestRedBlackTree",
"TestRefPtr",
"TestSIMD",
"TestSinglyLinkedList",
"TestSourceGenerator",
"TestSourceLocation",
"TestSpan",
"TestStack",
"TestStatistics",
"TestStdLibExtras",
"TestStringFloatingPointConversions",
"TestStringUtils",
"TestStringView",
"TestTrie",
"TestTuple",
"TestTypeTraits",
"TestTypedTransfer",
"TestUFixedBigInt",
"TestUtf16",
"TestUtf8",
"TestVariant",
"TestVector",
"TestWeakPtr",
]
# FIXME: "TestString", when LibUnicode is available
foreach(test_name, tests) {
unittest(test_name) {
include_dirs = [ "//Userland/Libraries" ]
sources = [ test_name + ".cpp" ]
}
}
group("AK") {
deps = []
foreach(test_name, tests) {
deps += [ ":" + test_name ]
}
testonly = true
}

View file

@ -1,9 +0,0 @@
group("Tests") {
deps = [
"//Tests/AK",
"//Tests/LibJS",
"//Tests/LibURL",
"//Tests/LibWeb",
]
testonly = true
}

View file

@ -1,29 +0,0 @@
import("//Tests/unittest.gni")
unittest("test-js") {
use_js_main = true
include_dirs = [ "//Userland/Libraries" ]
sources = [ "test-js.cpp" ]
deps = [
"//Userland/Libraries/LibFileSystem",
"//Userland/Libraries/LibJS",
]
}
executable("test262-runner") {
sources = [ "test262-runner.cpp" ]
include_dirs = [ "//Userland/Libraries" ]
deps = [
"//AK",
"//Userland/Libraries/LibCore",
"//Userland/Libraries/LibJS",
]
}
group("LibJS") {
testonly = true
deps = [
":test-js",
":test262-runner",
]
}

View file

@ -1,15 +0,0 @@
import("//Tests/unittest.gni")
unittest("TestURL") {
include_dirs = [ "//Userland/Libraries" ]
sources = [ "TestURL.cpp" ]
deps = [
"//AK",
"//Userland/Libraries/LibURL",
]
}
group("LibURL") {
testonly = true
deps = [ ":TestURL" ]
}

View file

@ -1,66 +0,0 @@
import("//Tests/unittest.gni")
unittest("TestCSSIDSpeed") {
include_dirs = [ "//Userland/Libraries" ]
sources = [ "TestCSSIDSpeed.cpp" ]
deps = [ "//Userland/Libraries/LibWeb" ]
}
unittest("TestCSSPixels") {
include_dirs = [ "//Userland/Libraries" ]
sources = [ "TestCSSPixels.cpp" ]
deps = [ "//Userland/Libraries/LibWeb" ]
}
unittest("TestFetchInfrastructure") {
include_dirs = [ "//Userland/Libraries" ]
sources = [ "TestFetchInfrastructure.cpp" ]
deps = [ "//Userland/Libraries/LibWeb" ]
}
unittest("TestFetchURL") {
include_dirs = [ "//Userland/Libraries" ]
sources = [ "TestFetchURL.cpp" ]
deps = [
"//Userland/Libraries/LibURL",
"//Userland/Libraries/LibWeb",
]
}
unittest("TestHTMLTokenizer") {
include_dirs = [ "//Userland/Libraries" ]
sources = [ "TestHTMLTokenizer.cpp" ]
deps = [ "//Userland/Libraries/LibWeb" ]
}
unittest("TestMicrosyntax") {
include_dirs = [ "//Userland/Libraries" ]
sources = [ "TestMicrosyntax.cpp" ]
deps = [ "//Userland/Libraries/LibWeb" ]
}
unittest("TestMimeSniff") {
include_dirs = [ "//Userland/Libraries" ]
sources = [ "TestMimeSniff.cpp" ]
deps = [ "//Userland/Libraries/LibWeb" ]
}
unittest("TestNumbers") {
include_dirs = [ "//Userland/Libraries" ]
sources = [ "TestNumbers.cpp" ]
deps = [ "//Userland/Libraries/LibWeb" ]
}
group("LibWeb") {
testonly = true
deps = [
":TestCSSIDSpeed",
":TestCSSPixels",
":TestFetchInfrastructure",
":TestFetchURL",
":TestHTMLTokenizer",
":TestMicrosyntax",
":TestMimeSniff",
":TestNumbers",
]
}

View file

@ -1,29 +0,0 @@
template("unittest") {
executable(target_name) {
has_custom_main = false
use_js_main = false
# Foward everything (has_custom_main if set; configs, sources, deps, ...).
forward_variables_from(invoker, "*")
assert(!defined(invoker.output_dir), "cannot set unittest output_dir")
assert(!defined(invoker.testonly), "cannot set unittest testonly")
if (!defined(invoker.deps)) {
deps = []
}
deps += [
"//AK",
"//Userland/Libraries/LibCore",
]
if (has_custom_main) {
deps += [ "//Userland/Libraries/LibTest" ]
} else if (use_js_main) {
deps += [ "//Userland/Libraries/LibTest:test_js_main" ]
} else {
deps += [ "//Userland/Libraries/LibTest:test_main" ]
}
testonly = true
}
}

View file

@ -1,15 +0,0 @@
shared_library("LibCompress") {
output_name = "compress"
include_dirs = [ "//Userland/Libraries" ]
sources = [
"Deflate.cpp",
"Gzip.cpp",
"PackBitsDecoder.cpp",
"Zlib.cpp",
]
deps = [
"//AK",
"//Userland/Libraries/LibCore",
"//Userland/Libraries/LibCrypto",
]
}

View file

@ -1,207 +0,0 @@
import("//Meta/gn/build/libs/vulkan/enable.gni")
# These are the minimal set of sources needed to build the code generators. We separate them to allow
# LibCore to depend on generated sources.
shared_library("minimal") {
output_name = "core-minimal"
include_dirs = [ "//Userland/Libraries" ]
sources = [
"ArgsParser.cpp",
"ArgsParser.h",
"DirIterator.cpp",
"DirIterator.h",
"Directory.cpp",
"Directory.h",
"DirectoryEntry.cpp",
"DirectoryEntry.h",
"Environment.cpp",
"Environment.h",
"File.cpp",
"File.h",
"Forward.h",
"StandardPaths.cpp",
"StandardPaths.h",
"System.cpp",
"System.h",
"Version.cpp",
"Version.h",
]
deps = [ "//AK" ]
}
source_set("sources") {
include_dirs = [ "//Userland/Libraries" ]
deps = [ "//AK" ]
sources = [
"AnonymousBuffer.cpp",
"AnonymousBuffer.h",
"Command.cpp",
"Command.h",
"ConfigFile.cpp",
"ConfigFile.h",
"DateTime.cpp",
"DateTime.h",
"DeferredInvocationContext.h",
"ElapsedTimer.cpp",
"ElapsedTimer.h",
"Event.cpp",
"Event.h",
"EventLoop.cpp",
"EventLoop.h",
"EventLoopImplementation.cpp",
"EventLoopImplementation.h",
"EventLoopImplementationUnix.cpp",
"EventLoopImplementationUnix.h",
"EventReceiver.cpp",
"EventReceiver.h",
"MappedFile.cpp",
"MappedFile.h",
"MimeData.cpp",
"MimeData.h",
"NetworkResponse.h",
"Notifier.cpp",
"Notifier.h",
"Platform/ProcessInfo.h",
"Platform/ProcessStatistics.h",
"Process.cpp",
"Process.h",
"Promise.h",
"Proxy.h",
"Resource.cpp",
"Resource.h",
"ResourceImplementation.cpp",
"ResourceImplementationFile.cpp",
"SharedCircularQueue.h",
"Socket.cpp",
"Socket.h",
"SocketAddress.h",
"SystemServerTakeover.cpp",
"SystemServerTakeover.h",
"TCPServer.cpp",
"TCPServer.h",
"ThreadEventQueue.cpp",
"ThreadEventQueue.h",
"ThreadedPromise.h",
"Timer.cpp",
"Timer.h",
"UDPServer.cpp",
"UDPServer.h",
]
if (current_os != "android") {
sources += [
"LocalServer.cpp",
"LocalServer.h",
]
}
if (current_os == "mac") {
sources += [ "MachPort.cpp" ]
}
if (current_os == "linux") {
sources += [ "Platform/ProcessStatisticsLinux.cpp" ]
} else if (current_os == "mac") {
sources += [
"Platform/ProcessStatisticsMach.cpp",
"Platform/ProcessStatisticsMach.h",
]
} else {
sources += [ "Platform/ProcessStatisticsUnimplemented.cpp" ]
}
}
source_set("filewatcher") {
include_dirs = [ "//Userland/Libraries" ]
sources = [ "FileWatcher.h" ]
deps = [ "//AK" ]
frameworks = []
if (current_os == "linux") {
sources += [ "FileWatcherLinux.cpp" ]
} else if (current_os == "mac") {
sources += [ "FileWatcherMacOS.mm" ]
frameworks += [
"CoreFoundation.framework",
"CoreServices.framework",
"Foundation.framework",
]
} else {
sources += [ "FileWatcherUnimplemented.cpp" ]
}
}
source_set("timezonewatcher") {
include_dirs = [ "//Userland/Libraries" ]
sources = [ "TimeZoneWatcher.h" ]
deps = [ "//AK" ]
frameworks = []
if (current_os == "linux") {
sources += [ "TimeZoneWatcherLinux.cpp" ]
} else if (current_os == "mac") {
sources += [ "TimeZoneWatcherMacOS.mm" ]
frameworks += [
"CoreFoundation.framework",
"CoreServices.framework",
"Foundation.framework",
]
} else {
sources += [ "TimeZoneWatcherUnimplemented.cpp" ]
}
}
source_set("metal") {
if (current_os == "mac") {
include_dirs = [ "//Userland/Libraries" ]
deps = [ "//AK" ]
sources = [
"IOSurface.cpp",
"MetalContext.mm",
]
frameworks = [
"IOSurface.framework",
"Metal.framework",
]
}
}
source_set("vulkan") {
if (enable_vulkan) {
include_dirs = [ "//Userland/Libraries" ]
deps = [
"//AK",
"//Meta/gn/build/libs/vulkan",
]
sources = [ "VulkanContext.cpp" ]
}
}
shared_library("LibCore") {
libs = []
if (current_os == "linux" || current_os == "android") {
libs += [ "dl" ]
}
if (current_os == "linux") {
libs += [ "rt" ]
}
if (current_os == "android") {
libs += [ "log" ]
}
output_name = "core"
deps = [
":filewatcher",
":metal",
":sources",
":timezonewatcher",
":vulkan",
"//Meta/gn/build/libs/crypt",
"//Meta/gn/build/libs/pthread",
"//Userland/Libraries/LibURL",
"//Userland/Libraries/LibUnicode",
]
public_deps = [ ":minimal" ]
}

View file

@ -1,34 +0,0 @@
shared_library("LibCrypto") {
output_name = "crypto"
include_dirs = [ "//Userland/Libraries" ]
cflags_cc = [ "-Wvla" ]
deps = [
"//AK",
"//Meta/gn/build/libs/openssl",
"//Userland/Libraries/LibCore",
]
sources = [
"ASN1/ASN1.cpp",
"ASN1/DER.cpp",
"ASN1/PEM.cpp",
"Authentication/GHash.cpp",
"Authentication/Poly1305.cpp",
"BigFraction/BigFraction.cpp",
"BigInt/SignedBigInteger.cpp",
"BigInt/UnsignedBigInteger.cpp",
"Checksum/Adler32.cpp",
"Checksum/CRC32.cpp",
"Checksum/cksum.cpp",
"Cipher/AES.cpp",
"Cipher/ChaCha20.cpp",
"Curves/Curve25519.cpp",
"Curves/Ed25519.cpp",
"Curves/X25519.cpp",
"Curves/X448.cpp",
"Hash/BLAKE2b.cpp",
"Hash/MD5.cpp",
"Hash/SHA1.cpp",
"Hash/SHA2.cpp",
"PK/RSA.cpp",
]
}

View file

@ -1,14 +0,0 @@
shared_library("LibDiff") {
include_dirs = [ "//Userland/Libraries" ]
sources = [
"Applier.cpp",
"Format.cpp",
"Generator.cpp",
"Hunks.cpp",
]
deps = [
"//AK",
"//Userland/Libraries/LibCore",
]
output_name = "diff"
}

View file

@ -1,14 +0,0 @@
shared_library("LibFileSystem") {
include_dirs = [ "//Userland/Libraries" ]
sources = [
"FileSystem.cpp",
"FileSystem.h",
"TempFile.cpp",
"TempFile.h",
]
deps = [
"//AK",
"//Userland/Libraries/LibCore:minimal",
]
output_name = "filesystem"
}

View file

@ -1,102 +0,0 @@
action("generate_tiff_sources") {
script = "//Userland/Libraries/LibGfx/TIFFGenerator.py"
args = [
"-o",
rebase_path("$target_gen_dir/ImageFormats", root_build_dir),
]
outputs = [
"$target_gen_dir/ImageFormats/TIFFMetadata.h",
"$target_gen_dir/ImageFormats/TIFFTagHandler.cpp",
]
}
config("tiff_headers") {
include_dirs = [ "$target_gen_dir/.." ]
}
shared_library("LibGfx") {
output_name = "gfx"
include_dirs = [
"//Userland/Libraries",
"//Userland",
]
public_configs = [ ":tiff_headers" ]
sources = [
"AffineTransform.cpp",
"Bitmap.cpp",
"BitmapSequence.cpp",
"CMYKBitmap.cpp",
"Color.cpp",
"Font/Font.cpp",
"Font/FontData.cpp",
"Font/FontDatabase.cpp",
"Font/ScaledFont.cpp",
"Font/ScaledFontSkia.cpp",
"Font/Typeface.cpp",
"Font/TypefaceSkia.cpp",
"Font/WOFF/Loader.cpp",
"Font/WOFF2/Loader.cpp",
"FontCascadeList.cpp",
"GradientPainting.cpp",
"ImageFormats/AVIFLoader.cpp",
"ImageFormats/AnimationWriter.cpp",
"ImageFormats/BMPLoader.cpp",
"ImageFormats/BMPWriter.cpp",
"ImageFormats/BooleanDecoder.cpp",
"ImageFormats/CCITTDecoder.cpp",
"ImageFormats/GIFLoader.cpp",
"ImageFormats/ICOLoader.cpp",
"ImageFormats/ImageDecoder.cpp",
"ImageFormats/JPEGLoader.cpp",
"ImageFormats/JPEGWriter.cpp",
"ImageFormats/JPEGXLLoader.cpp",
"ImageFormats/PNGLoader.cpp",
"ImageFormats/PNGWriter.cpp",
"ImageFormats/TIFFLoader.cpp",
"ImageFormats/TinyVGLoader.cpp",
"ImageFormats/WebPLoader.cpp",
"ImageFormats/WebPSharedLossless.cpp",
"ImageFormats/WebPWriter.cpp",
"ImageFormats/WebPWriterLossless.cpp",
"ImmutableBitmap.cpp",
"MedianCut.cpp",
"Painter.cpp",
"PainterSkia.cpp",
"Palette.cpp",
"Path.cpp",
"PathSkia.cpp",
"Point.cpp",
"Rect.cpp",
"ShareableBitmap.cpp",
"Size.cpp",
"SystemTheme.cpp",
"TextLayout.cpp",
"Triangle.cpp",
"VectorGraphic.cpp",
]
sources += get_target_outputs(":generate_tiff_sources")
deps = [
":generate_tiff_sources",
"//AK",
"//Meta/gn/build/libs/avif",
"//Meta/gn/build/libs/harfbuzz",
"//Meta/gn/build/libs/jpeg",
"//Meta/gn/build/libs/jxl",
"//Meta/gn/build/libs/png",
"//Meta/gn/build/libs/skia",
"//Meta/gn/build/libs/webp",
"//Meta/gn/build/libs/woff2",
"//Userland/Libraries/LibCompress",
"//Userland/Libraries/LibCore",
"//Userland/Libraries/LibCrypto",
"//Userland/Libraries/LibFileSystem",
"//Userland/Libraries/LibIPC",
"//Userland/Libraries/LibTextCodec",
"//Userland/Libraries/LibURL",
"//Userland/Libraries/LibUnicode",
]
}

View file

@ -1,15 +0,0 @@
shared_library("LibHTTP") {
output_name = "http"
include_dirs = [ "//Userland/Libraries" ]
sources = [
"HttpRequest.cpp",
"HttpResponse.cpp",
]
deps = [
"//AK",
"//Userland/Libraries/LibCompress",
"//Userland/Libraries/LibCore",
"//Userland/Libraries/LibTLS",
"//Userland/Libraries/LibURL",
]
}

View file

@ -1,13 +0,0 @@
shared_library("LibIDL") {
output_name = "idl"
include_dirs = [ "//Userland/Libraries" ]
sources = [
"IDLParser.cpp",
"Types.cpp",
]
deps = [
"//AK",
"//Userland/Libraries/LibCore:minimal",
"//Userland/Libraries/LibFileSystem",
]
}

View file

@ -1,28 +0,0 @@
shared_library("LibIPC") {
output_name = "ipc"
include_dirs = [ "//Userland/Libraries" ]
sources = [
"Concepts.h",
"Connection.cpp",
"Connection.h",
"ConnectionFromClient.h",
"ConnectionToServer.h",
"Decoder.cpp",
"Decoder.h",
"Encoder.cpp",
"Encoder.h",
"File.h",
"Forward.h",
"Message.cpp",
"Message.h",
"MultiServer.h",
"SingleServer.h",
"Stub.h",
]
deps = [
"//AK",
"//Userland/Libraries/LibCore",
"//Userland/Libraries/LibThreading",
"//Userland/Libraries/LibURL",
]
}

View file

@ -1,43 +0,0 @@
import("//Meta/gn/build/compiled_action.gni")
compiled_action("ImageDecoderClientEndpoint") {
tool = "//Meta/Lagom/Tools/CodeGenerators/IPCCompiler"
inputs = [ "//Userland/Services/ImageDecoder/ImageDecoderClient.ipc" ]
outputs = [ "$root_gen_dir/ImageDecoder/ImageDecoderClientEndpoint.h" ]
args = [
rebase_path(inputs[0], root_build_dir),
"-o",
rebase_path(outputs[0], root_build_dir),
]
}
compiled_action("ImageDecoderServerEndpoint") {
tool = "//Meta/Lagom/Tools/CodeGenerators/IPCCompiler"
inputs = [ "//Userland/Services/ImageDecoder/ImageDecoderServer.ipc" ]
outputs = [ "$root_gen_dir/ImageDecoder/ImageDecoderServerEndpoint.h" ]
args = [
rebase_path(inputs[0], root_build_dir),
"-o",
rebase_path(outputs[0], root_build_dir),
]
}
shared_library("LibImageDecoderClient") {
output_name = "imagedecoderclient"
include_dirs = [
"//Userland/Libraries",
"//Userland/Services",
"//Userland/",
]
deps = [
":ImageDecoderClientEndpoint",
":ImageDecoderServerEndpoint",
"//AK",
"//Userland/Libraries/LibCore",
"//Userland/Libraries/LibGfx",
"//Userland/Libraries/LibIPC",
]
sources = [ "Client.cpp" ]
sources += get_target_outputs(":ImageDecoderClientEndpoint") +
get_target_outputs(":ImageDecoderServerEndpoint")
}

View file

@ -1,286 +0,0 @@
shared_library("LibJS") {
output_name = "js"
include_dirs = [ "//Userland/Libraries" ]
cflags_cc = [ "-fno-omit-frame-pointer" ]
deps = [
"//AK",
"//Userland/Libraries/LibCore",
"//Userland/Libraries/LibCrypto",
"//Userland/Libraries/LibFileSystem",
"//Userland/Libraries/LibRegex",
"//Userland/Libraries/LibSyntax",
"//Userland/Libraries/LibUnicode",
]
sources = [
"AST.cpp",
"Bytecode/ASTCodegen.cpp",
"Bytecode/BasicBlock.cpp",
"Bytecode/Builtins.cpp",
"Bytecode/CodeGenerationError.cpp",
"Bytecode/Executable.cpp",
"Bytecode/Generator.cpp",
"Bytecode/IdentifierTable.cpp",
"Bytecode/Instruction.cpp",
"Bytecode/Interpreter.cpp",
"Bytecode/Label.cpp",
"Bytecode/RegexTable.cpp",
"Bytecode/ScopedOperand.cpp",
"Bytecode/StringTable.cpp",
"Console.cpp",
"Contrib/Test262/262Object.cpp",
"Contrib/Test262/AgentObject.cpp",
"Contrib/Test262/GlobalObject.cpp",
"Contrib/Test262/IsHTMLDDA.cpp",
"CyclicModule.cpp",
"Heap/BlockAllocator.cpp",
"Heap/Cell.cpp",
"Heap/CellAllocator.cpp",
"Heap/ConservativeVector.cpp",
"Heap/Handle.cpp",
"Heap/Heap.cpp",
"Heap/HeapBlock.cpp",
"Heap/RootVector.cpp",
"Lexer.cpp",
"MarkupGenerator.cpp",
"Module.cpp",
"Parser.cpp",
"ParserError.cpp",
"Print.cpp",
"Runtime/AbstractOperations.cpp",
"Runtime/Accessor.cpp",
"Runtime/Agent.cpp",
"Runtime/AggregateError.cpp",
"Runtime/AggregateErrorConstructor.cpp",
"Runtime/AggregateErrorPrototype.cpp",
"Runtime/ArgumentsObject.cpp",
"Runtime/Array.cpp",
"Runtime/ArrayBuffer.cpp",
"Runtime/ArrayBufferConstructor.cpp",
"Runtime/ArrayBufferPrototype.cpp",
"Runtime/ArrayConstructor.cpp",
"Runtime/ArrayIterator.cpp",
"Runtime/ArrayIteratorPrototype.cpp",
"Runtime/ArrayPrototype.cpp",
"Runtime/AsyncFromSyncIterator.cpp",
"Runtime/AsyncFromSyncIteratorPrototype.cpp",
"Runtime/AsyncFunctionConstructor.cpp",
"Runtime/AsyncFunctionDriverWrapper.cpp",
"Runtime/AsyncFunctionPrototype.cpp",
"Runtime/AsyncGenerator.cpp",
"Runtime/AsyncGeneratorFunctionConstructor.cpp",
"Runtime/AsyncGeneratorFunctionPrototype.cpp",
"Runtime/AsyncGeneratorPrototype.cpp",
"Runtime/AsyncIteratorPrototype.cpp",
"Runtime/AtomicsObject.cpp",
"Runtime/BigInt.cpp",
"Runtime/BigIntConstructor.cpp",
"Runtime/BigIntObject.cpp",
"Runtime/BigIntPrototype.cpp",
"Runtime/BooleanConstructor.cpp",
"Runtime/BooleanObject.cpp",
"Runtime/BooleanPrototype.cpp",
"Runtime/BoundFunction.cpp",
"Runtime/Completion.cpp",
"Runtime/ConsoleObject.cpp",
"Runtime/ConsoleObjectPrototype.cpp",
"Runtime/DataView.cpp",
"Runtime/DataViewConstructor.cpp",
"Runtime/DataViewPrototype.cpp",
"Runtime/Date.cpp",
"Runtime/DateConstructor.cpp",
"Runtime/DatePrototype.cpp",
"Runtime/DeclarativeEnvironment.cpp",
"Runtime/DisposableStack.cpp",
"Runtime/DisposableStackConstructor.cpp",
"Runtime/DisposableStackPrototype.cpp",
"Runtime/ECMAScriptFunctionObject.cpp",
"Runtime/Environment.cpp",
"Runtime/Error.cpp",
"Runtime/ErrorConstructor.cpp",
"Runtime/ErrorPrototype.cpp",
"Runtime/ErrorTypes.cpp",
"Runtime/ExecutionContext.cpp",
"Runtime/FinalizationRegistry.cpp",
"Runtime/FinalizationRegistryConstructor.cpp",
"Runtime/FinalizationRegistryPrototype.cpp",
"Runtime/FunctionConstructor.cpp",
"Runtime/FunctionEnvironment.cpp",
"Runtime/FunctionObject.cpp",
"Runtime/FunctionPrototype.cpp",
"Runtime/GeneratorFunctionConstructor.cpp",
"Runtime/GeneratorFunctionPrototype.cpp",
"Runtime/GeneratorObject.cpp",
"Runtime/GeneratorPrototype.cpp",
"Runtime/GlobalEnvironment.cpp",
"Runtime/GlobalObject.cpp",
"Runtime/IndexedProperties.cpp",
"Runtime/Intl/AbstractOperations.cpp",
"Runtime/Intl/Collator.cpp",
"Runtime/Intl/CollatorCompareFunction.cpp",
"Runtime/Intl/CollatorConstructor.cpp",
"Runtime/Intl/CollatorPrototype.cpp",
"Runtime/Intl/DateTimeFormat.cpp",
"Runtime/Intl/DateTimeFormatConstructor.cpp",
"Runtime/Intl/DateTimeFormatFunction.cpp",
"Runtime/Intl/DateTimeFormatPrototype.cpp",
"Runtime/Intl/DisplayNames.cpp",
"Runtime/Intl/DisplayNamesConstructor.cpp",
"Runtime/Intl/DisplayNamesPrototype.cpp",
"Runtime/Intl/DurationFormat.cpp",
"Runtime/Intl/DurationFormatConstructor.cpp",
"Runtime/Intl/DurationFormatPrototype.cpp",
"Runtime/Intl/Intl.cpp",
"Runtime/Intl/ListFormat.cpp",
"Runtime/Intl/ListFormatConstructor.cpp",
"Runtime/Intl/ListFormatPrototype.cpp",
"Runtime/Intl/Locale.cpp",
"Runtime/Intl/LocaleConstructor.cpp",
"Runtime/Intl/LocalePrototype.cpp",
"Runtime/Intl/MathematicalValue.cpp",
"Runtime/Intl/NumberFormat.cpp",
"Runtime/Intl/NumberFormatConstructor.cpp",
"Runtime/Intl/NumberFormatFunction.cpp",
"Runtime/Intl/NumberFormatPrototype.cpp",
"Runtime/Intl/PluralRules.cpp",
"Runtime/Intl/PluralRulesConstructor.cpp",
"Runtime/Intl/PluralRulesPrototype.cpp",
"Runtime/Intl/RelativeTimeFormat.cpp",
"Runtime/Intl/RelativeTimeFormatConstructor.cpp",
"Runtime/Intl/RelativeTimeFormatPrototype.cpp",
"Runtime/Intl/SegmentIterator.cpp",
"Runtime/Intl/SegmentIteratorPrototype.cpp",
"Runtime/Intl/Segmenter.cpp",
"Runtime/Intl/SegmenterConstructor.cpp",
"Runtime/Intl/SegmenterPrototype.cpp",
"Runtime/Intl/Segments.cpp",
"Runtime/Intl/SegmentsPrototype.cpp",
"Runtime/Intrinsics.cpp",
"Runtime/Iterator.cpp",
"Runtime/IteratorConstructor.cpp",
"Runtime/IteratorHelper.cpp",
"Runtime/IteratorHelperPrototype.cpp",
"Runtime/IteratorPrototype.cpp",
"Runtime/JSONObject.cpp",
"Runtime/JobCallback.cpp",
"Runtime/KeyedCollections.cpp",
"Runtime/Map.cpp",
"Runtime/MapConstructor.cpp",
"Runtime/MapIterator.cpp",
"Runtime/MapIteratorPrototype.cpp",
"Runtime/MapPrototype.cpp",
"Runtime/MathObject.cpp",
"Runtime/ModuleEnvironment.cpp",
"Runtime/ModuleNamespaceObject.cpp",
"Runtime/NativeFunction.cpp",
"Runtime/NumberConstructor.cpp",
"Runtime/NumberObject.cpp",
"Runtime/NumberPrototype.cpp",
"Runtime/Object.cpp",
"Runtime/ObjectConstructor.cpp",
"Runtime/ObjectEnvironment.cpp",
"Runtime/ObjectPrototype.cpp",
"Runtime/PrimitiveString.cpp",
"Runtime/PrivateEnvironment.cpp",
"Runtime/Promise.cpp",
"Runtime/PromiseCapability.cpp",
"Runtime/PromiseConstructor.cpp",
"Runtime/PromiseJobs.cpp",
"Runtime/PromisePrototype.cpp",
"Runtime/PromiseReaction.cpp",
"Runtime/PromiseResolvingElementFunctions.cpp",
"Runtime/PromiseResolvingFunction.cpp",
"Runtime/PropertyDescriptor.cpp",
"Runtime/ProxyConstructor.cpp",
"Runtime/ProxyObject.cpp",
"Runtime/Realm.cpp",
"Runtime/Reference.cpp",
"Runtime/ReflectObject.cpp",
"Runtime/RegExpConstructor.cpp",
"Runtime/RegExpLegacyStaticProperties.cpp",
"Runtime/RegExpObject.cpp",
"Runtime/RegExpPrototype.cpp",
"Runtime/RegExpStringIterator.cpp",
"Runtime/RegExpStringIteratorPrototype.cpp",
"Runtime/Set.cpp",
"Runtime/SetConstructor.cpp",
"Runtime/SetIterator.cpp",
"Runtime/SetIteratorPrototype.cpp",
"Runtime/SetPrototype.cpp",
"Runtime/Shape.cpp",
"Runtime/SharedArrayBufferConstructor.cpp",
"Runtime/SharedArrayBufferPrototype.cpp",
"Runtime/StringConstructor.cpp",
"Runtime/StringIterator.cpp",
"Runtime/StringIteratorPrototype.cpp",
"Runtime/StringObject.cpp",
"Runtime/StringPrototype.cpp",
"Runtime/SuppressedError.cpp",
"Runtime/SuppressedErrorConstructor.cpp",
"Runtime/SuppressedErrorPrototype.cpp",
"Runtime/Symbol.cpp",
"Runtime/SymbolConstructor.cpp",
"Runtime/SymbolObject.cpp",
"Runtime/SymbolPrototype.cpp",
"Runtime/Temporal/AbstractOperations.cpp",
"Runtime/Temporal/Calendar.cpp",
"Runtime/Temporal/CalendarConstructor.cpp",
"Runtime/Temporal/CalendarPrototype.cpp",
"Runtime/Temporal/Duration.cpp",
"Runtime/Temporal/DurationConstructor.cpp",
"Runtime/Temporal/DurationPrototype.cpp",
"Runtime/Temporal/ISO8601.cpp",
"Runtime/Temporal/Instant.cpp",
"Runtime/Temporal/InstantConstructor.cpp",
"Runtime/Temporal/InstantPrototype.cpp",
"Runtime/Temporal/Now.cpp",
"Runtime/Temporal/PlainDate.cpp",
"Runtime/Temporal/PlainDateConstructor.cpp",
"Runtime/Temporal/PlainDatePrototype.cpp",
"Runtime/Temporal/PlainDateTime.cpp",
"Runtime/Temporal/PlainDateTimeConstructor.cpp",
"Runtime/Temporal/PlainDateTimePrototype.cpp",
"Runtime/Temporal/PlainMonthDay.cpp",
"Runtime/Temporal/PlainMonthDayConstructor.cpp",
"Runtime/Temporal/PlainMonthDayPrototype.cpp",
"Runtime/Temporal/PlainTime.cpp",
"Runtime/Temporal/PlainTimeConstructor.cpp",
"Runtime/Temporal/PlainTimePrototype.cpp",
"Runtime/Temporal/PlainYearMonth.cpp",
"Runtime/Temporal/PlainYearMonthConstructor.cpp",
"Runtime/Temporal/PlainYearMonthPrototype.cpp",
"Runtime/Temporal/Temporal.cpp",
"Runtime/Temporal/TimeZone.cpp",
"Runtime/Temporal/TimeZoneConstructor.cpp",
"Runtime/Temporal/TimeZoneMethods.cpp",
"Runtime/Temporal/TimeZonePrototype.cpp",
"Runtime/Temporal/ZonedDateTime.cpp",
"Runtime/Temporal/ZonedDateTimeConstructor.cpp",
"Runtime/Temporal/ZonedDateTimePrototype.cpp",
"Runtime/TypedArray.cpp",
"Runtime/TypedArrayConstructor.cpp",
"Runtime/TypedArrayPrototype.cpp",
"Runtime/Uint8Array.cpp",
"Runtime/Utf16String.cpp",
"Runtime/VM.cpp",
"Runtime/Value.cpp",
"Runtime/WeakContainer.cpp",
"Runtime/WeakMap.cpp",
"Runtime/WeakMapConstructor.cpp",
"Runtime/WeakMapPrototype.cpp",
"Runtime/WeakRef.cpp",
"Runtime/WeakRefConstructor.cpp",
"Runtime/WeakRefPrototype.cpp",
"Runtime/WeakSet.cpp",
"Runtime/WeakSetConstructor.cpp",
"Runtime/WeakSetPrototype.cpp",
"Runtime/WrapForValidIteratorPrototype.cpp",
"Runtime/WrappedFunction.cpp",
"Script.cpp",
"SourceCode.cpp",
"SourceTextModule.cpp",
"SyntaxHighlighter.cpp",
"SyntheticModule.cpp",
"Token.cpp",
]
}

View file

@ -1,16 +0,0 @@
shared_library("LibLine") {
output_name = "line"
include_dirs = [ "//Userland/Libraries" ]
deps = [
"//AK",
"//Userland/Libraries/LibCore",
"//Userland/Libraries/LibUnicode",
]
sources = [
"Editor.cpp",
"InternalFunctions.cpp",
"KeyCallbackMachine.cpp",
"SuggestionManager.cpp",
"XtermSuggestionDisplay.cpp",
]
}

View file

@ -1,9 +0,0 @@
static_library("LibMain") {
include_dirs = [ "//Userland/Libraries" ]
sources = [
"Main.cpp",
"Main.h",
]
deps = [ "//AK" ]
output_name = "main"
}

View file

@ -1,58 +0,0 @@
import("//Meta/gn/build/libs/ffmpeg/enable.gni")
import("//Meta/gn/build/libs/pulse/enable.gni")
shared_library("LibMedia") {
include_dirs = [ "//Userland/Libraries" ]
sources = [
"Audio/PlaybackStream.cpp",
"Audio/SampleFormats.cpp",
"Color/ColorConverter.cpp",
"Color/ColorPrimaries.cpp",
"Color/TransferCharacteristics.cpp",
"Containers/Matroska/MatroskaDemuxer.cpp",
"Containers/Matroska/Reader.cpp",
"PlaybackManager.cpp",
"PlaybackStates/PlaybackStateHandler.cpp",
"Providers/AudioDataProvider.cpp",
"Providers/GenericTimeProvider.cpp",
"Providers/VideoDataProvider.cpp",
"Sinks/AudioMixingSink.cpp",
"Sinks/DisplayingVideoSink.cpp",
"VideoFrame.cpp",
]
if (enable_pulseaudio) {
sources += [
"Audio/PlaybackStreamPulseAudio.cpp",
"Audio/PulseAudioWrappers.cpp",
]
}
if (enable_ffmpeg) {
sources += [
"FFmpeg/FFmpegAudioConverter.cpp",
"FFmpeg/FFmpegAudioDecoder.cpp",
"FFmpeg/FFmpegHelpers.cpp",
"FFmpeg/FFmpegVideoDecoder.cpp",
]
} else {
sources += [ "FFmpeg/FFmpegVideoDecoderStub.cpp" ]
}
if (current_os == "mac") {
sources += [ "Audio/PlaybackStreamAudioUnit.cpp" ]
frameworks = [
"AudioToolbox.framework",
"AudioUnit.framework",
]
}
deps = [
"//AK",
"//Meta/gn/build/libs/ffmpeg",
"//Meta/gn/build/libs/pulse",
"//Userland/Libraries/LibCore",
"//Userland/Libraries/LibCrypto",
"//Userland/Libraries/LibGfx",
"//Userland/Libraries/LibIPC",
"//Userland/Libraries/LibThreading",
"//Userland/Libraries/LibUnicode",
]
output_name = "media"
}

View file

@ -1,15 +0,0 @@
shared_library("LibRegex") {
output_name = "regex"
include_dirs = [ "//Userland/Libraries" ]
sources = [
"RegexByteCode.cpp",
"RegexLexer.cpp",
"RegexMatcher.cpp",
"RegexOptimizer.cpp",
"RegexParser.cpp",
]
deps = [
"//AK",
"//Userland/Libraries/LibUnicode",
]
}

View file

@ -1,45 +0,0 @@
import("//Meta/gn/build/compiled_action.gni")
compiled_action("RequestClientEndpoint") {
tool = "//Meta/Lagom/Tools/CodeGenerators/IPCCompiler"
inputs = [ "//Userland/Services/RequestServer/RequestClient.ipc" ]
outputs = [ "$root_gen_dir/RequestServer/RequestClientEndpoint.h" ]
args = [
rebase_path(inputs[0], root_build_dir),
"-o",
rebase_path(outputs[0], root_build_dir),
]
}
compiled_action("RequestServerEndpoint") {
tool = "//Meta/Lagom/Tools/CodeGenerators/IPCCompiler"
inputs = [ "//Userland/Services/RequestServer/RequestServer.ipc" ]
outputs = [ "$root_gen_dir/RequestServer/RequestServerEndpoint.h" ]
args = [
rebase_path(inputs[0], root_build_dir),
"-o",
rebase_path(outputs[0], root_build_dir),
]
}
shared_library("LibRequests") {
output_name = "requests"
include_dirs = [
"//Userland/Libraries",
"//Userland/Services",
]
deps = [
":RequestClientEndpoint",
":RequestServerEndpoint",
"//AK",
"//Userland/Libraries/LibCore",
"//Userland/Libraries/LibIPC",
]
sources = [
"Request.cpp",
"RequestClient.cpp",
"WebSocket.cpp",
]
sources += get_target_outputs(":RequestClientEndpoint") +
get_target_outputs(":RequestServerEndpoint")
}

View file

@ -1,10 +0,0 @@
shared_library("LibSyntax") {
output_name = "syntax"
include_dirs = [ "//Userland/Libraries" ]
sources = [
"Document.cpp",
"Highlighter.cpp",
"Language.cpp",
]
deps = [ "//AK" ]
}

View file

@ -1,21 +0,0 @@
shared_library("LibTLS") {
output_name = "tls"
include_dirs = [ "//Userland/Libraries" ]
cflags_cc = [ "-Wvla" ]
sources = [
"Certificate.cpp",
"Handshake.cpp",
"HandshakeCertificate.cpp",
"HandshakeClient.cpp",
"HandshakeServer.cpp",
"Record.cpp",
"Socket.cpp",
"TLSv12.cpp",
]
deps = [
"//AK",
"//Userland/Libraries/LibCore",
"//Userland/Libraries/LibCrypto",
"//Userland/Libraries/LibFileSystem",
]
}

View file

@ -1,49 +0,0 @@
shared_library("LibTest") {
output_name = "test"
include_dirs = [ "//Userland/Libraries" ]
sources = [
"CrashTest.cpp",
"CrashTest.h",
"Macros.h",
"Randomized/Chunk.h",
"Randomized/Generator.h",
"Randomized/RandomRun.h",
"Randomized/RandomnessSource.h",
"Randomized/Shrink.h",
"Randomized/ShrinkCommand.h",
"Results.h",
"TestCase.h",
"TestRunner.h",
"TestRunnerUtil.h",
"TestSuite.cpp",
"TestSuite.h",
]
deps = [
"//AK",
"//Userland/Libraries/LibCore",
]
output_name = "test"
testonly = true
}
source_set("test_main") {
include_dirs = [ "//Userland/Libraries" ]
sources = [ "TestMain.cpp" ]
deps = [ "//AK" ]
public_deps = [ ":LibTest" ]
testonly = true
}
source_set("test_js_main") {
include_dirs = [ "//Userland/Libraries" ]
sources = [
"JavaScriptTestRunner.h",
"JavaScriptTestRunnerMain.cpp",
]
deps = [ "//AK" ]
public_deps = [ ":LibTest" ]
testonly = true
}

View file

@ -1,37 +0,0 @@
import("//Meta/gn/build/compiled_action.gni")
compiled_action("generate_encoding_indexes") {
tool =
"//Meta/Lagom/Tools/CodeGenerators/LibTextCodec:GenerateEncodingIndexes"
outputs = [
"$target_gen_dir/LookupTables.h",
"$target_gen_dir/LookupTables.cpp",
]
args = [
"-h",
rebase_path(outputs[0], root_build_dir),
"-c",
rebase_path(outputs[1], root_build_dir),
"-j",
rebase_path("//Userland/Libraries/LibTextCodec/indexes.json"),
]
}
shared_library("LibTextCodec") {
output_name = "textcodec"
include_dirs = [
"//Userland/Libraries",
"$target_gen_dir/..",
]
deps = [
":generate_encoding_indexes",
"//AK",
]
sources = [
"Decoder.cpp",
"Encoder.cpp",
]
sources += get_target_outputs(":generate_encoding_indexes")
}

View file

@ -1,12 +0,0 @@
shared_library("LibThreading") {
output_name = "threading"
include_dirs = [ "//Userland/Libraries" ]
sources = [
"BackgroundAction.cpp",
"Thread.cpp",
]
deps = [
"//AK",
"//Userland/Libraries/LibCore",
]
}

View file

@ -1,19 +0,0 @@
shared_library("LibURL") {
output_name = "url"
include_dirs = [ "//Userland/Libraries" ]
sources = [
"Forward.h",
"Host.h",
"Origin.cpp",
"Origin.h",
"Parser.cpp",
"Parser.h",
"URL.cpp",
"URL.h",
]
deps = [
"//AK",
"//Userland/Libraries/LibTextCodec",
"//Userland/Libraries/LibUnicode",
]
}

View file

@ -1,28 +0,0 @@
source_set("LibUnicode") {
output_name = "unicode"
include_dirs = [ "//Userland/Libraries" ]
sources = [
"CharacterTypes.cpp",
"Collator.cpp",
"CurrencyCode.cpp",
"DateTimeFormat.cpp",
"DisplayNames.cpp",
"DurationFormat.cpp",
"ICU.cpp",
"IDNA.cpp",
"ListFormat.cpp",
"Locale.cpp",
"Normalize.cpp",
"NumberFormat.cpp",
"PluralRules.cpp",
"RelativeTimeFormat.cpp",
"Segmenter.cpp",
"String.cpp",
"TimeZone.cpp",
"UnicodeKeywords.cpp",
]
deps = [
"//AK",
"//Meta/gn/build/libs/icu",
]
}

View file

@ -1,28 +0,0 @@
declare_args() {
# If true, download wasm spec tests from github.
# Tests will be used by test-wasm to verify spec compliance
include_wasm_spec_tests = false
}
if (include_wasm_spec_tests) {
# FIXME: Port wasm_spec_tests.cmake
}
shared_library("LibWasm") {
output_name = "wasm"
include_dirs = [ "//Userland/Libraries" ]
sources = [
"AbstractMachine/AbstractMachine.cpp",
"AbstractMachine/BytecodeInterpreter.cpp",
"AbstractMachine/Configuration.cpp",
"AbstractMachine/Validator.cpp",
"Parser/Parser.cpp",
"Printer/Printer.cpp",
"WASI/Wasi.cpp",
]
deps = [
"//AK",
"//Userland/Libraries/LibCore",
"//Userland/Libraries/LibJS",
]
}

View file

@ -1,16 +0,0 @@
source_set("ARIA") {
configs += [ "//Userland/Libraries/LibWeb:configs" ]
deps = [ "//Userland/Libraries/LibWeb:all_generated" ]
sources = [
"ARIAMixin.cpp",
"ARIAMixin.h",
"AriaData.cpp",
"AriaData.h",
"RoleType.cpp",
"RoleType.h",
"Roles.cpp",
"Roles.h",
"StateAndProperties.cpp",
"StateAndProperties.h",
]
}

Some files were not shown because too many files have changed in this diff Show more