From 98d8274040c8cdde32bcf8e29050f9cf690b74ee Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Sun, 25 Jul 2021 15:15:47 -0400 Subject: [PATCH] Meta: Add LibUnicode (and its tests) to Lagom This is primarily to allow using LibUnicode within LibJS and its REPL. Note: this seems to be the first time that a Lagom dependency requires generated source files. For this to work, some of Lagom's CMakeLists.txt commands needed to be re-organized to include the CMake files that fetch and parse UnicodeData.txt. The paths required to invoke the generator also differ depending on what is currently building (SerenityOS vs. Lagom as part of the Serenity build vs. a standalone Lagom build). --- CMakeLists.txt | 4 +- Meta/Lagom/CMakeLists.txt | 40 ++++++++++++++++--- .../Libraries/LibUnicode/unicode_data.cmake | 10 +++++ 3 files changed, 47 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 90747b55ea6..64c1aa9938c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -134,6 +134,8 @@ include_directories(Userland/Libraries) include_directories(.) include_directories(${CMAKE_BINARY_DIR}) +set(write_if_different ${CMAKE_SOURCE_DIR}/Meta/write-only-on-difference.sh) + add_subdirectory(Meta/Lagom) if (ENABLE_UNDEFINED_SANITIZER) @@ -146,8 +148,6 @@ add_subdirectory(Userland/Libraries/LibUnicode/CodeGenerators) add_subdirectory(Userland/Libraries/LibWeb/CodeGenerators) add_subdirectory(Meta/CMake/ConfigureComponents) -set(write_if_different ${CMAKE_SOURCE_DIR}/Meta/write-only-on-difference.sh) - find_program(CCACHE_PROGRAM ccache) if(CCACHE_PROGRAM) set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}") diff --git a/Meta/Lagom/CMakeLists.txt b/Meta/Lagom/CMakeLists.txt index 80419505292..85e6370fa37 100644 --- a/Meta/Lagom/CMakeLists.txt +++ b/Meta/Lagom/CMakeLists.txt @@ -1,6 +1,11 @@ cmake_minimum_required (VERSION 3.0) project (Lagom) +# This is required for CMake (when invoked for a Lagom-only build) to +# ignore any files downloading during the build, e.g. UnicodeData.txt. +# https://cmake.org/cmake/help/latest/policy/CMP0058.html +cmake_policy(SET CMP0058 NEW) + include(../CMake/wasm_spec_tests.cmake) if (NOT ENABLE_OSS_FUZZ) @@ -46,6 +51,21 @@ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${LINKER_FLAGS}") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${LINKER_FLAGS}") set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${LINKER_FLAGS}") +include_directories(../../) +include_directories(../../Userland/) +include_directories(../../Userland/Libraries/) +include_directories(${CMAKE_BINARY_DIR}) +include_directories(${CMAKE_CURRENT_BINARY_DIR}) + +if (BUILD_LAGOM AND NOT ENABLE_OSS_FUZZ AND NOT ENABLE_FUZZER_SANITIZER) + if (CMAKE_SOURCE_DIR MATCHES ".*/Lagom") + set(write_if_different ${CMAKE_SOURCE_DIR}/../write-only-on-difference.sh) + add_subdirectory(../../Userland/Libraries/LibUnicode/CodeGenerators ${CMAKE_CURRENT_BINARY_DIR}/LibUnicode/CodeGenerators) + endif() + + include(../../Userland/Libraries/LibUnicode/unicode_data.cmake) +endif() + file(GLOB AK_SOURCES CONFIGURE_DEPENDS "../../AK/*.cpp") file(GLOB AK_TEST_SOURCES CONFIGURE_DEPENDS "../../Tests/AK/*.cpp") file(GLOB LIBARCHIVE_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibArchive/*.cpp") @@ -92,10 +112,13 @@ list(FILTER LIBTEST_SOURCES EXCLUDE REGEX ".*Main.cpp$") file(GLOB LIBTEST_MAIN CONFIGURE_DEPENDS "../../Userland/Libraries/LibTest/TestMain.cpp") file(GLOB LIBCRYPTO_TESTS CONFIGURE_DEPENDS "../../Tests/LibCrypto/*.cpp") file(GLOB LIBTLS_TESTS CONFIGURE_DEPENDS "../../Tests/LibTLS/*.cpp") +file(GLOB LIBUNICODE_SOURCES CONFIGURE_DEPENDS "../../Userland/Libraries/LibUnicode/*.cpp") +set(LIBUNICODE_SOURCES ${LIBUNICODE_SOURCES} ${UNICODE_DATA_SOURCES}) +file(GLOB LIBUNICODE_TEST_SOURCES CONFIGURE_DEPENDS "../../Tests/LibUnicode/*.cpp") set(LAGOM_REGEX_SOURCES ${LIBREGEX_LIBC_SOURCES} ${LIBREGEX_SOURCES}) set(LAGOM_CORE_SOURCES ${AK_SOURCES} ${LIBCORE_SOURCES}) -set(LAGOM_MORE_SOURCES ${LIBARCHIVE_SOURCES} ${LIBAUDIO_SOURCES} ${LIBELF_SOURCES} ${LIBIPC_SOURCES} ${LIBLINE_SOURCES} ${LIBJS_SOURCES} ${LIBJS_SUBDIR_SOURCES} ${LIBJS_SUBSUBDIR_SOURCES} ${LIBX86_SOURCES} ${LIBCRYPTO_SOURCES} ${LIBCOMPRESS_SOURCES} ${LIBCRYPTO_SUBDIR_SOURCES} ${LIBCRYPTO_SUBSUBDIR_SOURCES} ${LIBTLS_SOURCES} ${LIBTTF_SOURCES} ${LIBTEXTCODEC_SOURCES} ${LIBMARKDOWN_SOURCES} ${LIBGEMINI_SOURCES} ${LIBGFX_SOURCES} ${LIBGUI_GML_SOURCES} ${LIBHTTP_SOURCES} ${LAGOM_REGEX_SOURCES} ${SHELL_SOURCES} ${LIBSQL_SOURCES} ${LIBWASM_SOURCES} ${LIBIMAP_SOURCES}) +set(LAGOM_MORE_SOURCES ${LIBARCHIVE_SOURCES} ${LIBAUDIO_SOURCES} ${LIBELF_SOURCES} ${LIBIPC_SOURCES} ${LIBLINE_SOURCES} ${LIBJS_SOURCES} ${LIBJS_SUBDIR_SOURCES} ${LIBJS_SUBSUBDIR_SOURCES} ${LIBX86_SOURCES} ${LIBCRYPTO_SOURCES} ${LIBCOMPRESS_SOURCES} ${LIBCRYPTO_SUBDIR_SOURCES} ${LIBCRYPTO_SUBSUBDIR_SOURCES} ${LIBTLS_SOURCES} ${LIBTTF_SOURCES} ${LIBTEXTCODEC_SOURCES} ${LIBMARKDOWN_SOURCES} ${LIBGEMINI_SOURCES} ${LIBGFX_SOURCES} ${LIBGUI_GML_SOURCES} ${LIBHTTP_SOURCES} ${LAGOM_REGEX_SOURCES} ${SHELL_SOURCES} ${LIBSQL_SOURCES} ${LIBWASM_SOURCES} ${LIBIMAP_SOURCES} ${LIBUNICODE_SOURCES}) set(LAGOM_TEST_SOURCES ${LIBTEST_SOURCES}) # FIXME: This is a hack, because the lagom stuff can be build individually or @@ -104,10 +127,6 @@ set(LAGOM_TEST_SOURCES ${LIBTEST_SOURCES}) configure_file(../../AK/Debug.h.in AK/Debug.h @ONLY) configure_file(../../Kernel/Debug.h.in Kernel/Debug.h @ONLY) -include_directories(../../) -include_directories(../../Userland/) -include_directories(../../Userland/Libraries/) -include_directories(${CMAKE_BINARY_DIR}) add_library(LagomCore ${LAGOM_CORE_SOURCES}) find_package(Threads REQUIRED) target_link_libraries(LagomCore Threads::Threads) @@ -293,6 +312,17 @@ if (BUILD_LAGOM) WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) endforeach() + + foreach(source ${LIBUNICODE_TEST_SOURCES}) + get_filename_component(name ${source} NAME_WE) + add_executable(${name}_lagom ${source} ${LIBUNICODE_SOURCES} ${LIBTEST_MAIN}) + target_link_libraries(${name}_lagom LagomTest) + add_test( + NAME ${name}_lagom + COMMAND ${name}_lagom + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + ) + endforeach() endif() install(TARGETS Lagom LagomCore) diff --git a/Userland/Libraries/LibUnicode/unicode_data.cmake b/Userland/Libraries/LibUnicode/unicode_data.cmake index 5cab92edb3d..ba4b736aad6 100644 --- a/Userland/Libraries/LibUnicode/unicode_data.cmake +++ b/Userland/Libraries/LibUnicode/unicode_data.cmake @@ -13,6 +13,16 @@ if (ENABLE_UNICODE_DATABASE_DOWNLOAD) set(UNICODE_DATA_HEADER UnicodeData.h) set(UNICODE_DATA_IMPLEMENTATION UnicodeData.cpp) + if (CMAKE_SOURCE_DIR MATCHES ".*/Lagom") # Lagom-only build. + set(UNICODE_GENERATOR LibUnicode/CodeGenerators/GenerateUnicodeData) + set(UNICODE_DATA_HEADER LibUnicode/UnicodeData.h) + set(UNICODE_DATA_IMPLEMENTATION LibUnicode/UnicodeData.cpp) + elseif (CMAKE_CURRENT_BINARY_DIR MATCHES ".*/Lagom") # Lagom build within the main SerenityOS build. + set(UNICODE_GENERATOR ../../Userland/Libraries/LibUnicode/CodeGenerators/GenerateUnicodeData) + set(UNICODE_DATA_HEADER LibUnicode/UnicodeData.h) + set(UNICODE_DATA_IMPLEMENTATION LibUnicode/UnicodeData.cpp) + endif() + add_custom_command( OUTPUT ${UNICODE_DATA_HEADER} COMMAND ${write_if_different} ${UNICODE_DATA_HEADER} ${UNICODE_GENERATOR} -h -u ${UNICODE_DATA_PATH}