diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index 5f01d805..97d929f3 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -13,15 +13,14 @@ on: jobs: coverage-ubuntu-gcc: timeout-minutes: 30 - # JavaScriptCore requires libicu66 which is only avaliable on ubuntu-20.04 - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest strategy: fail-fast: false matrix: backends: [ V8, JavaScriptCore, QuickJs, Lua ] steps: - uses: actions/checkout@v4.1.7 - - uses: actions/cache@v4.0.2 + - uses: actions/cache@v4 with: key: ScriptX-UnitTests-Depedencies-${{ hashFiles('test/cmake/**') }} path: | diff --git a/.github/workflows/unit_tests.yml b/.github/workflows/unit_tests.yml index 18b0723f..687ec558 100644 --- a/.github/workflows/unit_tests.yml +++ b/.github/workflows/unit_tests.yml @@ -25,7 +25,7 @@ jobs: # - Release steps: - uses: actions/checkout@v4.1.7 - - uses: actions/cache@v4.0.2 + - uses: actions/cache@v4 with: key: ScriptX-UnitTests-Depedencies-${{ hashFiles('test/cmake/**') }} path: | @@ -62,7 +62,7 @@ jobs: - Release steps: - uses: actions/checkout@v4.1.7 - - uses: actions/cache@v4.0.2 + - uses: actions/cache@v4 with: key: ScriptX-UnitTests-Depedencies-${{ hashFiles('test/cmake/**') }} path: | @@ -102,8 +102,7 @@ jobs: ubuntu-gcc-run: timeout-minutes: 30 - # JavaScriptCore requires libicu66 which is only avaliable on ubuntu-20.04 - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest strategy: fail-fast: false matrix: @@ -113,7 +112,7 @@ jobs: - Release steps: - uses: actions/checkout@v4.1.7 - - uses: actions/cache@v4.0.2 + - uses: actions/cache@v4 with: key: ScriptX-UnitTests-Depedencies-${{ hashFiles('test/cmake/**') }} path: | @@ -140,7 +139,7 @@ jobs: ubuntu-v8-versions-build: timeout-minutes: 60 - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest strategy: fail-fast: false matrix: @@ -148,7 +147,7 @@ jobs: job_split: [ 0/8, 1/8, 2/8, 3/8, 4/8, 5/8, 6/8, 7/8 ] steps: - uses: actions/checkout@v4.1.7 - - uses: actions/cache@v4.0.2 + - uses: actions/cache@v4 with: key: ScriptX-UnitTests-Depedencies-${{ hashFiles('test/cmake/**') }} path: | @@ -177,7 +176,7 @@ jobs: - Release steps: - uses: actions/checkout@v4.1.7 - - uses: actions/cache@v4.0.2 + - uses: actions/cache@v4 with: key: ScriptX-UnitTests-Depedencies-${{ hashFiles('test/cmake/**') }} path: | @@ -206,7 +205,7 @@ jobs: strategy: fail-fast: false matrix: - node-version: [ 14.x, 15.x, 16.x, 18.x ] # 19.x + node-version: [ 18.x, 20.x, 22.x ] # 24.x steps: - uses: actions/checkout@v4.1.7 - name: Use Node.js ${{ matrix.node-version }} @@ -230,10 +229,10 @@ jobs: strategy: fail-fast: false matrix: - emscripten-version: [ '3.0.0', '3.1.33' ] + emscripten-version: [ '4.0.0', '3.1.33' ] steps: - uses: actions/checkout@v4.1.7 - - uses: actions/cache@v4.0.2 + - uses: actions/cache@v4 with: key: ScriptX-UnitTests-Depedencies-${{ hashFiles('test/cmake/**') }} path: | @@ -245,9 +244,9 @@ jobs: version: ${{ matrix.emscripten-version }} actions-cache-folder: emsdk-cache-${{ matrix.emscripten-version }} - name: Setup Node.js - uses: actions/setup-node@v4.0.4 + uses: actions/setup-node@v4 with: - node-version: '19.3.0' # insteadof '>= 14', use fixed version + node-version: 24 # insteadof '>= 14', use fixed version - name: Configure Webassembly backend env: SCRIPTX_TEST_FORCE_UPDATE_DEPS: ON @@ -264,5 +263,4 @@ jobs: run: | cd build # exclude failed tests - # --no-experimental-fetch config from https://github.com/emscripten-core/emscripten/issues/16915 - node --no-experimental-fetch UnitTests.js '--gtest_filter=-ThreadPool.*:EngineScopeTest.ExitEngine:EngineScopeTest.TwoThreads:EngineScopeTest.ThreadLocal:MessageQueue.Interrupt:MessageQueue.Shutdown:MessageQueue.ShutdownNow:MessageQueue.FullAndPostInsideLoopQueue:ReferenceTest.WeakGc:ReferenceTest.WeakGc:ReferenceTest.GlobalNotClear:ReferenceTest.GlobalOnEngineDestroy:ReferenceTest.WeakOnEngineDestroy:ReferenceTest.WeakNotClrear:ManagedObjectTest.EngineDispose:ManagedObjectTest.FunctionCallback:PressureTest.All:EngineTest.JsPromiseTest:EngineTest.JsPromiseTest2:ShowCaseTest.SetTimeout' + node UnitTests.js '--gtest_filter=-ThreadPool.*:EngineScopeTest.ExitEngine:EngineScopeTest.TwoThreads:EngineScopeTest.ThreadLocal:MessageQueue.Interrupt:MessageQueue.Shutdown:MessageQueue.ShutdownNow:MessageQueue.FullAndPostInsideLoopQueue:ReferenceTest.WeakGc:ReferenceTest.WeakGc:ReferenceTest.GlobalNotClear:ReferenceTest.GlobalOnEngineDestroy:ReferenceTest.WeakOnEngineDestroy:ReferenceTest.WeakNotClrear:ManagedObjectTest.EngineDispose:ManagedObjectTest.FunctionCallback:PressureTest.All:EngineTest.JsPromiseTest:EngineTest.JsPromiseTest2:ShowCaseTest.SetTimeout' diff --git a/CMakeLists.txt b/CMakeLists.txt index 56fc7980..8df79502 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0) +cmake_minimum_required(VERSION 3.6) file(STRINGS ${CMAKE_CURRENT_LIST_DIR}/VERSION SCRIPTX_VERSION) diff --git a/backend/JavaScriptCore/JscEngine.cc b/backend/JavaScriptCore/JscEngine.cc index 6b5d8045..1dd0693d 100644 --- a/backend/JavaScriptCore/JscEngine.cc +++ b/backend/JavaScriptCore/JscEngine.cc @@ -28,8 +28,10 @@ JSClassRef JscEngine::externalClass_{}; // When we link against high-version library // but run with a low-version one, macOS/iOS linker just set the undefined symbols to nullptr. -// cast to void* to suppress g++ -Werror=address +// suppress g++ -Werror=address +SCRIPTX_BEGIN_INCLUDE_LIBRARY bool JscEngine::hasByteBufferAPI_ = reinterpret_cast(&JSValueGetTypedArrayType) != nullptr; +SCRIPTX_END_INCLUDE_LIBRARY JscEngine::JscEngine(std::shared_ptr mq) : messageQueue_(mq ? std::move(mq) : std::make_shared()) { diff --git a/src/foundation.h b/src/foundation.h index 84bb75f6..c7cfe6a7 100644 --- a/src/foundation.h +++ b/src/foundation.h @@ -58,7 +58,7 @@ struct ImplType { #ifdef _MSC_VER -// MSVC only support the standart _Pragma on recent version, use the extension key word here +// MSVC only support the standard _Pragma on recent version, use the extension key word here #define SCRIPTX_BEGIN_INCLUDE_LIBRARY __pragma(warning(push, 0)) #define SCRIPTX_END_INCLUDE_LIBRARY __pragma(pop) @@ -73,10 +73,12 @@ struct ImplType { // GCC can't suppress all warnings by -Wall // suppress anything encountered explicitly // 1. -Wcast-function-type for QuickJs +// 2. -Waddress for JSC nullable function symbol #define SCRIPTX_BEGIN_INCLUDE_LIBRARY \ _Pragma("GCC diagnostic push") _Pragma("GCC diagnostic ignored \"-Wall\"") \ - _Pragma("GCC diagnostic ignored \"-Wcast-function-type\"") + _Pragma("GCC diagnostic ignored \"-Wcast-function-type\"") \ + _Pragma("GCC diagnostic ignored \"-Waddress\"") #define SCRIPTX_END_INCLUDE_LIBRARY _Pragma("GCC diagnostic pop") diff --git a/src/utils/MessageQueue.h b/src/utils/MessageQueue.h index 756629c0..9d8b7ddd 100644 --- a/src/utils/MessageQueue.h +++ b/src/utils/MessageQueue.h @@ -25,6 +25,7 @@ #include #include #include +#include #include #include "../foundation.h" #include "MemoryPool.hpp" @@ -58,7 +59,7 @@ struct alignas(std::max_align_t) ArbitraryData { inline ArbitraryData& ArbitraryData::operator=(const ArbitraryData& copy) { // copy ArbitraryData byte-by-byte // since is may be used as a chunk of memory to support placement new. - std::memcpy(this, ©, sizeof(copy)); // NOLINT + std::memcpy(static_cast(this), ©, sizeof(copy)); // NOLINT return *this; } diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index e277e827..4a6c48b5 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0) +cmake_minimum_required(VERSION 3.6) set(CMAKE_CXX_STANDARD 20) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) @@ -143,7 +143,7 @@ if (${SCRIPTX_BACKEND} STREQUAL ${SCRIPTX_BACKEND_WEBASSEMBLY}) ) target_link_options(UnitTests PRIVATE "-sEXPORTED_FUNCTIONS=['_main']" - "-sEXTRA_EXPORTED_RUNTIME_METHODS=['callMain']") + "-sEXPORTED_RUNTIME_METHODS=['callMain', 'HEAPU8', 'HEAP8', 'allocateUTF8']") endif () add_test( diff --git a/test/src/NativeTest.cc b/test/src/NativeTest.cc index f1690215..b011d924 100644 --- a/test/src/NativeTest.cc +++ b/test/src/NativeTest.cc @@ -74,7 +74,7 @@ class TestClass : public ScriptClass { static TestClass* create(const Arguments& args) { return new TestClass(args.thiz()); } }; -const ClassDefine TestClassDefAll = +static const ClassDefine TestClassDefAll = defineClass("TestClass") .nameSpace("script.engine.test") .constructor() @@ -86,14 +86,14 @@ const ClassDefine TestClassDefAll = .instanceProperty("src", &TestClass::getSrc, &TestClass::setSrc) .build(); -const ClassDefine TestClassDefStatic = +static const ClassDefine TestClassDefStatic = defineClass("TestClass") .nameSpace("script.engine.test") .function("add", &TestClass::add) .property("version", &TestClass::getVersion, &TestClass::setVersion) .build(); -const ClassDefine TestClassDefInstance = +static const ClassDefine TestClassDefInstance = defineClass("TestClass") .nameSpace("script.engine.test") .constructor(TestClass::create) @@ -664,7 +664,7 @@ class InternalStorageTest : public ScriptClass { Local getVal() { return getInternalStore().get(0); } }; -ClassDefine internalStorageTest = +static ClassDefine internalStorageTest = defineClass("InternalStorageTest") .constructor() .instanceProperty("val", &InternalStorageTest::getVal, &InternalStorageTest::setVal) @@ -860,7 +860,7 @@ TEST_F(NativeTest, MissMatchedType) { EngineScope scope(engine); - auto def = defineClass("Instance") + static auto def = defineClass("Instance") .constructor() .function("sfun", &Instance::sfun) .instanceFunction("fun", &Instance::fun) @@ -1083,7 +1083,7 @@ TEST_F(NativeTest, NativeFounction) { using ScriptClass::ScriptClass; }; - auto def = defineClass("Instance") + static auto def = defineClass("Instance") .constructor() .instanceFunction("f", [](Instance*, int) {}) .build(); diff --git a/test/src/ThreadPoolTest.cc b/test/src/ThreadPoolTest.cc index 21606e6d..ac23fb5c 100644 --- a/test/src/ThreadPoolTest.cc +++ b/test/src/ThreadPoolTest.cc @@ -17,6 +17,7 @@ #include #include +#include #include #include #include "test.h" diff --git a/test/src/ValueTest.cc b/test/src/ValueTest.cc index 82330f51..bbed020e 100644 --- a/test/src/ValueTest.cc +++ b/test/src/ValueTest.cc @@ -557,7 +557,7 @@ void testNumber(T value) { EXPECT_EQ(num.toInt64(), static_cast(value)); #endif EXPECT_FLOAT_EQ(num.toFloat(), static_cast(value)); - EXPECT_FLOAT_EQ(num.toDouble(), static_cast(value)); + EXPECT_DOUBLE_EQ(num.toDouble(), static_cast(value)); } TEST_F(ValueTest, Number) {