Meta: Move most dependency checks to check_for_dependencies.cmake

This file was here for quite a long while now. Let's finally move most
of the dependency checks to one centralized place.
This commit is contained in:
Undefine
2026-03-29 17:43:46 +02:00
committed by Andrew Kaster
parent 8721dbe094
commit e39a8719fd
Notes: github-actions[bot] 2026-04-20 22:42:44 +00:00
20 changed files with 56 additions and 80 deletions

View File

@@ -50,8 +50,6 @@ ladybird_lib(AK ak)
configure_file(Debug.h.in Debug.h @ONLY)
find_package(cpptrace CONFIG)
find_package(Backtrace)
if(cpptrace_FOUND AND LADYBIRD_ENABLE_CPPTRACE)
target_link_libraries(AK PRIVATE cpptrace::cpptrace)
@@ -68,14 +66,7 @@ else()
endif()
configure_file(Backtrace.h.in Backtrace.h @ONLY)
find_package(simdutf REQUIRED)
target_link_libraries(AK PRIVATE simdutf::simdutf)
find_package(FastFloat CONFIG REQUIRED)
target_link_libraries(AK PRIVATE FastFloat::fast_float)
find_package(fmt CONFIG REQUIRED)
target_link_libraries(AK PRIVATE fmt::fmt)
target_link_libraries(AK PRIVATE FastFloat::fast_float fmt::fmt simdutf::simdutf)
set(MIMALLOC_VISIBILITY PRIVATE)
if (NOT BUILD_SHARED_LIBS)

View File

@@ -42,9 +42,6 @@ endif()
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# We need to find OpenSSL in order to link it explicitly with all targets.
find_package(OpenSSL REQUIRED)
# Ensure that when single-value arguments are passed to `cmake_parse_arguments()`
# with no or empty string arguments, they are still defined.
if (POLICY CMP0174)
@@ -63,8 +60,6 @@ if(ENABLE_ALL_THE_DEBUG_MACROS)
include(all_the_debug_macros)
endif()
find_package(Threads REQUIRED)
if (ENABLE_LAGOM_CCACHE)
include(setup_ccache)
endif()
@@ -129,13 +124,6 @@ include_directories(${CMAKE_BINARY_DIR}/Services)
include(lagom_install)
if (WIN32)
find_package(pthread REQUIRED)
find_package(mman REQUIRED)
endif()
find_package(mimalloc CONFIG REQUIRED)
include(rust_crate)
include(targets)
@@ -184,7 +172,6 @@ add_custom_target(lint-shell-scripts
USES_TERMINAL
)
find_package(Python3 COMPONENTS Interpreter)
if (Python3_FOUND)
add_custom_target(check-style
COMMAND ${Python3_EXECUTABLE} "${ladybird_SOURCE_DIR}/Meta/check-style.py"

View File

@@ -9,5 +9,4 @@ set(SOURCES
ladybird_lib(LibCompress compress)
target_link_libraries(LibCompress PRIVATE LibCore LibCrypto)
find_package(ZLIB REQUIRED)
target_link_libraries(LibCompress PRIVATE ZLIB::ZLIB)

View File

@@ -32,9 +32,5 @@ set(SOURCES
ladybird_lib(LibCrypto crypto)
find_package(PkgConfig REQUIRED)
pkg_check_modules(libtommath REQUIRED IMPORTED_TARGET libtommath)
target_link_libraries(LibCrypto PRIVATE PkgConfig::libtommath)
find_package(OpenSSL REQUIRED)
target_link_libraries(LibCrypto PUBLIC OpenSSL::Crypto)

View File

@@ -2,8 +2,6 @@ set(SOURCES
Database.cpp
)
find_package(SQLite3 REQUIRED)
ladybird_lib(LibDatabase database EXPLICIT_SYMBOL_EXPORT)
target_link_libraries(LibDatabase PRIVATE LibCore)

View File

@@ -15,7 +15,6 @@ set(SOURCES
ladybird_lib(LibGC gc EXPLICIT_SYMBOL_EXPORT)
target_link_libraries(LibGC PRIVATE LibCore)
find_package(cpptrace CONFIG)
if(cpptrace_FOUND AND LADYBIRD_ENABLE_CPPTRACE)
target_link_libraries(LibGC PRIVATE cpptrace::cpptrace)
target_compile_definitions(LibGC PRIVATE LIBGC_HAS_CPPTRACE=1)

View File

@@ -83,8 +83,6 @@ target_link_libraries(LibGfx PRIVATE LibCompress LibCore LibCrypto LibFileSystem
set(generated_sources TIFFMetadata.h TIFFTagHandler.cpp)
list(TRANSFORM generated_sources PREPEND "ImageFormats/")
find_package(Python3 COMPONENTS Interpreter REQUIRED)
add_custom_command(
OUTPUT ${generated_sources}
COMMAND ${Python3_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/TIFFGenerator.py" -o "${CMAKE_CURRENT_BINARY_DIR}/ImageFormats"
@@ -105,16 +103,6 @@ if (ENABLE_INSTALL_HEADERS)
install(FILES ${generated_sources} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/LibGfx/ImageFormats")
endif()
# Third-party
find_package(PkgConfig)
pkg_check_modules(WOFF2 REQUIRED IMPORTED_TARGET libwoff2dec)
find_package(JPEG REQUIRED)
find_package(PNG REQUIRED)
find_package(LIBAVIF REQUIRED)
find_package(WebP REQUIRED)
find_package(harfbuzz REQUIRED)
target_link_libraries(LibGfx PRIVATE PkgConfig::WOFF2 JPEG::JPEG PNG::PNG avif WebP::webp WebP::webpdecoder
WebP::webpdemux WebP::libwebpmux skia harfbuzz)
@@ -140,7 +128,6 @@ if (NOT LIBPNG_HAS_APNG)
endif()
if (NOT ANDROID)
pkg_check_modules(Jxl REQUIRED IMPORTED_TARGET libjxl)
# FIXME: Build vcpkg libraries with clang-cl so they can also build in sanitize.
# https://github.com/LadybirdBrowser/ladybird/issues/5224
if (WIN32 AND ENABLE_ADDRESS_SANITIZER)
@@ -150,8 +137,6 @@ if (NOT ANDROID)
endif()
target_link_libraries(LibGfx PRIVATE PkgConfig::Jxl)
else()
find_package(libjxl REQUIRED)
find_package(hwy REQUIRED)
target_link_libraries(LibGfx PRIVATE libjxl::libjxl hwy::hwy)
endif()

View File

@@ -269,10 +269,7 @@ set(GENERATED_SOURCES Bytecode/Op.cpp)
ladybird_lib(LibJS js EXPLICIT_SYMBOL_EXPORT)
find_package(simdjson CONFIG REQUIRED)
target_link_libraries(LibJS PRIVATE simdjson::simdjson)
target_link_libraries(LibJS PRIVATE LibCore LibCrypto LibFileSystem LibRegex LibSyntax LibGC)
target_link_libraries(LibJS PRIVATE LibCore LibCrypto LibFileSystem LibRegex LibSyntax LibGC simdjson::simdjson)
# Link LibUnicode publicly to ensure ICU data (which is in libicudata.a) is available in any process using LibJS.
target_link_libraries(LibJS PUBLIC LibUnicode)

View File

@@ -7,5 +7,4 @@ set(SOURCES
ladybird_lib(LibTLS tls)
target_link_libraries(LibTLS PRIVATE LibCore LibCrypto LibFileSystem)
find_package(OpenSSL REQUIRED)
target_link_libraries(LibTLS PUBLIC OpenSSL::SSL)

View File

@@ -8,7 +8,6 @@ ladybird_lib(LibThreading threading)
target_link_libraries(LibThreading PRIVATE LibCore)
if (WIN32)
find_package(pthread REQUIRED)
target_include_directories(LibThreading PUBLIC $<BUILD_INTERFACE:${PTHREAD_INCLUDE_DIR}>)
target_link_libraries(LibThreading PUBLIC ${PTHREAD_LIBRARY})
endif()

View File

@@ -27,7 +27,6 @@ set(GENERATED_SOURCES ${CURRENT_LIB_GENERATED})
ladybird_lib(LibUnicode unicode)
find_package(ICU 78.2 EXACT REQUIRED COMPONENTS data i18n uc)
target_link_libraries(LibUnicode PRIVATE ICU::i18n ICU::uc ICU::data)
import_rust_crate(MANIFEST_PATH Rust/Cargo.toml CRATE_NAME libunicode_rust FEATURES allocator FFI_HEADER RustFFI.h)

View File

@@ -4,15 +4,6 @@ include(vulkan)
include(skia)
include(SDL3)
find_package(unofficial-angle CONFIG)
if(unofficial-angle_FOUND)
set(ANGLE_TARGETS unofficial::angle::libEGL unofficial::angle::libGLESv2)
else()
find_package(PkgConfig)
pkg_check_modules(angle REQUIRED IMPORTED_TARGET angle)
set(ANGLE_TARGETS PkgConfig::angle)
endif()
set(SOURCES
Animations/Animatable.cpp
Animations/Animation.cpp
@@ -1231,8 +1222,6 @@ set(GENERATED_SOURCES
ladybird_lib(LibWeb web EXPLICIT_SYMBOL_EXPORT)
find_package(LibXml2 REQUIRED)
target_link_libraries(LibWeb PRIVATE LibCore LibCompress LibCrypto LibJS LibHTTP LibGfx LibIPC LibRegex LibSyntax LibTextCodec LibUnicode LibMedia LibWasm LibXML LibIDL LibURL LibTLS LibRequests LibGC LibThreading skia ${ANGLE_TARGETS} SDL3::SDL3 LibXml2::LibXml2)
if (HAS_FONTCONFIG)

View File

@@ -5,5 +5,4 @@ set(SOURCES
ladybird_lib(LibXML xml EXPLICIT_SYMBOL_EXPORT)
find_package(LibXml2 REQUIRED)
target_link_libraries(LibXML PRIVATE LibXml2::LibXml2)

View File

@@ -5,7 +5,6 @@ if (APPLE AND NOT IOS)
set(LADYBIRD_AUDIO_BACKEND "AUDIO_UNIT")
return()
elseif (NOT WIN32)
find_package(PkgConfig REQUIRED)
pkg_check_modules(PULSEAUDIO IMPORTED_TARGET libpulse)
if (PULSEAUDIO_FOUND)

View File

@@ -1,5 +1,55 @@
#
# Check for the dependencies that the Serenity (target) and Lagom (host) builds require.
#
include_guard()
# None at the moment!
find_package(PkgConfig REQUIRED)
find_package(mimalloc CONFIG REQUIRED)
# AK dependencies
find_package(Backtrace)
find_package(cpptrace CONFIG)
find_package(FastFloat CONFIG REQUIRED)
find_package(fmt CONFIG REQUIRED)
find_package(simdutf REQUIRED)
# LibGfx dependencies
find_package(harfbuzz REQUIRED)
find_package(JPEG REQUIRED)
find_package(LIBAVIF REQUIRED)
find_package(PNG REQUIRED)
find_package(WebP REQUIRED)
pkg_check_modules(WOFF2 REQUIRED IMPORTED_TARGET libwoff2dec)
# TODO: Figure out if we can do this the same way on all platforms
if (NOT ANDROID)
pkg_check_modules(Jxl REQUIRED IMPORTED_TARGET libjxl)
else()
find_package(libjxl REQUIRED)
find_package(hwy REQUIRED)
endif()
find_package(CURL REQUIRED)
find_package(ICU 78.2 EXACT REQUIRED COMPONENTS data i18n uc)
find_package(LibXml2 REQUIRED)
find_package(OpenSSL REQUIRED)
find_package(simdjson CONFIG REQUIRED)
find_package(SQLite3 REQUIRED)
find_package(Threads REQUIRED)
find_package(ZLIB REQUIRED)
pkg_check_modules(libtommath REQUIRED IMPORTED_TARGET libtommath)
find_package(unofficial-angle CONFIG)
if(unofficial-angle_FOUND)
set(ANGLE_TARGETS unofficial::angle::libEGL unofficial::angle::libGLESv2)
else()
pkg_check_modules(angle REQUIRED IMPORTED_TARGET angle)
set(ANGLE_TARGETS PkgConfig::angle)
endif()
if (WIN32)
find_package(pthread REQUIRED)
find_package(mman REQUIRED)
endif()
find_package(Python3 REQUIRED COMPONENTS Interpreter)

View File

@@ -93,7 +93,6 @@ endfunction()
function(invoke_py_generator name script primary_source header implementation)
cmake_parse_arguments(invoke_py_generator "" "EXTRA_HEADER" "arguments;dependencies" ${ARGN})
find_package(Python3 REQUIRED COMPONENTS Interpreter)
set(py_generator_arguments ${invoke_py_generator_arguments})
if (invoke_py_generator_EXTRA_HEADER)

View File

@@ -29,9 +29,6 @@ endif()
add_library(requestserverservice ${RS_LIB_TYPE} ${SOURCES} ${GENERATED_SOURCES})
ladybird_generated_sources(requestserverservice)
find_package(PkgConfig)
find_package(CURL REQUIRED)
add_executable(RequestServer main.cpp)
target_include_directories(requestserverservice PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/../..)

View File

@@ -22,7 +22,6 @@ target_include_directories(WebWorker PRIVATE ${LADYBIRD_SOURCE_DIR})
target_link_libraries(WebWorker PRIVATE webworkerservice OpenSSL::Crypto OpenSSL::SSL)
if(WIN32)
find_package(pthread REQUIRED)
target_include_directories(WebWorker PRIVATE $<BUILD_INTERFACE:${PTHREAD_INCLUDE_DIR}>)
lagom_windows_bin(WebWorker CONSOLE)
endif()

View File

@@ -1,8 +1,6 @@
include(clang_development)
include(AddLLVM)
find_package(Python3 REQUIRED COMPONENTS Interpreter)
get_property(CLANG_PLUGINS_COMPILE_OPTIONS_FOR_TESTS GLOBAL PROPERTY CLANG_PLUGINS_COMPILE_OPTIONS_FOR_TESTS)
list(APPEND CLANG_PLUGINS_COMPILE_OPTIONS_FOR_TESTS

View File

@@ -18,7 +18,6 @@ if (APPLE)
target_compile_definitions(test-web PRIVATE LADYBIRD_BINARY_PATH="$<TARGET_FILE_DIR:ladybird>")
elseif (WIN32)
target_link_libraries(test-web PRIVATE LibDevTools)
find_package(pthread REQUIRED)
target_include_directories(test-web PRIVATE $<BUILD_INTERFACE:${PTHREAD_INCLUDE_DIR}>)
lagom_windows_bin(test-web CONSOLE)
endif()
@@ -29,8 +28,6 @@ if (WIN32)
endif()
if (BUILD_TESTING)
find_package(Python3 REQUIRED)
add_test(
NAME LibWeb
COMMAND $<TARGET_FILE:test-web> --python-executable ${Python3_EXECUTABLE} --per-test-timeout 120 -v -v