CMake+Userland: Use CMakeLists from Userland to build Lagom Libraries

Also do this for Shell.

This greatly simplifies the CMakeLists in Lagom, replacing many glob
patterns with a big list of libraries. There are still a few special
libraries that need some help to conform to the pattern, like LibELF and
LibWebView.

It also lets us remove essentially all of the Serenity or Lagom binary
directory detection logic from code generators, as now both projects
directories enter the generator logic from the same place.
This commit is contained in:
Andrew Kaster 2022-10-13 20:14:36 -06:00 committed by Linus Groh
parent a01c0e81f3
commit 1ae0cfd08b
Notes: sideshowbarker 2024-07-17 06:40:35 +09:00
12 changed files with 217 additions and 461 deletions

View file

@ -1,24 +1,12 @@
function (generate_css_implementation) function (generate_css_implementation)
set(LIBWEB_INPUT_FOLDER "${CMAKE_CURRENT_SOURCE_DIR}")
if (CMAKE_CURRENT_BINARY_DIR MATCHES ".*/LibWeb")
# Serenity build
SET(LIBWEB_INPUT_FOLDER "${CMAKE_CURRENT_SOURCE_DIR}")
SET(LIBWEB_OUTPUT_FOLDER "")
SET(LIBWEB_META_PREFIX "")
else()
# Lagom Build
SET(LIBWEB_INPUT_FOLDER "${CMAKE_CURRENT_SOURCE_DIR}/../../Userland/Libraries/LibWeb")
SET(LIBWEB_OUTPUT_FOLDER "LibWeb/")
SET(LIBWEB_META_PREFIX "Lagom")
endif()
invoke_generator( invoke_generator(
"Enums.cpp" "Enums.cpp"
Lagom::GenerateCSSEnums Lagom::GenerateCSSEnums
"${LIBWEB_INPUT_FOLDER}/CSS/Enums.json" "${LIBWEB_INPUT_FOLDER}/CSS/Enums.json"
"${LIBWEB_META_PREFIX}" ""
"${LIBWEB_OUTPUT_FOLDER}CSS/Enums.h" "CSS/Enums.h"
"${LIBWEB_OUTPUT_FOLDER}CSS/Enums.cpp" "CSS/Enums.cpp"
arguments -j "${LIBWEB_INPUT_FOLDER}/CSS/Enums.json" arguments -j "${LIBWEB_INPUT_FOLDER}/CSS/Enums.json"
) )
@ -26,9 +14,9 @@ function (generate_css_implementation)
"MediaFeatureID.cpp" "MediaFeatureID.cpp"
Lagom::GenerateCSSMediaFeatureID Lagom::GenerateCSSMediaFeatureID
"${LIBWEB_INPUT_FOLDER}/CSS/MediaFeatures.json" "${LIBWEB_INPUT_FOLDER}/CSS/MediaFeatures.json"
"${LIBWEB_META_PREFIX}" ""
"${LIBWEB_OUTPUT_FOLDER}CSS/MediaFeatureID.h" "CSS/MediaFeatureID.h"
"${LIBWEB_OUTPUT_FOLDER}CSS/MediaFeatureID.cpp" "CSS/MediaFeatureID.cpp"
arguments -j "${LIBWEB_INPUT_FOLDER}/CSS/MediaFeatures.json" arguments -j "${LIBWEB_INPUT_FOLDER}/CSS/MediaFeatures.json"
) )
@ -36,9 +24,9 @@ function (generate_css_implementation)
"PropertyID.cpp" "PropertyID.cpp"
Lagom::GenerateCSSPropertyID Lagom::GenerateCSSPropertyID
"${LIBWEB_INPUT_FOLDER}/CSS/Properties.json" "${LIBWEB_INPUT_FOLDER}/CSS/Properties.json"
"${LIBWEB_META_PREFIX}" ""
"${LIBWEB_OUTPUT_FOLDER}CSS/PropertyID.h" "CSS/PropertyID.h"
"${LIBWEB_OUTPUT_FOLDER}CSS/PropertyID.cpp" "CSS/PropertyID.cpp"
arguments -j "${LIBWEB_INPUT_FOLDER}/CSS/Properties.json" arguments -j "${LIBWEB_INPUT_FOLDER}/CSS/Properties.json"
) )
@ -46,9 +34,9 @@ function (generate_css_implementation)
"TransformFunctions.cpp" "TransformFunctions.cpp"
Lagom::GenerateCSSTransformFunctions Lagom::GenerateCSSTransformFunctions
"${LIBWEB_INPUT_FOLDER}/CSS/TransformFunctions.json" "${LIBWEB_INPUT_FOLDER}/CSS/TransformFunctions.json"
"${LIBWEB_META_PREFIX}" ""
"${LIBWEB_OUTPUT_FOLDER}CSS/TransformFunctions.h" "CSS/TransformFunctions.h"
"${LIBWEB_OUTPUT_FOLDER}CSS/TransformFunctions.cpp" "CSS/TransformFunctions.cpp"
arguments -j "${LIBWEB_INPUT_FOLDER}/CSS/TransformFunctions.json" arguments -j "${LIBWEB_INPUT_FOLDER}/CSS/TransformFunctions.json"
) )
@ -56,62 +44,50 @@ function (generate_css_implementation)
"ValueID.cpp" "ValueID.cpp"
Lagom::GenerateCSSValueID Lagom::GenerateCSSValueID
"${LIBWEB_INPUT_FOLDER}/CSS/Identifiers.json" "${LIBWEB_INPUT_FOLDER}/CSS/Identifiers.json"
"${LIBWEB_META_PREFIX}" ""
"${LIBWEB_OUTPUT_FOLDER}CSS/ValueID.h" "CSS/ValueID.h"
"${LIBWEB_OUTPUT_FOLDER}CSS/ValueID.cpp" "CSS/ValueID.cpp"
arguments -j "${LIBWEB_INPUT_FOLDER}/CSS/Identifiers.json" arguments -j "${LIBWEB_INPUT_FOLDER}/CSS/Identifiers.json"
) )
add_custom_command( add_custom_command(
OUTPUT ${LIBWEB_OUTPUT_FOLDER}CSS/DefaultStyleSheetSource.cpp OUTPUT CSS/DefaultStyleSheetSource.cpp
COMMAND "${CMAKE_COMMAND}" -E make_directory ${LIBWEB_OUTPUT_FOLDER}CSS COMMAND "${CMAKE_COMMAND}" -E make_directory CSS
COMMAND "${LIBWEB_INPUT_FOLDER}/Scripts/GenerateStyleSheetSource.sh" default_stylesheet_source "${LIBWEB_INPUT_FOLDER}/CSS/Default.css" > ${LIBWEB_OUTPUT_FOLDER}CSS/DefaultStyleSheetSource.cpp.tmp COMMAND "${LIBWEB_INPUT_FOLDER}/Scripts/GenerateStyleSheetSource.sh" default_stylesheet_source "${LIBWEB_INPUT_FOLDER}/CSS/Default.css" > CSS/DefaultStyleSheetSource.cpp.tmp
COMMAND "${CMAKE_COMMAND}" -E copy_if_different ${LIBWEB_OUTPUT_FOLDER}CSS/DefaultStyleSheetSource.cpp.tmp ${LIBWEB_OUTPUT_FOLDER}CSS/DefaultStyleSheetSource.cpp COMMAND "${CMAKE_COMMAND}" -E copy_if_different CSS/DefaultStyleSheetSource.cpp.tmp CSS/DefaultStyleSheetSource.cpp
COMMAND "${CMAKE_COMMAND}" -E remove ${LIBWEB_OUTPUT_FOLDER}CSS/DefaultStyleSheetSource.cpp.tmp COMMAND "${CMAKE_COMMAND}" -E remove CSS/DefaultStyleSheetSource.cpp.tmp
VERBATIM VERBATIM
DEPENDS "${LIBWEB_INPUT_FOLDER}/Scripts/GenerateStyleSheetSource.sh" DEPENDS "${LIBWEB_INPUT_FOLDER}/Scripts/GenerateStyleSheetSource.sh"
MAIN_DEPENDENCY ${LIBWEB_INPUT_FOLDER}/CSS/Default.css MAIN_DEPENDENCY "${LIBWEB_INPUT_FOLDER}/CSS/Default.css"
) )
add_custom_target(generate_${LIBWEB_META_PREFIX}DefaultStyleSheetSource.cpp DEPENDS ${LIBWEB_OUTPUT_FOLDER}CSS/DefaultStyleSheetSource.cpp) add_custom_target(generate_DefaultStyleSheetSource.cpp DEPENDS CSS/DefaultStyleSheetSource.cpp)
add_dependencies(all_generated generate_${LIBWEB_META_PREFIX}DefaultStyleSheetSource.cpp) add_dependencies(all_generated generate_DefaultStyleSheetSource.cpp)
add_custom_command( add_custom_command(
OUTPUT ${LIBWEB_OUTPUT_FOLDER}CSS/QuirksModeStyleSheetSource.cpp OUTPUT CSS/QuirksModeStyleSheetSource.cpp
COMMAND "${CMAKE_COMMAND}" -E make_directory ${LIBWEB_OUTPUT_FOLDER}CSS COMMAND "${CMAKE_COMMAND}" -E make_directory CSS
COMMAND "${LIBWEB_INPUT_FOLDER}/Scripts/GenerateStyleSheetSource.sh" quirks_mode_stylesheet_source "${LIBWEB_INPUT_FOLDER}/CSS/QuirksMode.css" > ${LIBWEB_OUTPUT_FOLDER}CSS/QuirksModeStyleSheetSource.cpp.tmp COMMAND "${LIBWEB_INPUT_FOLDER}/Scripts/GenerateStyleSheetSource.sh" quirks_mode_stylesheet_source "${LIBWEB_INPUT_FOLDER}/CSS/QuirksMode.css" > CSS/QuirksModeStyleSheetSource.cpp.tmp
COMMAND "${CMAKE_COMMAND}" -E copy_if_different ${LIBWEB_OUTPUT_FOLDER}CSS/QuirksModeStyleSheetSource.cpp.tmp ${LIBWEB_OUTPUT_FOLDER}CSS/QuirksModeStyleSheetSource.cpp COMMAND "${CMAKE_COMMAND}" -E copy_if_different CSS/QuirksModeStyleSheetSource.cpp.tmp CSS/QuirksModeStyleSheetSource.cpp
COMMAND "${CMAKE_COMMAND}" -E remove ${LIBWEB_OUTPUT_FOLDER}CSS/QuirksModeStyleSheetSource.cpp.tmp COMMAND "${CMAKE_COMMAND}" -E remove CSS/QuirksModeStyleSheetSource.cpp.tmp
VERBATIM VERBATIM
DEPENDS "${LIBWEB_INPUT_FOLDER}/Scripts/GenerateStyleSheetSource.sh" DEPENDS "${LIBWEB_INPUT_FOLDER}/Scripts/GenerateStyleSheetSource.sh"
MAIN_DEPENDENCY ${LIBWEB_INPUT_FOLDER}/CSS/Default.css MAIN_DEPENDENCY "${LIBWEB_INPUT_FOLDER}/CSS/Default.css"
) )
add_custom_target(generate_${LIBWEB_META_PREFIX}QuirksModeStyleSheetSource.cpp DEPENDS ${LIBWEB_OUTPUT_FOLDER}CSS/QuirksModeStyleSheetSource.cpp) add_custom_target(generate_QuirksModeStyleSheetSource.cpp DEPENDS CSS/QuirksModeStyleSheetSource.cpp)
add_dependencies(all_generated generate_${LIBWEB_META_PREFIX}QuirksModeStyleSheetSource.cpp) add_dependencies(all_generated generate_QuirksModeStyleSheetSource.cpp)
endfunction() endfunction()
function (generate_js_bindings target) function (generate_js_bindings target)
set(LIBWEB_INPUT_FOLDER "${CMAKE_CURRENT_SOURCE_DIR}")
if (CMAKE_CURRENT_BINARY_DIR MATCHES ".*/LibWeb")
# Serenity build
SET(LIBWEB_INPUT_FOLDER "${CMAKE_CURRENT_SOURCE_DIR}")
SET(LIBWEB_OUTPUT_FOLDER "")
SET(LIBWEB_META_PREFIX "")
else()
# Lagom Build
SET(LIBWEB_INPUT_FOLDER "${CMAKE_CURRENT_SOURCE_DIR}/../../Userland/Libraries/LibWeb")
SET(LIBWEB_OUTPUT_FOLDER "LibWeb/")
SET(LIBWEB_META_PREFIX "Lagom")
endif()
function(libweb_js_bindings class) function(libweb_js_bindings class)
cmake_parse_arguments(PARSE_ARGV 1 LIBWEB_BINDINGS "ITERABLE" "" "") cmake_parse_arguments(PARSE_ARGV 1 LIBWEB_BINDINGS "ITERABLE" "" "")
get_filename_component(basename "${class}" NAME) get_filename_component(basename "${class}" NAME)
set(BINDINGS_SOURCES set(BINDINGS_SOURCES
"${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}Constructor.h" "Bindings/${basename}Constructor.h"
"${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}Constructor.cpp" "Bindings/${basename}Constructor.cpp"
"${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}Prototype.h" "Bindings/${basename}Prototype.h"
"${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}Prototype.cpp" "Bindings/${basename}Prototype.cpp"
) )
set(BINDINGS_TYPES set(BINDINGS_TYPES
constructor-header constructor-header
@ -123,8 +99,8 @@ function (generate_js_bindings target)
# FIXME: Instead of requiring a manual declaration of iterable bindings, we should ask BindingsGenerator if it's iterable # FIXME: Instead of requiring a manual declaration of iterable bindings, we should ask BindingsGenerator if it's iterable
if(LIBWEB_BINDINGS_ITERABLE) if(LIBWEB_BINDINGS_ITERABLE)
list(APPEND BINDINGS_SOURCES list(APPEND BINDINGS_SOURCES
"${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}IteratorPrototype.h" "Bindings/${basename}IteratorPrototype.h"
"${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}IteratorPrototype.cpp" "Bindings/${basename}IteratorPrototype.cpp"
) )
list(APPEND BINDINGS_TYPES list(APPEND BINDINGS_TYPES
iterator-prototype-header iterator-prototype-header
@ -147,16 +123,16 @@ function (generate_js_bindings target)
COMMAND "${CMAKE_COMMAND}" -E remove "${bindings_src}.tmp" COMMAND "${CMAKE_COMMAND}" -E remove "${bindings_src}.tmp"
VERBATIM VERBATIM
DEPENDS Lagom::BindingsGenerator DEPENDS Lagom::BindingsGenerator
MAIN_DEPENDENCY ${LIBWEB_INPUT_FOLDER}/${class}.idl MAIN_DEPENDENCY ${class}.idl
) )
endforeach() endforeach()
add_custom_target(generate_${basename}Constructor.h DEPENDS ${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}Constructor.h) add_custom_target(generate_${basename}Constructor.h DEPENDS Bindings/${basename}Constructor.h)
add_dependencies(all_generated generate_${basename}Constructor.h) add_dependencies(all_generated generate_${basename}Constructor.h)
add_custom_target(generate_${basename}Constructor.cpp DEPENDS ${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}Constructor.cpp) add_custom_target(generate_${basename}Constructor.cpp DEPENDS Bindings/${basename}Constructor.cpp)
add_dependencies(all_generated generate_${basename}Constructor.cpp) add_dependencies(all_generated generate_${basename}Constructor.cpp)
add_custom_target(generate_${basename}Prototype.h DEPENDS ${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}Prototype.h) add_custom_target(generate_${basename}Prototype.h DEPENDS Bindings/${basename}Prototype.h)
add_dependencies(all_generated generate_${basename}Prototype.h) add_dependencies(all_generated generate_${basename}Prototype.h)
add_custom_target(generate_${basename}Prototype.cpp DEPENDS ${LIBWEB_OUTPUT_FOLDER}Bindings/${basename}Prototype.cpp) add_custom_target(generate_${basename}Prototype.cpp DEPENDS Bindings/${basename}Prototype.cpp)
add_dependencies(all_generated generate_${basename}Prototype.cpp) add_dependencies(all_generated generate_${basename}Prototype.cpp)
list(APPEND LIBWEB_ALL_IDL_FILES "${LIBWEB_INPUT_FOLDER}/${class}.idl") list(APPEND LIBWEB_ALL_IDL_FILES "${LIBWEB_INPUT_FOLDER}/${class}.idl")
@ -167,27 +143,27 @@ function (generate_js_bindings target)
set(exposed_interface_sources DedicatedWorkerExposedInterfaces.cpp DedicatedWorkerExposedInterfaces.h set(exposed_interface_sources DedicatedWorkerExposedInterfaces.cpp DedicatedWorkerExposedInterfaces.h
SharedWorkerExposedInterfaces.cpp SharedWorkerExposedInterfaces.h SharedWorkerExposedInterfaces.cpp SharedWorkerExposedInterfaces.h
WindowExposedInterfaces.cpp WindowExposedInterfaces.h) WindowExposedInterfaces.cpp WindowExposedInterfaces.h)
list(TRANSFORM exposed_interface_sources PREPEND "${LIBWEB_OUTPUT_FOLDER}Bindings/") list(TRANSFORM exposed_interface_sources PREPEND "Bindings/")
add_custom_command( add_custom_command(
OUTPUT ${exposed_interface_sources} OUTPUT ${exposed_interface_sources}
COMMAND "${CMAKE_COMMAND}" -E make_directory "tmp" COMMAND "${CMAKE_COMMAND}" -E make_directory "tmp"
COMMAND $<TARGET_FILE:Lagom::GenerateWindowOrWorkerInterfaces> -o "${CMAKE_CURRENT_BINARY_DIR}/tmp" -b "${LIBWEB_INPUT_FOLDER}" ${LIBWEB_ALL_IDL_FILES} COMMAND $<TARGET_FILE:Lagom::GenerateWindowOrWorkerInterfaces> -o "${CMAKE_CURRENT_BINARY_DIR}/tmp" -b "${LIBWEB_INPUT_FOLDER}" ${LIBWEB_ALL_IDL_FILES}
COMMAND "${CMAKE_COMMAND}" -E copy_if_different tmp/DedicatedWorkerExposedInterfaces.h "${LIBWEB_OUTPUT_FOLDER}Bindings/DedicatedWorkerExposedInterfaces.h" COMMAND "${CMAKE_COMMAND}" -E copy_if_different tmp/DedicatedWorkerExposedInterfaces.h "Bindings/DedicatedWorkerExposedInterfaces.h"
COMMAND "${CMAKE_COMMAND}" -E copy_if_different tmp/DedicatedWorkerExposedInterfaces.cpp "${LIBWEB_OUTPUT_FOLDER}Bindings/DedicatedWorkerExposedInterfaces.cpp" COMMAND "${CMAKE_COMMAND}" -E copy_if_different tmp/DedicatedWorkerExposedInterfaces.cpp "Bindings/DedicatedWorkerExposedInterfaces.cpp"
COMMAND "${CMAKE_COMMAND}" -E copy_if_different tmp/SharedWorkerExposedInterfaces.h "${LIBWEB_OUTPUT_FOLDER}Bindings/SharedWorkerExposedInterfaces.h" COMMAND "${CMAKE_COMMAND}" -E copy_if_different tmp/SharedWorkerExposedInterfaces.h "Bindings/SharedWorkerExposedInterfaces.h"
COMMAND "${CMAKE_COMMAND}" -E copy_if_different tmp/SharedWorkerExposedInterfaces.cpp "${LIBWEB_OUTPUT_FOLDER}Bindings/SharedWorkerExposedInterfaces.cpp" COMMAND "${CMAKE_COMMAND}" -E copy_if_different tmp/SharedWorkerExposedInterfaces.cpp "Bindings/SharedWorkerExposedInterfaces.cpp"
COMMAND "${CMAKE_COMMAND}" -E copy_if_different tmp/WindowExposedInterfaces.h "${LIBWEB_OUTPUT_FOLDER}Bindings/WindowExposedInterfaces.h" COMMAND "${CMAKE_COMMAND}" -E copy_if_different tmp/WindowExposedInterfaces.h "Bindings/WindowExposedInterfaces.h"
COMMAND "${CMAKE_COMMAND}" -E copy_if_different tmp/WindowExposedInterfaces.cpp "${LIBWEB_OUTPUT_FOLDER}Bindings/WindowExposedInterfaces.cpp" COMMAND "${CMAKE_COMMAND}" -E copy_if_different tmp/WindowExposedInterfaces.cpp "Bindings/WindowExposedInterfaces.cpp"
COMMAND "${CMAKE_COMMAND}" -E remove_directory "${CMAKE_CURRENT_BINARY_DIR}/tmp" COMMAND "${CMAKE_COMMAND}" -E remove_directory "${CMAKE_CURRENT_BINARY_DIR}/tmp"
VERBATIM VERBATIM
DEPENDS Lagom::GenerateWindowOrWorkerInterfaces ${LIBWEB_ALL_IDL_FILES} DEPENDS Lagom::GenerateWindowOrWorkerInterfaces ${LIBWEB_ALL_IDL_FILES}
) )
target_sources(${target} PRIVATE ${exposed_interface_sources}) target_sources(${target} PRIVATE ${exposed_interface_sources})
add_custom_target("generate_${LIBWEB_META_PREFIX}exposed_interfaces" DEPENDS ${exposed_interface_sources}) add_custom_target("generate_exposed_interfaces" DEPENDS ${exposed_interface_sources})
add_dependencies(all_generated "generate_${LIBWEB_META_PREFIX}exposed_interfaces") add_dependencies(all_generated "generate_exposed_interfaces")
endfunction() endfunction()
include("${LIBWEB_INPUT_FOLDER}/idl_files.cmake") include("idl_files.cmake")
generate_exposed_interface_files() generate_exposed_interface_files()
endfunction() endfunction()

View file

@ -40,24 +40,6 @@ if (ENABLE_UNICODE_DATABASE_DOWNLOAD)
extract_path("${CLDR_PATH}" "${CLDR_ZIP_PATH}" "${CLDR_NUMBERS_SOURCE}/**" "${CLDR_NUMBERS_PATH}") extract_path("${CLDR_PATH}" "${CLDR_ZIP_PATH}" "${CLDR_NUMBERS_SOURCE}/**" "${CLDR_NUMBERS_PATH}")
extract_path("${CLDR_PATH}" "${CLDR_ZIP_PATH}" "${CLDR_UNITS_SOURCE}/**" "${CLDR_UNITS_PATH}") extract_path("${CLDR_PATH}" "${CLDR_ZIP_PATH}" "${CLDR_UNITS_SOURCE}/**" "${CLDR_UNITS_PATH}")
set(DATE_TIME_FORMAT_DATA_HEADER LibLocale/DateTimeFormatData.h)
set(DATE_TIME_FORMAT_DATA_IMPLEMENTATION LibLocale/DateTimeFormatData.cpp)
set(LOCALE_DATA_HEADER LibLocale/LocaleData.h)
set(LOCALE_DATA_IMPLEMENTATION LibLocale/LocaleData.cpp)
set(NUMBER_FORMAT_DATA_HEADER LibLocale/NumberFormatData.h)
set(NUMBER_FORMAT_DATA_IMPLEMENTATION LibLocale/NumberFormatData.cpp)
set(PLURAL_RULES_DATA_HEADER LibLocale/PluralRulesData.h)
set(PLURAL_RULES_DATA_IMPLEMENTATION LibLocale/PluralRulesData.cpp)
set(RELATIVE_TIME_FORMAT_DATA_HEADER LibLocale/RelativeTimeFormatData.h)
set(RELATIVE_TIME_FORMAT_DATA_IMPLEMENTATION LibLocale/RelativeTimeFormatData.cpp)
set(LOCALE_META_TARGET_PREFIX LibLocale_)
if (CMAKE_CURRENT_BINARY_DIR MATCHES ".*/LibLocale") # Serenity build.
set(DATE_TIME_FORMAT_DATA_HEADER DateTimeFormatData.h) set(DATE_TIME_FORMAT_DATA_HEADER DateTimeFormatData.h)
set(DATE_TIME_FORMAT_DATA_IMPLEMENTATION DateTimeFormatData.cpp) set(DATE_TIME_FORMAT_DATA_IMPLEMENTATION DateTimeFormatData.cpp)
@ -73,14 +55,11 @@ if (ENABLE_UNICODE_DATABASE_DOWNLOAD)
set(RELATIVE_TIME_FORMAT_DATA_HEADER RelativeTimeFormatData.h) set(RELATIVE_TIME_FORMAT_DATA_HEADER RelativeTimeFormatData.h)
set(RELATIVE_TIME_FORMAT_DATA_IMPLEMENTATION RelativeTimeFormatData.cpp) set(RELATIVE_TIME_FORMAT_DATA_IMPLEMENTATION RelativeTimeFormatData.cpp)
set(LOCALE_META_TARGET_PREFIX "")
endif()
invoke_generator( invoke_generator(
"DateTimeFormatData" "DateTimeFormatData"
Lagom::GenerateDateTimeFormatData Lagom::GenerateDateTimeFormatData
"${CLDR_VERSION_FILE}" "${CLDR_VERSION_FILE}"
"${LOCALE_META_TARGET_PREFIX}" ""
"${DATE_TIME_FORMAT_DATA_HEADER}" "${DATE_TIME_FORMAT_DATA_HEADER}"
"${DATE_TIME_FORMAT_DATA_IMPLEMENTATION}" "${DATE_TIME_FORMAT_DATA_IMPLEMENTATION}"
arguments -r "${CLDR_CORE_PATH}" -d "${CLDR_DATES_PATH}" arguments -r "${CLDR_CORE_PATH}" -d "${CLDR_DATES_PATH}"
@ -89,7 +68,7 @@ if (ENABLE_UNICODE_DATABASE_DOWNLOAD)
"LocaleData" "LocaleData"
Lagom::GenerateLocaleData Lagom::GenerateLocaleData
"${CLDR_VERSION_FILE}" "${CLDR_VERSION_FILE}"
"${LOCALE_META_TARGET_PREFIX}" ""
"${LOCALE_DATA_HEADER}" "${LOCALE_DATA_HEADER}"
"${LOCALE_DATA_IMPLEMENTATION}" "${LOCALE_DATA_IMPLEMENTATION}"
arguments -b "${CLDR_BCP47_PATH}" -r "${CLDR_CORE_PATH}" -l "${CLDR_LOCALES_PATH}" -m "${CLDR_MISC_PATH}" -n "${CLDR_NUMBERS_PATH}" -d "${CLDR_DATES_PATH}" arguments -b "${CLDR_BCP47_PATH}" -r "${CLDR_CORE_PATH}" -l "${CLDR_LOCALES_PATH}" -m "${CLDR_MISC_PATH}" -n "${CLDR_NUMBERS_PATH}" -d "${CLDR_DATES_PATH}"
@ -98,7 +77,7 @@ if (ENABLE_UNICODE_DATABASE_DOWNLOAD)
"NumberFormatData" "NumberFormatData"
Lagom::GenerateNumberFormatData Lagom::GenerateNumberFormatData
"${CLDR_VERSION_FILE}" "${CLDR_VERSION_FILE}"
"${LOCALE_META_TARGET_PREFIX}" ""
"${NUMBER_FORMAT_DATA_HEADER}" "${NUMBER_FORMAT_DATA_HEADER}"
"${NUMBER_FORMAT_DATA_IMPLEMENTATION}" "${NUMBER_FORMAT_DATA_IMPLEMENTATION}"
arguments -r "${CLDR_CORE_PATH}" -n "${CLDR_NUMBERS_PATH}" -u "${CLDR_UNITS_PATH}" arguments -r "${CLDR_CORE_PATH}" -n "${CLDR_NUMBERS_PATH}" -u "${CLDR_UNITS_PATH}"
@ -107,7 +86,7 @@ if (ENABLE_UNICODE_DATABASE_DOWNLOAD)
"PluralRulesData" "PluralRulesData"
Lagom::GeneratePluralRulesData Lagom::GeneratePluralRulesData
"${CLDR_VERSION_FILE}" "${CLDR_VERSION_FILE}"
"${LOCALE_META_TARGET_PREFIX}" ""
"${PLURAL_RULES_DATA_HEADER}" "${PLURAL_RULES_DATA_HEADER}"
"${PLURAL_RULES_DATA_IMPLEMENTATION}" "${PLURAL_RULES_DATA_IMPLEMENTATION}"
arguments -r "${CLDR_CORE_PATH}" -l "${CLDR_LOCALES_PATH}" arguments -r "${CLDR_CORE_PATH}" -l "${CLDR_LOCALES_PATH}"
@ -116,7 +95,7 @@ if (ENABLE_UNICODE_DATABASE_DOWNLOAD)
"RelativeTimeFormatData" "RelativeTimeFormatData"
Lagom::GenerateRelativeTimeFormatData Lagom::GenerateRelativeTimeFormatData
"${CLDR_VERSION_FILE}" "${CLDR_VERSION_FILE}"
"${LOCALE_META_TARGET_PREFIX}" ""
"${RELATIVE_TIME_FORMAT_DATA_HEADER}" "${RELATIVE_TIME_FORMAT_DATA_HEADER}"
"${RELATIVE_TIME_FORMAT_DATA_IMPLEMENTATION}" "${RELATIVE_TIME_FORMAT_DATA_IMPLEMENTATION}"
arguments -d "${CLDR_DATES_PATH}" arguments -d "${CLDR_DATES_PATH}"

View file

@ -90,29 +90,17 @@ if (ENABLE_UNICODE_DATABASE_DOWNLOAD)
download_file("${EMOJI_TEST_URL}" "${EMOJI_TEST_PATH}") download_file("${EMOJI_TEST_URL}" "${EMOJI_TEST_PATH}")
set(UNICODE_DATA_HEADER LibUnicode/UnicodeData.h)
set(UNICODE_DATA_IMPLEMENTATION LibUnicode/UnicodeData.cpp)
set(EMOJI_DATA_HEADER LibUnicode/EmojiData.h)
set(EMOJI_DATA_IMPLEMENTATION LibUnicode/EmojiData.cpp)
set(UNICODE_META_TARGET_PREFIX LibUnicode_)
if (CMAKE_CURRENT_BINARY_DIR MATCHES ".*/LibUnicode") # Serenity build.
set(UNICODE_DATA_HEADER UnicodeData.h) set(UNICODE_DATA_HEADER UnicodeData.h)
set(UNICODE_DATA_IMPLEMENTATION UnicodeData.cpp) set(UNICODE_DATA_IMPLEMENTATION UnicodeData.cpp)
set(EMOJI_DATA_HEADER EmojiData.h) set(EMOJI_DATA_HEADER EmojiData.h)
set(EMOJI_DATA_IMPLEMENTATION EmojiData.cpp) set(EMOJI_DATA_IMPLEMENTATION EmojiData.cpp)
set(UNICODE_META_TARGET_PREFIX "")
endif()
invoke_generator( invoke_generator(
"UnicodeData" "UnicodeData"
Lagom::GenerateUnicodeData Lagom::GenerateUnicodeData
"${UCD_VERSION_FILE}" "${UCD_VERSION_FILE}"
"${UNICODE_META_TARGET_PREFIX}" ""
"${UNICODE_DATA_HEADER}" "${UNICODE_DATA_HEADER}"
"${UNICODE_DATA_IMPLEMENTATION}" "${UNICODE_DATA_IMPLEMENTATION}"
arguments -u "${UNICODE_DATA_PATH}" -s "${SPECIAL_CASING_PATH}" -g "${DERIVED_GENERAL_CATEGORY_PATH}" -p "${PROP_LIST_PATH}" -d "${DERIVED_CORE_PROP_PATH}" -b "${DERIVED_BINARY_PROP_PATH}" -a "${PROP_ALIAS_PATH}" -v "${PROP_VALUE_ALIAS_PATH}" -r "${SCRIPTS_PATH}" -x "${SCRIPT_EXTENSIONS_PATH}" -k "${BLOCKS_PATH}" -e "${EMOJI_DATA_PATH}" -m "${NAME_ALIAS_PATH}" -n "${NORM_PROPS_PATH}" -f "${GRAPHEME_BREAK_PROP_PATH}" -w "${WORD_BREAK_PROP_PATH}" -i "${SENTENCE_BREAK_PROP_PATH}" arguments -u "${UNICODE_DATA_PATH}" -s "${SPECIAL_CASING_PATH}" -g "${DERIVED_GENERAL_CATEGORY_PATH}" -p "${PROP_LIST_PATH}" -d "${DERIVED_CORE_PROP_PATH}" -b "${DERIVED_BINARY_PROP_PATH}" -a "${PROP_ALIAS_PATH}" -v "${PROP_VALUE_ALIAS_PATH}" -r "${SCRIPTS_PATH}" -x "${SCRIPT_EXTENSIONS_PATH}" -k "${BLOCKS_PATH}" -e "${EMOJI_DATA_PATH}" -m "${NAME_ALIAS_PATH}" -n "${NORM_PROPS_PATH}" -f "${GRAPHEME_BREAK_PROP_PATH}" -w "${WORD_BREAK_PROP_PATH}" -i "${SENTENCE_BREAK_PROP_PATH}"
@ -121,13 +109,13 @@ if (ENABLE_UNICODE_DATABASE_DOWNLOAD)
"EmojiData" "EmojiData"
Lagom::GenerateEmojiData Lagom::GenerateEmojiData
"${UCD_VERSION_FILE}" "${UCD_VERSION_FILE}"
"${UNICODE_META_TARGET_PREFIX}" ""
"${EMOJI_DATA_HEADER}" "${EMOJI_DATA_HEADER}"
"${EMOJI_DATA_IMPLEMENTATION}" "${EMOJI_DATA_IMPLEMENTATION}"
arguments -e "${EMOJI_TEST_PATH}" -s "${EMOJI_SERENITY_PATH}" arguments -e "${EMOJI_TEST_PATH}" -s "${EMOJI_SERENITY_PATH}"
) )
if (CMAKE_CURRENT_BINARY_DIR MATCHES ".*/LibUnicode") # Serenity build. if (SERENITYOS)
add_custom_command( add_custom_command(
OUTPUT "${EMOJI_INSTALL_PATH}" OUTPUT "${EMOJI_INSTALL_PATH}"
COMMAND "${EMOJI_GENERATOR_PATH}" "${EMOJI_TEST_PATH}" "${EMOJI_RES_PATH}" "${EMOJI_INSTALL_PATH}" COMMAND "${EMOJI_GENERATOR_PATH}" "${EMOJI_TEST_PATH}" "${EMOJI_RES_PATH}" "${EMOJI_INSTALL_PATH}"

View file

@ -155,7 +155,7 @@ function(embed_resource target section file)
endfunction() endfunction()
function(link_with_locale_data target) function(link_with_locale_data target)
if (ENABLE_UNICODE_DATABASE_DOWNLOAD) if (ENABLE_UNICODE_DATABASE_DOWNLOAD AND SERENITYOS)
target_link_libraries("${target}" LibLocaleData) target_link_libraries("${target}" LibLocaleData)
endif() endif()
endfunction() endfunction()

View file

@ -60,6 +60,15 @@ if (ENABLE_FUZZERS_LIBFUZZER OR ENABLE_FUZZERS_OSSFUZZ)
set(ENABLE_FUZZERS ON) set(ENABLE_FUZZERS ON)
endif() endif()
# We need to make sure not to build code generators for Fuzzer builds, as they already have their own main.cpp
# Instead, we import them from a previous install of Lagom. This mandates a two-stage build for fuzzers.
# The same concern goes for cross-compile builds, where we need the tools built for the host
set(BUILD_LAGOM_TOOLS ON)
if (ENABLE_FUZZERS OR CMAKE_CROSSCOMPILING)
find_package(LagomTools REQUIRED)
set(BUILD_LAGOM_TOOLS OFF)
endif()
include(wasm_spec_tests) include(wasm_spec_tests)
include(flac_spec_tests) include(flac_spec_tests)
include(lagom_compile_options) include(lagom_compile_options)
@ -142,9 +151,8 @@ include_directories(../../Userland/Libraries/)
include_directories(../../Userland/Services) include_directories(../../Userland/Services)
include_directories(${CMAKE_BINARY_DIR}) include_directories(${CMAKE_BINARY_DIR})
include_directories(${CMAKE_CURRENT_BINARY_DIR}) include_directories(${CMAKE_CURRENT_BINARY_DIR})
include_directories(${CMAKE_BINARY_DIR}/Libraries) include_directories(${CMAKE_CURRENT_BINARY_DIR}/Userland/Libraries)
include_directories(${CMAKE_BINARY_DIR}/Userland/Libraries) include_directories(${CMAKE_CURRENT_BINARY_DIR}/Userland/Services)
include_directories(${CMAKE_BINARY_DIR}/Services)
# install rules, think about moving to its own helper cmake file # install rules, think about moving to its own helper cmake file
include(CMakePackageConfigHelpers) include(CMakePackageConfigHelpers)
@ -305,10 +313,7 @@ install(TARGETS LibTimeZone EXPORT LagomTargets)
# LibIDL # LibIDL
# This is used by the BindingsGenerator so needs to always be built. # This is used by the BindingsGenerator so needs to always be built.
file(GLOB LIBIDL_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibIDL/*.cpp") add_serenity_subdirectory(Userland/Libraries/LibIDL)
lagom_lib(IDL idl
SOURCES ${LIBIDL_SOURCES}
)
# Manually install AK headers # Manually install AK headers
install( install(
@ -319,284 +324,48 @@ install(
) )
# Code Generators and other host tools # Code Generators and other host tools
# We need to make sure not to build code generators for Fuzzer builds, as they already have their own main.cpp if (BUILD_LAGOM_TOOLS)
# Instead, we import them from a previous install of Lagom. This mandates a two-stage build for fuzzers.
if (ENABLE_FUZZERS OR CMAKE_CROSSCOMPILING)
find_package(LagomTools REQUIRED)
else()
add_subdirectory(Tools) add_subdirectory(Tools)
endif() endif()
if (BUILD_LAGOM) if (BUILD_LAGOM)
# Lagom Libraries # Lagom Libraries
set(lagom_standard_libraries
# Archive Archive
file(GLOB LIBARCHIVE_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibArchive/*.cpp") Audio
lagom_lib(Archive archive Compress
SOURCES ${LIBARCHIVE_SOURCES} Crypto
DNS
Gemini
Gfx
GL
GPU
HTTP
IMAP
IPC
JS
Line
Locale
Markdown
PDF
Regex
SoftGPU
SQL
Syntax
TextCodec
Threading
TLS
Unicode
Video
Wasm
WebSocket
XML
) )
# Audio
file(GLOB LIBAUDIO_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibAudio/*.cpp")
list(REMOVE_ITEM LIBAUDIO_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/../../Userland/Libraries/LibAudio/ConnectionToServer.cpp")
lagom_lib(Audio audio
SOURCES ${LIBAUDIO_SOURCES}
)
# Compress
file(GLOB LIBCOMPRESS_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibCompress/*.cpp")
lagom_lib(Compress compress
SOURCES ${LIBCOMPRESS_SOURCES}
LIBS LibCrypto
)
# Crypto
file(GLOB LIBCRYPTO_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibCrypto/*.cpp")
file(GLOB LIBCRYPTO_SUBDIR_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibCrypto/*/*.cpp")
file(GLOB LIBCRYPTO_SUBSUBDIR_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibCrypto/*/*/*.cpp")
lagom_lib(Crypto crypto
SOURCES ${LIBCRYPTO_SOURCES} ${LIBCRYPTO_SUBDIR_SOURCES} ${LIBCRYPTO_SUBSUBDIR_SOURCES}
)
file(GLOB LIBDNS_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibDNS/*.cpp")
lagom_lib(DNS dns
SOURCES ${LIBDNS_SOURCES}
LIBS LibIPC
)
# ELF
# FIXME: Excluding arm64 is a temporary hack to circumvent a build problem
# for Lagom on Apple M1
if (NOT CMAKE_SYSTEM_PROCESSOR MATCHES "arm64")
file(GLOB LIBELF_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibELF/*.cpp")
# There's no way we can reliably make the dynamic loading classes cross platform
list(FILTER LIBELF_SOURCES EXCLUDE REGEX ".*Dynamic.*.cpp$")
lagom_lib(ELF elf
SOURCES ${LIBELF_SOURCES}
)
endif()
# Gemini
file(GLOB LIBGEMINI_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibGemini/*.cpp")
lagom_lib(Gemini gemini
SOURCES ${LIBGEMINI_SOURCES}
LIBS LibTLS
)
# Gfx
file(GLOB LIBGFX_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibGfx/*.cpp")
file(GLOB LIBGFX_FILTER_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibGfx/Filters/*.cpp")
file(GLOB LIBGFX_FONT_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibGfx/Font/*.cpp")
file(GLOB LIBGFX_TTF_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibGfx/Font/TrueType/*.cpp")
file(GLOB LIBGFX_WOFF_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibGfx/Font/WOFF/*.cpp")
lagom_lib(Gfx gfx
SOURCES ${LIBGFX_SOURCES} ${LIBGFX_FILTER_SOURCES} ${LIBGFX_FONT_SOURCES} ${LIBGFX_TTF_SOURCES} ${LIBGFX_WOFF_SOURCES}
LIBS m LibCompress LibTextCodec LibIPC
)
# GPU
file(GLOB LIBGPU_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibGPU/*.cpp")
lagom_lib(GPU gpu
SOURCES ${LIBGPU_SOURCES}
LIBS ${CMAKE_DL_LIBS}
)
# GL
file(GLOB LIBGL_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibGL/*.cpp")
file(GLOB LIBGL_TEX_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibGL/Tex/*.cpp")
lagom_lib(GL gl
SOURCES ${LIBGL_SOURCES} ${LIBGL_TEX_SOURCES}
LIBS m LibGfx LibGPU)
# GUI
list(APPEND LIBGUI_SOURCES "../../Userland/Libraries/LibGUI/ModelIndex.cpp")
list(APPEND LIBGUI_SOURCES "../../Userland/Libraries/LibGUI/Model.cpp")
list(APPEND LIBGUI_SOURCES "../../Userland/Libraries/LibGUI/Icon.cpp")
lagom_lib(GUI gui
SOURCES ${LIBGUI_SOURCES}
LIBS LibGfx)
# GUI-GML
file(GLOB LIBGUI_GML_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibGUI/GML/*.cpp")
list(REMOVE_ITEM LIBGUI_GML_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/../../Userland/Libraries/LibGUI/GML/AutocompleteProvider.cpp")
lagom_lib(GML gml
SOURCES ${LIBGUI_GML_SOURCES}
LIBS LibSyntax
)
# HTTP
file(GLOB LIBHTTP_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibHTTP/*.cpp")
lagom_lib(HTTP http
SOURCES ${LIBHTTP_SOURCES}
LIBS LibCompress LibTLS
)
# IMAP
file(GLOB LIBIMAP_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibIMAP/*.cpp")
lagom_lib(IMAP imap
SOURCES ${LIBIMAP_SOURCES}
LIBS LibTLS
)
# IPC
file(GLOB LIBIPC_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibIPC/*.cpp")
lagom_lib(IPC ipc
SOURCES ${LIBIPC_SOURCES}
)
# JS
file(GLOB LIBJS_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibJS/*.cpp")
file(GLOB LIBJS_SUBDIR_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibJS/*/*.cpp")
file(GLOB LIBJS_SUBSUBDIR_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibJS/*/*/*.cpp")
list(REMOVE_ITEM LIBJS_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/../../Userland/Libraries/LibJS/SyntaxHighlighter.cpp")
lagom_lib(JS js
SOURCES ${LIBJS_SOURCES} ${LIBJS_SUBDIR_SOURCES} ${LIBJS_SUBSUBDIR_SOURCES}
LIBS m LibCrypto LibRegex LibLocale LibUnicode LibTextCodec
)
# Line
file(GLOB LIBLINE_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibLine/*.cpp")
lagom_lib(Line line
SOURCES ${LIBLINE_SOURCES}
)
# Locale
include(locale_data)
file(GLOB LIBLOCALE_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibLocale/*.cpp")
lagom_lib(Locale locale
SOURCES ${LIBLOCALE_SOURCES} ${LOCALE_DATA_SOURCES}
)
target_compile_definitions(LibLocale PRIVATE ENABLE_UNICODE_DATA=$<BOOL:${ENABLE_UNICODE_DATABASE_DOWNLOAD}>)
target_compile_options(LibLocale PRIVATE -Wno-parentheses-equality)
target_link_libraries(LibLocale LibTimeZone LibUnicode)
# Markdown
file(GLOB LIBMARKDOWN_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibMarkdown/*.cpp")
lagom_lib(Markdown markdown
SOURCES ${LIBMARKDOWN_SOURCES}
LIBS LibJS
)
# PDF
file(GLOB LIBPDF_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibPDF/*.cpp")
file(GLOB LIBPDF_SUBDIR_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibPDF/*/*.cpp")
lagom_lib(PDF pdf
SOURCES ${LIBPDF_SOURCES} ${LIBPDF_SUBDIR_SOURCES}
LIBS LibGfx LibIPC LibTextCodec
)
# Regex
file(GLOB LIBREGEX_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibRegex/*.cpp")
lagom_lib(Regex regex
SOURCES ${LIBREGEX_SOURCES}
LIBS LibUnicode
)
# Shell
file(GLOB SHELL_SOURCES CONFIGURE_DEPENDS "../../Userland/Shell/*.cpp")
list(REMOVE_ITEM SHELL_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/../../Userland/Shell/SyntaxHighlighter.cpp")
list(FILTER SHELL_SOURCES EXCLUDE REGEX ".*main.cpp$")
lagom_lib(Shell shell
SOURCES ${SHELL_SOURCES}
LIBS LibLine LibRegex
)
# SoftGPU
file(GLOB_RECURSE LIBSOFTGPU_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibSoftGPU/*.cpp")
lagom_lib(SoftGPU softgpu
SOURCES ${LIBSOFTGPU_SOURCES}
LIBS m LibGfx
)
# Syntax
file(GLOB LIBSYNTAX_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibSyntax/*.cpp")
lagom_lib(Syntax syntax
SOURCES ${LIBSYNTAX_SOURCES}
)
# SQL
file(GLOB_RECURSE LIBSQL_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibSQL/*.cpp")
list(REMOVE_ITEM LIBSQL_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/../../Userland/Libraries/LibSQL/AST/SyntaxHighlighter.cpp")
list(REMOVE_ITEM LIBSQL_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/../../Userland/Libraries/LibSQL/SQLClient.cpp")
lagom_lib(SQL sql
SOURCES ${LIBSQL_SOURCES}
LIBS LibRegex
)
# TextCodec
file(GLOB LIBTEXTCODEC_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibTextCodec/*.cpp")
lagom_lib(TextCodec textcodec
SOURCES ${LIBTEXTCODEC_SOURCES}
)
# TLS
file(GLOB LIBTLS_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibTLS/*.cpp")
lagom_lib(TLS tls
SOURCES ${LIBTLS_SOURCES}
LIBS LibCrypto
)
# Unicode
include(unicode_data)
file(GLOB LIBUNICODE_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibUnicode/*.cpp")
lagom_lib(Unicode unicode
SOURCES ${LIBUNICODE_SOURCES} ${UNICODE_DATA_SOURCES}
)
target_compile_definitions(LibUnicode PRIVATE ENABLE_UNICODE_DATA=$<BOOL:${ENABLE_UNICODE_DATABASE_DOWNLOAD}>)
# Video
file(GLOB LIBVIDEO_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibVideo/*.cpp")
file(GLOB LIBVIDEO_SUBDIR_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibVideo/*/*.cpp")
lagom_lib(Video video
SOURCES ${LIBVIDEO_SOURCES} ${LIBVIDEO_SUBDIR_SOURCES}
LIBS LibAudio LibIPC LibGfx
)
# WASM
file(GLOB LIBWASM_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibWasm/*/*.cpp")
lagom_lib(Wasm wasm
SOURCES ${LIBWASM_SOURCES}
)
# Web
if (ENABLE_LAGOM_LIBWEB) if (ENABLE_LAGOM_LIBWEB)
include(libweb_generators) list(APPEND lagom_standard_libraries Web)
file(GLOB LIBWEB_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibWeb/*.cpp")
file(GLOB LIBWEB_SUBDIR_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibWeb/*/*.cpp")
file(GLOB LIBWEB_SUBSUBDIR_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibWeb/*/*/*.cpp")
file(GLOB LIBWEB_SUBSUBSUBDIR_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibWeb/*/*/*/*.cpp")
list(REMOVE_ITEM LIBWEB_SUBSUBDIR_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/../../Userland/Libraries/LibWeb/CSS/SyntaxHighlighter/SyntaxHighlighter.cpp")
list(REMOVE_ITEM LIBWEB_SUBSUBDIR_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/../../Userland/Libraries/LibWeb/HTML/SyntaxHighlighter/SyntaxHighlighter.cpp")
generate_css_implementation()
set(LIBWEB_GENERATED_SOURCES
LibWeb/CSS/DefaultStyleSheetSource.cpp
LibWeb/CSS/Enums.cpp
LibWeb/CSS/MediaFeatureID.cpp
LibWeb/CSS/PropertyID.cpp
LibWeb/CSS/QuirksModeStyleSheetSource.cpp
LibWeb/CSS/TransformFunctions.cpp
LibWeb/CSS/ValueID.cpp
)
lagom_lib(Web web
SOURCES ${LIBWEB_SOURCES} ${LIBWEB_SUBDIR_SOURCES} ${LIBWEB_SUBSUBDIR_SOURCES} ${LIBWEB_SUBSUBSUBDIR_SOURCES} ${LIBWEB_GENERATED_SOURCES}
LIBS LibMarkdown LibGemini LibGfx LibGL LibIDL LibJS LibTextCodec LibWasm LibXML
)
generate_js_bindings(LibWeb)
endif()
# WebSocket
file(GLOB LIBWEBSOCKET_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibWebSocket/*.cpp")
file(GLOB LIBWEBSOCKET_SUBDIR_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibWebSocket/*/*.cpp")
lagom_lib(WebSocket websocket
SOURCES ${LIBWEBSOCKET_SOURCES} ${LIBWEBSOCKET_SUBDIR_SOURCES}
LIBS LibCrypto LibTLS
)
# WebView # WebView
if (ENABLE_LAGOM_LIBWEB)
list(APPEND LIBWEBVIEW_SOURCES "../../Userland/Libraries/LibWebView/DOMTreeModel.cpp") list(APPEND LIBWEBVIEW_SOURCES "../../Userland/Libraries/LibWebView/DOMTreeModel.cpp")
list(APPEND LIBWEBVIEW_SOURCES "../../Userland/Libraries/LibWebView/WebContentClient.cpp") list(APPEND LIBWEBVIEW_SOURCES "../../Userland/Libraries/LibWebView/WebContentClient.cpp")
@ -611,23 +380,50 @@ if (BUILD_LAGOM)
LIBS LibGUI LibWeb) LIBS LibGUI LibWeb)
endif() endif()
# x86
# FIXME: Excluding arm64 is a temporary hack to circumvent a build problem # FIXME: Excluding arm64 is a temporary hack to circumvent a build problem
# for Lagom on Apple M1 # for Lagom on Apple M1
if (NOT CMAKE_SYSTEM_PROCESSOR MATCHES "arm64") if (NOT CMAKE_SYSTEM_PROCESSOR MATCHES "arm64")
file(GLOB LIBX86_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibX86/*.cpp") # FIXME: Create a LIBELF_SOURCES macro similar to AK
lagom_lib(X86 x86 file(GLOB LIBELF_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibELF/*.cpp")
SOURCES ${LIBX86_SOURCES} # There's no way we can reliably make the dynamic loading classes cross platform
list(FILTER LIBELF_SOURCES EXCLUDE REGEX ".*Dynamic.*.cpp$")
lagom_lib(ELF elf
SOURCES ${LIBELF_SOURCES}
) )
list(APPEND lagom_standard_libraries X86)
endif() endif()
file(GLOB LIBXML_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibXML/*/*.cpp") foreach(lib IN LISTS lagom_standard_libraries)
lagom_lib(XML xml add_serenity_subdirectory("Userland/Libraries/Lib${lib}")
SOURCES ${LIBXML_SOURCES}) endforeach()
# GUI
set(LIBGUI_SOURCES
GML/Lexer.cpp
GML/Parser.cpp
GML/SyntaxHighlighter.cpp
Icon.cpp
Model.cpp
ModelIndex.cpp
)
list(TRANSFORM LIBGUI_SOURCES PREPEND "${SERENITY_PROJECT_ROOT}/Userland/Libraries/LibGUI/")
lagom_lib(GUI gui
SOURCES ${LIBGUI_SOURCES}
LIBS LibGfx LibSyntax)
# FIXME: Why doesn't RPATH of the tests handle this properly?
set_target_properties(LibSoftGPU PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
# FIXME: LibLocaleData is an object lib in Lagom, because the weak symbol trick we use on serenity
# straight up isn't supposed to work per ELF rules
target_link_libraries(LibLocale LibTimeZone)
install(TARGETS LibLocaleData EXPORT LagomTargets)
add_serenity_subdirectory(Userland/Shell)
if (NOT ENABLE_FUZZERS AND NOT ENABLE_COMPILER_EXPLORER_BUILD AND NOT ANDROID) if (NOT ENABLE_FUZZERS AND NOT ENABLE_COMPILER_EXPLORER_BUILD AND NOT ANDROID)
# Lagom Services # Lagom Services
add_subdirectory("${SERENITY_PROJECT_ROOT}/Userland/Services" "${CMAKE_CURRENT_BINARY_DIR}/Services") add_serenity_subdirectory(Userland/Services)
# Lagom Examples # Lagom Examples
add_executable(TestApp TestApp.cpp) add_executable(TestApp TestApp.cpp)
@ -651,7 +447,7 @@ if (BUILD_LAGOM)
add_executable(gml-format_lagom ../../Userland/Utilities/gml-format.cpp) add_executable(gml-format_lagom ../../Userland/Utilities/gml-format.cpp)
set_target_properties(gml-format_lagom PROPERTIES OUTPUT_NAME gml-format) set_target_properties(gml-format_lagom PROPERTIES OUTPUT_NAME gml-format)
target_link_libraries(gml-format_lagom LibCore LibGML LibMain) target_link_libraries(gml-format_lagom LibCore LibGUI LibMain)
if (ENABLE_LAGOM_LIBWEB) if (ENABLE_LAGOM_LIBWEB)
add_executable(headless_browser_lagom ../../Userland/Utilities/headless-browser.cpp) add_executable(headless_browser_lagom ../../Userland/Utilities/headless-browser.cpp)
@ -661,7 +457,7 @@ if (BUILD_LAGOM)
add_executable(js_lagom ../../Userland/Utilities/js.cpp) add_executable(js_lagom ../../Userland/Utilities/js.cpp)
set_target_properties(js_lagom PROPERTIES OUTPUT_NAME js) set_target_properties(js_lagom PROPERTIES OUTPUT_NAME js)
target_link_libraries(js_lagom LibJS LibLine LibMain Threads::Threads) target_link_libraries(js_lagom LibJS LibLine LibMain LibTextCodec Threads::Threads)
add_executable(markdown-check_lagom ../../Userland/Utilities/markdown-check.cpp) add_executable(markdown-check_lagom ../../Userland/Utilities/markdown-check.cpp)
set_target_properties(markdown-check_lagom PROPERTIES OUTPUT_NAME markdown-check) set_target_properties(markdown-check_lagom PROPERTIES OUTPUT_NAME markdown-check)
@ -671,10 +467,6 @@ if (BUILD_LAGOM)
set_target_properties(ntpquery_lagom PROPERTIES OUTPUT_NAME ntpquery) set_target_properties(ntpquery_lagom PROPERTIES OUTPUT_NAME ntpquery)
target_link_libraries(ntpquery_lagom LibCore LibMain) target_link_libraries(ntpquery_lagom LibCore LibMain)
add_executable(shell_lagom ../../Userland/Shell/main.cpp)
set_target_properties(shell_lagom PROPERTIES OUTPUT_NAME shell)
target_link_libraries(shell_lagom LibCore LibShell LibMain)
add_executable(test262-runner_lagom ../../Tests/LibJS/test262-runner.cpp) add_executable(test262-runner_lagom ../../Tests/LibJS/test262-runner.cpp)
set_target_properties(test262-runner_lagom PROPERTIES OUTPUT_NAME test262-runner) set_target_properties(test262-runner_lagom PROPERTIES OUTPUT_NAME test262-runner)
target_link_libraries(test262-runner_lagom LibJS LibCore) target_link_libraries(test262-runner_lagom LibJS LibCore)
@ -736,7 +528,7 @@ if (BUILD_LAGOM)
file(COPY "${SERENITY_PROJECT_ROOT}/Tests/LibGL/reference-images" DESTINATION "./") file(COPY "${SERENITY_PROJECT_ROOT}/Tests/LibGL/reference-images" DESTINATION "./")
file(GLOB LIBGL_TESTS CONFIGURE_DEPENDS "../../Tests/LibGL/*.cpp") file(GLOB LIBGL_TESTS CONFIGURE_DEPENDS "../../Tests/LibGL/*.cpp")
foreach(source ${LIBGL_TESTS}) foreach(source ${LIBGL_TESTS})
lagom_test(${source} WORKING_DIRECTORY LIBS LibGL LibGPU LibSoftGPU) lagom_test(${source} LIBS LibGL LibGPU LibSoftGPU)
endforeach() endforeach()
# Locale # Locale
@ -868,7 +660,7 @@ if (BUILD_LAGOM)
get_filename_component(TEST_NAME ${TEST_PATH} NAME_WE) get_filename_component(TEST_NAME ${TEST_PATH} NAME_WE)
add_test( add_test(
NAME "Shell-${TEST_NAME}" NAME "Shell-${TEST_NAME}"
COMMAND shell_lagom --skip-shellrc "${TEST_PATH}" COMMAND Shell --skip-shellrc "${TEST_PATH}"
WORKING_DIRECTORY ${SERENITY_PROJECT_ROOT}/Userland/Shell/Tests WORKING_DIRECTORY ${SERENITY_PROJECT_ROOT}/Userland/Shell/Tests
) )
set_tests_properties("Shell-${TEST_NAME}" PROPERTIES set_tests_properties("Shell-${TEST_NAME}" PROPERTIES

View file

@ -1,6 +1,5 @@
set(SOURCES set(SOURCES
SampleFormats.cpp SampleFormats.cpp
ConnectionToServer.cpp
Loader.cpp Loader.cpp
WavLoader.cpp WavLoader.cpp
FlacLoader.cpp FlacLoader.cpp
@ -9,10 +8,13 @@ set(SOURCES
UserSampleQueue.cpp UserSampleQueue.cpp
) )
if (SERENITYOS)
list(APPEND SOURCES ConnectionToServer.cpp)
set(GENERATED_SOURCES set(GENERATED_SOURCES
../../Services/AudioServer/AudioClientEndpoint.h ../../Services/AudioServer/AudioClientEndpoint.h
../../Services/AudioServer/AudioServerEndpoint.h ../../Services/AudioServer/AudioServerEndpoint.h
) )
endif()
serenity_lib(LibAudio audio) serenity_lib(LibAudio audio)
target_link_libraries(LibAudio LibCore LibIPC LibThreading) target_link_libraries(LibAudio LibCore LibIPC LibThreading)

View file

@ -5,4 +5,4 @@ set(SOURCES
) )
serenity_lib(LibDNS dns) serenity_lib(LibDNS dns)
target_link_libraries(LibDNS LibC) target_link_libraries(LibDNS LibC LibIPC)

View file

@ -3,6 +3,6 @@ set(SOURCES
) )
serenity_lib(LibGPU gpu) serenity_lib(LibGPU gpu)
target_link_libraries(LibGPU LibCore) target_link_libraries(LibGPU LibCore ${CMAKE_DL_LIBS})
add_dependencies(LibGPU LibSoftGPU) add_dependencies(LibGPU LibSoftGPU)

View file

@ -2,7 +2,11 @@ include(${SerenityOS_SOURCE_DIR}/Meta/CMake/locale_data.cmake)
if (DEFINED LOCALE_DATA_SOURCES) if (DEFINED LOCALE_DATA_SOURCES)
set(SOURCES ${LOCALE_DATA_SOURCES}) set(SOURCES ${LOCALE_DATA_SOURCES})
if (SERENITYOS)
serenity_lib(LibLocaleData localedata) serenity_lib(LibLocaleData localedata)
else()
add_library(LibLocaleData OBJECT ${SOURCES})
endif()
target_compile_options(LibLocaleData PRIVATE -g0 -Os -Wno-parentheses-equality) target_compile_options(LibLocaleData PRIVATE -g0 -Os -Wno-parentheses-equality)
target_link_libraries(LibLocaleData LibCore LibTimeZone) target_link_libraries(LibLocaleData LibCore LibTimeZone)
endif() endif()
@ -20,5 +24,9 @@ target_link_libraries(LibLocale LibCore LibUnicode)
target_compile_definitions(LibLocale PRIVATE ENABLE_UNICODE_DATA=$<BOOL:${ENABLE_UNICODE_DATABASE_DOWNLOAD}>) target_compile_definitions(LibLocale PRIVATE ENABLE_UNICODE_DATA=$<BOOL:${ENABLE_UNICODE_DATABASE_DOWNLOAD}>)
if (DEFINED LOCALE_DATA_SOURCES) if (DEFINED LOCALE_DATA_SOURCES)
if (SERENITYOS)
add_dependencies(LibLocale LibLocaleData) add_dependencies(LibLocale LibLocaleData)
else()
target_link_libraries(LibLocale LibLocaleData)
endif()
endif() endif()

View file

@ -1,5 +1,4 @@
set(SOURCES set(SOURCES
C/Regex.cpp
RegexByteCode.cpp RegexByteCode.cpp
RegexLexer.cpp RegexLexer.cpp
RegexMatcher.cpp RegexMatcher.cpp
@ -7,5 +6,9 @@ set(SOURCES
RegexParser.cpp RegexParser.cpp
) )
if(SERENITYOS)
list(APPEND SOURCES C/Regex.cpp)
endif()
serenity_lib(LibRegex regex) serenity_lib(LibRegex regex)
target_link_libraries(LibRegex LibC LibCore LibUnicode) target_link_libraries(LibRegex LibC LibCore LibUnicode)

View file

@ -22,16 +22,18 @@ set(SOURCES
ResultSet.cpp ResultSet.cpp
Row.cpp Row.cpp
Serializer.cpp Serializer.cpp
SQLClient.cpp
TreeNode.cpp TreeNode.cpp
Tuple.cpp Tuple.cpp
Value.cpp Value.cpp
) )
if (SERENITYOS)
list(APPEND SOURCES SQLClient.cpp)
set(GENERATED_SOURCES set(GENERATED_SOURCES
../../Services/SQLServer/SQLClientEndpoint.h ../../Services/SQLServer/SQLClientEndpoint.h
../../Services/SQLServer/SQLServerEndpoint.h ../../Services/SQLServer/SQLServerEndpoint.h
) )
endif()
serenity_lib(LibSQL sql) serenity_lib(LibSQL sql)
target_link_libraries(LibSQL LibCore LibSyntax LibRegex) target_link_libraries(LibSQL LibCore LibSyntax LibRegex)

View file

@ -13,15 +13,20 @@ set(SOURCES
NodeVisitor.cpp NodeVisitor.cpp
Parser.cpp Parser.cpp
Shell.cpp Shell.cpp
SyntaxHighlighter.cpp
) )
serenity_lib(LibShell shell) serenity_lib(LibShell shell)
target_link_libraries(LibShell LibCore LibLine LibSyntax LibRegex LibCodeComprehension) target_link_libraries(LibShell LibCore LibLine LibSyntax LibRegex)
set(SOURCES if (SERENITYOS)
main.cpp target_sources(LibShell PRIVATE SyntaxHighlighter.cpp)
) target_link_libraries(LibShell LibCodeComprehension)
endif()
if (ENABLE_FUZZERS)
add_custom_target(Shell) # Stub target to placate serenity_component
else()
set(SOURCES main.cpp)
serenity_bin(Shell) serenity_bin(Shell)
target_link_libraries(Shell LibShell LibMain) target_link_libraries(Shell LibShell LibMain)
@ -31,3 +36,4 @@ install(DIRECTORY Tests/ DESTINATION usr/Tests/Shell
PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ
GROUP_EXECUTE GROUP_READ GROUP_EXECUTE GROUP_READ
WORLD_EXECUTE WORLD_READ) WORLD_EXECUTE WORLD_READ)
endif()