CMakeLists.txt 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. include(cmake/ResourceFiles.cmake)
  2. set(LADYBIRD_SOURCES
  3. ${CMAKE_CURRENT_SOURCE_DIR}/HelperProcess.cpp
  4. ${CMAKE_CURRENT_SOURCE_DIR}/Utilities.cpp
  5. )
  6. set(LADYBIRD_HEADERS
  7. HelperProcess.h
  8. Utilities.h
  9. )
  10. function(create_ladybird_bundle target_name)
  11. set_target_properties(${target_name} PROPERTIES
  12. OUTPUT_NAME "Ladybird"
  13. MACOSX_BUNDLE_GUI_IDENTIFIER org.ladybird.Ladybird
  14. MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
  15. MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
  16. MACOSX_BUNDLE_INFO_PLIST "${LADYBIRD_SOURCE_DIR}/Ladybird/Info.plist"
  17. MACOSX_BUNDLE TRUE
  18. WIN32_EXECUTABLE TRUE
  19. XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER org.ladybird.Ladybird
  20. )
  21. if (APPLE)
  22. set(bundle_dir "$<TARGET_BUNDLE_DIR:${target_name}>")
  23. add_custom_command(TARGET ${target_name} POST_BUILD
  24. COMMAND "${CMAKE_COMMAND}" -E make_directory "${bundle_dir}/Contents/Resources"
  25. COMMAND "iconutil" --convert icns "${LADYBIRD_SOURCE_DIR}/Ladybird/Icons/macos/app_icon.iconset" --output "${bundle_dir}/Contents/Resources/app_icon.icns"
  26. )
  27. # Note: This symlink is removed in the install commands
  28. # This makes the bundle in the build directory *NOT* relocatable
  29. add_custom_command(TARGET ${target_name} POST_BUILD
  30. COMMAND "${CMAKE_COMMAND}" -E create_symlink "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}" "${bundle_dir}/Contents/lib"
  31. )
  32. if (NOT CMAKE_BUILD_TYPE MATCHES "Release|RelWithDebInfo" AND "arm64" IN_LIST CMAKE_OSX_ARCHITECTURES)
  33. add_custom_command(TARGET ${target_name} POST_BUILD
  34. COMMAND codesign -s - -v -f --entitlements "${LADYBIRD_SOURCE_DIR}/Meta/debug.plist" "${bundle_dir}"
  35. )
  36. else()
  37. add_custom_target(apply-debug-entitlements
  38. COMMAND codesign -s - -v -f --entitlements "${LADYBIRD_SOURCE_DIR}/Meta/debug.plist" "${bundle_dir}"
  39. USES_TERMINAL
  40. )
  41. endif()
  42. endif()
  43. if (APPLE)
  44. set(resource_base_dir "$<TARGET_BUNDLE_DIR:${target_name}>/Contents/Resources")
  45. else()
  46. set(resource_base_dir "${CMAKE_BINARY_DIR}/${IN_BUILD_PREFIX}${CMAKE_INSTALL_DATADIR}/Lagom")
  47. endif()
  48. copy_resources_to_build(${resource_base_dir} ${target_name})
  49. endfunction()
  50. # Select UI Framework
  51. if (ENABLE_QT)
  52. add_subdirectory(Qt)
  53. elseif (APPLE)
  54. add_subdirectory(AppKit)
  55. elseif(ANDROID)
  56. add_subdirectory(Android)
  57. else()
  58. # TODO: Check for other GUI frameworks here when we move them in-tree
  59. # For now, we can export a static library of common files for chromes to link to
  60. add_library(ladybird STATIC ${LADYBIRD_SOURCES})
  61. endif()
  62. if (NOT TARGET ladybird)
  63. message(FATAL_ERROR "UI Framework selection must declare a ladybird target")
  64. endif()
  65. if (APPLE)
  66. target_sources(ladybird PRIVATE MachPortServer.cpp)
  67. target_link_libraries(ladybird PRIVATE LibThreading)
  68. endif()
  69. if (ENABLE_INSTALL_HEADERS)
  70. target_sources(ladybird PUBLIC FILE_SET ladybird TYPE HEADERS
  71. BASE_DIRS ${LADYBIRD_SOURCE_DIR}
  72. FILES ${LADYBIRD_HEADERS}
  73. )
  74. endif()
  75. if (TARGET ladybird_impl)
  76. set(LADYBIRD_TARGET ladybird_impl PUBLIC)
  77. else()
  78. set(LADYBIRD_TARGET ladybird PRIVATE)
  79. endif()
  80. set(LADYBIRD_LIBS AK LibCore LibFileSystem LibGfx LibImageDecoderClient LibIPC LibJS LibMain LibWeb LibWebView LibRequests LibURL)
  81. target_link_libraries(${LADYBIRD_TARGET} PRIVATE ${LADYBIRD_LIBS})
  82. target_include_directories(${LADYBIRD_TARGET} ${CMAKE_CURRENT_BINARY_DIR})
  83. target_include_directories(${LADYBIRD_TARGET} ${LADYBIRD_SOURCE_DIR}/Userland/)
  84. target_include_directories(${LADYBIRD_TARGET} ${LADYBIRD_SOURCE_DIR}/Userland/Services/)
  85. function(set_helper_process_properties)
  86. set(targets ${ARGV})
  87. if (APPLE)
  88. # Store helper processes in the same bundle directory as the main application
  89. set_target_properties(${targets} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "$<TARGET_FILE_DIR:ladybird>")
  90. else()
  91. set_target_properties(${targets} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${IN_BUILD_PREFIX}${CMAKE_INSTALL_LIBEXECDIR}")
  92. if (NOT CMAKE_INSTALL_LIBEXECDIR STREQUAL "libexec")
  93. set_source_files_properties(Utilities.cpp PROPERTIES COMPILE_DEFINITIONS LADYBIRD_LIBEXECDIR="${CMAKE_INSTALL_LIBEXECDIR}")
  94. set_source_files_properties(Utilities.cpp TARGET_DIRECTORY ladybird PROPERTIES COMPILE_DEFINITIONS LADYBIRD_LIBEXECDIR="${CMAKE_INSTALL_LIBEXECDIR}")
  95. set_source_files_properties(Utilities.cpp TARGET_DIRECTORY ${targets} PROPERTIES COMPILE_DEFINITIONS LADYBIRD_LIBEXECDIR="${CMAKE_INSTALL_LIBEXECDIR}")
  96. endif()
  97. endif()
  98. endfunction()
  99. add_custom_target(run
  100. COMMAND "${CMAKE_COMMAND}" -E env "LADYBIRD_SOURCE_DIR=${LADYBIRD_SOURCE_DIR}" "$<TARGET_FILE:ladybird>" $ENV{LAGOM_ARGS}
  101. USES_TERMINAL
  102. VERBATIM
  103. )
  104. if (APPLE)
  105. add_custom_target(debug-ladybird
  106. COMMAND "${CMAKE_COMMAND}" -E env "LADYBIRD_SOURCE_DIR=${LADYBIRD_SOURCE_DIR}" lldb "$<TARGET_BUNDLE_DIR:ladybird>"
  107. USES_TERMINAL
  108. )
  109. else()
  110. add_custom_target(debug-ladybird
  111. COMMAND "${CMAKE_COMMAND}" -E env "LADYBIRD_SOURCE_DIR=${LADYBIRD_SOURCE_DIR}" gdb "$<TARGET_FILE:ladybird>"
  112. USES_TERMINAL
  113. )
  114. endif()
  115. add_subdirectory(Headless)
  116. add_subdirectory(ImageDecoder)
  117. add_subdirectory(RequestServer)
  118. add_subdirectory(WebContent)
  119. add_subdirectory(WebDriver)
  120. add_subdirectory(WebWorker)
  121. set(ladybird_helper_processes ImageDecoder RequestServer WebContent WebWorker)
  122. add_dependencies(ladybird ${ladybird_helper_processes})
  123. add_dependencies(headless-browser ${ladybird_helper_processes})
  124. add_dependencies(WebDriver ladybird headless-browser)
  125. set_helper_process_properties(${ladybird_helper_processes})
  126. if (APPLE)
  127. set_helper_process_properties(headless-browser WebDriver)
  128. endif()
  129. if(NOT CMAKE_SKIP_INSTALL_RULES)
  130. include(cmake/InstallRules.cmake)
  131. endif()