CMakeLists.txt 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. cmake_minimum_required(VERSION 3.25)
  2. if (VCPKG_TARGET_ANDROID)
  3. # If we are building for Android, we must load vcpkg_android.cmake before the project() declaration.
  4. # This ensures that the CMAKE_TOOLCHAIN_FILE is set correctly.
  5. # (we cannot set CMAKE_TOOLCHAIN_FILE from Gradle, unfortunately, so this is the only place we can do it.)
  6. include("Ladybird/Android/vcpkg_android.cmake")
  7. endif()
  8. # Pass additional information to vcpkg toolchain files if we are using vcpkg.
  9. if (CMAKE_TOOLCHAIN_FILE MATCHES "vcpkg.cmake$")
  10. set(CMAKE_PROJECT_ladybird_INCLUDE_BEFORE "Meta/CMake/vcpkg/generate_vcpkg_toolchain_variables.cmake")
  11. endif()
  12. project(ladybird
  13. VERSION 0.1.0
  14. LANGUAGES C CXX
  15. DESCRIPTION "Ladybird Web Browser"
  16. HOMEPAGE_URL "https://ladybird.org"
  17. )
  18. if (ANDROID OR IOS)
  19. set(BUILD_SHARED_LIBS OFF)
  20. endif()
  21. set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
  22. set(LADYBIRD_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
  23. list(APPEND CMAKE_MODULE_PATH "${LADYBIRD_SOURCE_DIR}/Meta/CMake")
  24. include(Ladybird/cmake/EnableLagom.cmake)
  25. include(use_linker)
  26. include(lagom_options NO_POLICY_SCOPE)
  27. include(lagom_compile_options)
  28. if (ENABLE_ADDRESS_SANITIZER)
  29. add_cxx_compile_options(-fsanitize=address -fno-omit-frame-pointer)
  30. add_cxx_link_options(-fsanitize=address)
  31. add_swift_compile_options(-sanitize=address)
  32. add_swift_link_options(-sanitize=address)
  33. endif()
  34. if (ENABLE_MEMORY_SANITIZER)
  35. add_cxx_compile_options(-fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer)
  36. add_cxx_link_options(-fsanitize=memory -fsanitize-memory-track-origins)
  37. endif()
  38. if (ENABLE_UNDEFINED_SANITIZER AND (APPLE OR NOT ENABLE_SWIFT))
  39. add_cxx_compile_options(-fsanitize=undefined -fno-omit-frame-pointer)
  40. if (UNDEFINED_BEHAVIOR_IS_FATAL)
  41. add_cxx_compile_options(-fno-sanitize-recover=undefined)
  42. endif()
  43. if (APPLE AND CMAKE_CXX_COMPILER_ID MATCHES "Clang$" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "17")
  44. add_cxx_compile_options(-fno-sanitize=function)
  45. endif()
  46. add_cxx_link_options(-fsanitize=undefined)
  47. add_swift_compile_options(-sanitize=undefined)
  48. add_swift_link_options(-sanitize=undefined)
  49. endif()
  50. if (HAIKU)
  51. # Haiku needs some extra compile definitions to make important stuff in its headers available.
  52. add_compile_definitions(_DEFAULT_SOURCE)
  53. add_compile_definitions(_GNU_SOURCE)
  54. add_compile_definitions(__USE_GNU)
  55. endif()
  56. add_cxx_compile_options(-Wno-expansion-to-defined)
  57. add_cxx_compile_options(-Wno-user-defined-literals)
  58. if (ANDROID OR APPLE)
  59. serenity_option(ENABLE_QT OFF CACHE BOOL "Build ladybird application using Qt GUI")
  60. else()
  61. serenity_option(ENABLE_QT ON CACHE BOOL "Build ladybird application using Qt GUI")
  62. endif()
  63. if (ANDROID AND ENABLE_QT)
  64. message(STATUS "Disabling Qt for Android")
  65. set(ENABLE_QT OFF CACHE BOOL "" FORCE)
  66. endif()
  67. if (ENABLE_QT AND ENABLE_GUI_TARGETS)
  68. set(CMAKE_AUTOMOC ON)
  69. set(CMAKE_AUTORCC ON)
  70. set(CMAKE_AUTOUIC ON)
  71. find_package(Qt6 REQUIRED COMPONENTS Core Widgets Network)
  72. endif()
  73. include(CTest) # for BUILD_TESTING option, default ON
  74. if (ENABLE_GUI_TARGETS)
  75. add_subdirectory(Ladybird)
  76. endif()
  77. add_custom_target(lint-shell-scripts
  78. COMMAND "${ladybird_SOURCE_DIR}/Meta/lint-shell-scripts.sh"
  79. USES_TERMINAL
  80. )
  81. find_package(Python3 COMPONENTS Interpreter)
  82. if (Python3_FOUND)
  83. add_custom_target(check-style
  84. COMMAND ${Python3_EXECUTABLE} "${ladybird_SOURCE_DIR}/Meta/check-style.py"
  85. USES_TERMINAL
  86. )
  87. endif()