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}