From 8ac284dba4df8fc271c6bf05813530007935d6c7 Mon Sep 17 00:00:00 2001 From: Gary Hsu Date: Thu, 16 Nov 2023 15:37:51 -0800 Subject: [PATCH 1/4] Update CMakeLists.txt for consistency --- CMakeLists.txt | 104 +++++++++++++++++++------------------------------ 1 file changed, 39 insertions(+), 65 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e4123c11..1d0fc36c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,41 +1,42 @@ cmake_minimum_required(VERSION 3.21) -# Avoid warning about DOWNLOAD_EXTRACT_TIMESTAMP in CMake 3.24 -if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.24.0") +if(POLICY CMP0135) cmake_policy(SET CMP0135 NEW) endif() include(FetchContent) -# Modules declaration -FetchContent_Declare(cmake-extensions - GIT_REPOSITORY https://github.com/BabylonJS/CMakeExtensions.git - GIT_TAG efe7101be5e04391b9e55f68a01d534f54d3026e) -FetchContent_Declare(ios-cmake - GIT_REPOSITORY https://github.com/leetal/ios-cmake.git - GIT_TAG 04d91f6675dabb3c97df346a32f6184b0a7ef845) -FetchContent_Declare(arcana +# -------------------------------------------------- +# Declarations +# -------------------------------------------------- +FetchContent_Declare(arcana.cpp GIT_REPOSITORY https://github.com/microsoft/arcana.cpp.git GIT_TAG f2757396e80bc4169f2ddb938ce25367a98ffdd0) -FetchContent_Declare(UrlLib - GIT_REPOSITORY https://github.com/BabylonJS/UrlLib.git - GIT_TAG 8fba6e8294b88f034b7bc8c8b75446ff477ca3dd) FetchContent_Declare(asio GIT_REPOSITORY https://github.com/chriskohlhoff/asio.git GIT_TAG f693a3eb7fe72a5f19b975289afc4f437d373d9c) +FetchContent_Declare(CMakeExtensions + GIT_REPOSITORY https://github.com/BabylonJS/CMakeExtensions.git + GIT_TAG 36383052398767cbb3a7daa2bc96e62163bd549a) +FetchContent_Declare(ios-cmake + GIT_REPOSITORY https://github.com/leetal/ios-cmake.git + GIT_TAG 4.4.1) FetchContent_Declare(llhttp URL "https://github.com/nodejs/llhttp/archive/refs/tags/release/v8.1.0.tar.gz") +FetchContent_Declare(UrlLib + GIT_REPOSITORY https://github.com/bghgary/UrlLib.git + GIT_TAG 3887ccc8cc838700340555581f76cac6b362fa91) +# -------------------------------------------------- -set(CONTENT_TO_FETCH cmake-extensions) +FetchContent_MakeAvailable(CMakeExtensions) if(IOS) - FetchContent_MakeAvailable(ios-cmake) + FetchContent_MakeAvailable_With_Message(ios-cmake) set(CMAKE_TOOLCHAIN_FILE "${ios-cmake_SOURCE_DIR}/ios.toolchain.cmake" CACHE PATH "") set(PLATFORM "OS64COMBINED" CACHE STRING "") set(DEPLOYMENT_TARGET "12" CACHE STRING "") endif() -# Project project(JsRuntimeHost) set_property(GLOBAL PROPERTY USE_FOLDERS ON) @@ -43,14 +44,20 @@ set_property(GLOBAL PROPERTY USE_FOLDERS ON) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) +# -------------------------------------------------- # Options +# -------------------------------------------------- + +# General +option(JSRUNTIMEHOST_TESTS "Include JsRuntimeHost Tests." ${PROJECT_IS_TOP_LEVEL}) +option(NAPI_BUILD_ABI "Build the ABI layer." ON) -## Core +# Core option(JSRUNTIMEHOST_CORE_APPRUNTIME "Include JsRuntimeHost Core AppRuntime" ON) option(JSRUNTIMEHOST_CORE_APPRUNTIME_V8_INSPECTOR "Include the V8 inspector protocol required to debug JavaScript with a V8 debugger." ON) option(JSRUNTIMEHOST_CORE_SCRIPTLOADER "Include JsRuntimeHost Core ScriptLoader" ON) -## Polyfills +# Polyfills option(JSRUNTIMEHOST_POLYFILL_CONSOLE "Include JsRuntimeHost Polyfill Console." ON) option(JSRUNTIMEHOST_POLYFILL_SCHEDULING "Include JsRuntimeHost Polyfill Scheduling." ON) option(JSRUNTIMEHOST_POLYFILL_XMLHTTPREQUEST "Include JsRuntimeHost Polyfill XMLHttpRequest." ON) @@ -58,61 +65,28 @@ option(JSRUNTIMEHOST_POLYFILL_URL "Include JsRuntimeHost Polyfill URL and URLSea option(JSRUNTIMEHOST_POLYFILL_ABORT_CONTROLLER "Include JsRuntimeHost Polyfills AbortController and AbortSignal." ON) option(JSRUNTIMEHOST_POLYFILL_WEBSOCKET "Include JsRuntimeHost Polyfill WebSocket." ON) -## Tests -option(JSRUNTIMEHOST_TESTS "Include JsRuntimeHost Tests." ${PROJECT_IS_TOP_LEVEL}) +# -------------------------------------------------- -## Node-API -option(NAPI_BUILD_ABI "Build the ABI layer." ON) +FetchContent_MakeAvailable_With_Message(arcana.cpp) +set_property(TARGET arcana PROPERTY FOLDER Dependencies) -# Dependencies - -if(NOT TARGET arcana) - set(CONTENT_TO_FETCH ${CONTENT_TO_FETCH} arcana) -endif() - -if(NOT TARGET UrlLib AND JSRUNTIMEHOST_POLYFILL_XMLHTTPREQUEST) - set(CONTENT_TO_FETCH ${CONTENT_TO_FETCH} UrlLib) -endif() - -if(NAPI_JAVASCRIPT_ENGINE STREQUAL "V8" AND JSRUNTIMEHOST_CORE_APPRUNTIME_V8_INSPECTOR) - if(NOT TARGET asio) - set(CONTENT_TO_FETCH ${CONTENT_TO_FETCH} asio) - endif() - - if(NOT TARGET llhttp_static) - set(BUILD_SHARED_LIBS OFF CACHE INTERNAL "") - set(BUILD_STATIC_LIBS ON CACHE INTERNAL "") - set(CONTENT_TO_FETCH ${CONTENT_TO_FETCH} llhttp) - endif() -endif() - -# Fetching content -message(STATUS "Fetching dependencies for ${PROJECT_NAME} (${CONTENT_TO_FETCH})") -FetchContent_MakeAvailable(${CONTENT_TO_FETCH}) -message(STATUS "Fetching dependencies for ${PROJECT_NAME} - done") - -# Set properties after fetching content -if(TARGET arcana) - set_property(TARGET arcana PROPERTY FOLDER Dependencies) -endif() - -if(TARGET UrlLib AND JSRUNTIMEHOST_POLYFILL_XMLHTTPREQUEST) +if(JSRUNTIMEHOST_POLYFILL_XMLHTTPREQUEST) + FetchContent_MakeAvailable_With_Message(UrlLib) set_property(TARGET UrlLib PROPERTY FOLDER Dependencies) endif() if(NAPI_JAVASCRIPT_ENGINE STREQUAL "V8" AND JSRUNTIMEHOST_CORE_APPRUNTIME_V8_INSPECTOR) - if(NOT TARGET asio) - add_library(asio INTERFACE) - target_include_directories(asio INTERFACE "${asio_SOURCE_DIR}/asio/include") - set_property(TARGET asio PROPERTY FOLDER Dependencies) - endif() - if(NOT TARGET llhttp_static) - set_property(TARGET llhttp_static PROPERTY FOLDER Dependencies) - endif() + FetchContent_MakeAvailable_With_Message(asio) + add_library(asio INTERFACE) + target_include_directories(asio INTERFACE "${asio_SOURCE_DIR}/asio/include") + set_property(TARGET asio PROPERTY FOLDER Dependencies) + + set(BUILD_SHARED_LIBS OFF CACHE INTERNAL "") + set(BUILD_STATIC_LIBS ON CACHE INTERNAL "") + FetchContent_MakeAvailable_With_Message(llhttp) + set_property(TARGET llhttp_static PROPERTY FOLDER Dependencies) endif() -# Subdirectories - if(ANDROID) set(JSRUNTIMEHOST_PLATFORM "Android") elseif(IOS) From 983b06882462dbe627199ceeb3299aa07c5067ef Mon Sep 17 00:00:00 2001 From: Gary Hsu Date: Tue, 20 Feb 2024 17:11:39 -0800 Subject: [PATCH 2/4] Ugh, missed a file --- CMakeLists.txt | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1d0fc36c..8cf181f5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,7 +17,9 @@ FetchContent_Declare(asio GIT_TAG f693a3eb7fe72a5f19b975289afc4f437d373d9c) FetchContent_Declare(CMakeExtensions GIT_REPOSITORY https://github.com/BabylonJS/CMakeExtensions.git - GIT_TAG 36383052398767cbb3a7daa2bc96e62163bd549a) + GIT_TAG ea28b7689530bfdc4905806f27ecf7e8ed4b5419) +FetchContent_Declare(googletest + URL "https://github.com/google/googletest/archive/refs/tags/v1.14.0.tar.gz") FetchContent_Declare(ios-cmake GIT_REPOSITORY https://github.com/leetal/ios-cmake.git GIT_TAG 4.4.1) @@ -25,7 +27,7 @@ FetchContent_Declare(llhttp URL "https://github.com/nodejs/llhttp/archive/refs/tags/release/v8.1.0.tar.gz") FetchContent_Declare(UrlLib GIT_REPOSITORY https://github.com/bghgary/UrlLib.git - GIT_TAG 3887ccc8cc838700340555581f76cac6b362fa91) + GIT_TAG 59917f32f6ddfa26af07dd981842c51ce02dafcd) # -------------------------------------------------- FetchContent_MakeAvailable(CMakeExtensions) @@ -87,6 +89,23 @@ if(NAPI_JAVASCRIPT_ENGINE STREQUAL "V8" AND JSRUNTIMEHOST_CORE_APPRUNTIME_V8_INS set_property(TARGET llhttp_static PROPERTY FOLDER Dependencies) endif() +if(JSRUNTIMEHOST_TESTS AND (WIN32 OR (APPLE AND NOT IOS) OR (UNIX AND NOT ANDROID))) + if(WIN32) + # For Windows: Prevent overriding the parent project's compiler/linker settings + # Default build type for my test projects are /MDd (MultiThreaded DLL) but GTests default to /MTd (MultiTreaded) + # see https://github.com/google/googletest/blob/main/googletest/README.md + # "Enabling this option will make gtest link the runtimes dynamically too, and match the project in which it is included." + set(gtest_force_shared_crt OFF CACHE BOOL "" FORCE) + endif() + + FetchContent_MakeAvailable_With_Message(googletest) + + set_property(TARGET gmock PROPERTY FOLDER Dependencies/GoogleTest) + set_property(TARGET gmock_main PROPERTY FOLDER Dependencies/GoogleTest) + set_property(TARGET gtest PROPERTY FOLDER Dependencies/GoogleTest) + set_property(TARGET gtest_main PROPERTY FOLDER Dependencies/GoogleTest) +endif() + if(ANDROID) set(JSRUNTIMEHOST_PLATFORM "Android") elseif(IOS) From 357d809cefcf99fee72ec5c282d230e6ec75c6fe Mon Sep 17 00:00:00 2001 From: Gary Hsu Date: Tue, 20 Feb 2024 17:33:20 -0800 Subject: [PATCH 3/4] Fix build --- CMakeLists.txt | 4 ++-- Tests/UnitTests/Shared/Shared.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8cf181f5..e343542f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -89,10 +89,10 @@ if(NAPI_JAVASCRIPT_ENGINE STREQUAL "V8" AND JSRUNTIMEHOST_CORE_APPRUNTIME_V8_INS set_property(TARGET llhttp_static PROPERTY FOLDER Dependencies) endif() -if(JSRUNTIMEHOST_TESTS AND (WIN32 OR (APPLE AND NOT IOS) OR (UNIX AND NOT ANDROID))) +if(JSRUNTIMEHOST_TESTS) if(WIN32) # For Windows: Prevent overriding the parent project's compiler/linker settings - # Default build type for my test projects are /MDd (MultiThreaded DLL) but GTests default to /MTd (MultiTreaded) + # Default build type for my test projects are /MDd (MultiThreaded DLL) but GTests default to /MTd (MultiThreaded) # see https://github.com/google/googletest/blob/main/googletest/README.md # "Enabling this option will make gtest link the runtimes dynamically too, and match the project in which it is included." set(gtest_force_shared_crt OFF CACHE BOOL "" FORCE) diff --git a/Tests/UnitTests/Shared/Shared.cpp b/Tests/UnitTests/Shared/Shared.cpp index 44fb22b8..fa88d982 100644 --- a/Tests/UnitTests/Shared/Shared.cpp +++ b/Tests/UnitTests/Shared/Shared.cpp @@ -1,4 +1,3 @@ -#include "gtest/gtest.h" #include "Shared.h" #include #include @@ -7,6 +6,7 @@ #include #include #include +#include #include const char* EnumToString(Babylon::Polyfills::Console::LogLevel logLevel) From 7e84a5ee935e0a5aba276485ae952d89292be169 Mon Sep 17 00:00:00 2001 From: Gary Hsu Date: Tue, 20 Feb 2024 18:00:23 -0800 Subject: [PATCH 4/4] Fix Android build --- Tests/UnitTests/Android/app/src/main/cpp/CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Tests/UnitTests/Android/app/src/main/cpp/CMakeLists.txt b/Tests/UnitTests/Android/app/src/main/cpp/CMakeLists.txt index cdf2d2a2..7fc0f807 100644 --- a/Tests/UnitTests/Android/app/src/main/cpp/CMakeLists.txt +++ b/Tests/UnitTests/Android/app/src/main/cpp/CMakeLists.txt @@ -9,15 +9,17 @@ get_filename_component(UNIT_TESTS_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../../.." get_filename_component(TESTS_DIR "${UNIT_TESTS_DIR}/.." ABSOLUTE) get_filename_component(REPO_ROOT_DIR "${TESTS_DIR}/.." ABSOLUTE) -set(JSRUNTIMEHOST_TESTS OFF) # Turn off the tests folder for Android Studio path add_subdirectory(${REPO_ROOT_DIR} "${CMAKE_CURRENT_BINARY_DIR}/JsRuntimeHost") +FetchContent_MakeAvailable_With_Message(googletest) + npm(install --silent WORKING_DIRECTORY ${TESTS_DIR}) add_library(UnitTestsJNI SHARED JNI.cpp ${UNIT_TESTS_DIR}/Shared/Shared.h ${UNIT_TESTS_DIR}/Shared/Shared.cpp) + target_compile_definitions(UnitTestsJNI PRIVATE JSRUNTIMEHOST_PLATFORM="${JSRUNTIMEHOST_PLATFORM}") target_include_directories(UnitTestsJNI