From 100c29546ef795ca139de0fd8feeac55c6fa312e Mon Sep 17 00:00:00 2001 From: andycall Date: Thu, 31 Oct 2024 21:19:11 +0800 Subject: [PATCH] fix: fix compile in windows with Clang. --- bridge/CMakeLists.txt | 150 +++++++++--------- bridge/core/base/strings/string_util.cc | 1 + bridge/core/css/css_selector.cc | 12 +- .../css/parser/at_rule_descriptor_parser.cc | 1 + .../core/css/parser/css_parser_token_range.h | 2 +- bridge/core/css/parser/css_selector_parser.cc | 2 +- bridge/core/css/parser/css_selector_parser.h | 4 +- bridge/core/css/style_sheet_contents.cc | 2 +- bridge/core/css/style_sheet_contents.h | 2 +- bridge/core/dom/qualified_name.h | 1 + .../platform/fonts/font_selection_types.h | 1 + bridge/core/platform/math_extras.h | 4 + bridge/core/platform/text/string_to_number.cc | 1 - bridge/foundation/string_builder.cc | 2 +- bridge/foundation/string_builder.h | 14 +- .../code_generator/bin/code_generator.js | 129 +++++++-------- bridge/scripts/code_generator/bin/gperf.exe | Bin 0 -> 221710 bytes bridge/third_party/quickjs/src/core/base.h | 2 + .../quickjs/src/core/builtins/js-atomics.c | 11 +- .../third_party/quickjs/src/core/function.h | 2 +- 20 files changed, 176 insertions(+), 167 deletions(-) create mode 100644 bridge/scripts/code_generator/bin/gperf.exe diff --git a/bridge/CMakeLists.txt b/bridge/CMakeLists.txt index 4efd861379..1aafdccd32 100644 --- a/bridge/CMakeLists.txt +++ b/bridge/CMakeLists.txt @@ -3,27 +3,41 @@ set(CMAKE_OSX_DEPLOYMENT_TARGET 12) project(WebF) set(CMAKE_OSX_DEPLOYMENT_TARGET 12) -# MSBuild are slower than Clang/GCC to support new CXX standards. -if(MSVC) + +# We using Clang for all platforms, including Windows. + +if(WIN32) set(CMAKE_CXX_STANDARD 20) + set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE) + set(BUILD_SHARED_LIBS TRUE) else() set(CMAKE_CXX_STANDARD 17) endif() + set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -if(MSVC) - set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE) - set(BUILD_SHARED_LIBS TRUE) +if(WIN32) + add_compile_options( + -Wno-microsoft-enum-forward-reference + -Wno-macro-redefined + -Wno-ignored-pragmas + -Wno-implicit-const-int-float-conversion + -Wno-deprecated-declarations + -Wno-int-to-void-pointer-cast + -Wno-void-pointer-to-int-cast + -Wno-incompatible-pointer-types + -Wno-microsoft-cast + ) endif() -if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") +if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") set(CMAKE_OSX_ARCHITECTURES "x86_64;arm64") endif() set(WEBF_JS_ENGINE $ENV{WEBF_JS_ENGINE}) if(NOT WEBF_JS_ENGINE) - set(WEBF_JS_ENGINE "quickjs") + set(WEBF_JS_ENGINE "quickjs") endif() find_package(Threads REQUIRED) @@ -32,31 +46,29 @@ if(MSVC) add_compile_options(/MP) endif() -if (${ENABLE_PROFILE}) +if(${ENABLE_PROFILE}) add_definitions(-DENABLE_PROFILE=1) -else () +else() add_definitions(-DENABLE_PROFILE=0) -endif () +endif() -if (${ENABLE_LOG}) +if(${ENABLE_LOG}) add_definitions(-DENABLE_LOG=1) else() add_definitions(-DENABLE_LOG=0) endif() -if(NOT MSVC) - if (${CMAKE_BUILD_TYPE} STREQUAL "Release" OR ${CMAKE_BUILD_TYPE} STREQUAL "RelWithDebInfo") - include(CheckIPOSupported) - check_ipo_supported(RESULT supported OUTPUT error) - if( supported ) - set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE) - add_compile_options(-flto) - endif() +if(${CMAKE_BUILD_TYPE} STREQUAL "Release" OR ${CMAKE_BUILD_TYPE} STREQUAL "RelWithDebInfo") + include(CheckIPOSupported) + check_ipo_supported(RESULT supported OUTPUT error) + if(supported) + set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE) + add_compile_options(-flto) endif() endif() list(APPEND WEBF_PUBLIC_HEADERS - ${CMAKE_CURRENT_SOURCE_DIR}/include/webf_bridge.h + ${CMAKE_CURRENT_SOURCE_DIR}/include/webf_bridge.h ) set(QUICKJS_PUBLIC_HEADERS @@ -71,19 +83,19 @@ set(QUICKJS_PUBLIC_HEADERS third_party/quickjs/quickjs-opcode.h ) -if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux") +if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux") add_compile_options(-fPIC) endif() -if (NOT MSVC) - if (${CMAKE_BUILD_TYPE} STREQUAL "Debug") +if(NOT MSVC) + if(${CMAKE_BUILD_TYPE} STREQUAL "Debug") # Avoid quickjs stackoverflow. -# add_compile_options(-O1) + # add_compile_options(-O1) endif() endif() -if (DEFINED PLATFORM) - if (${PLATFORM} STREQUAL "OS") +if(DEFINED PLATFORM) + if(${PLATFORM} STREQUAL "OS") add_compile_options(-fno-aligned-allocation) endif() endif() @@ -112,7 +124,7 @@ list(APPEND BRIDGE_SOURCE multiple_threading/dispatcher.cc multiple_threading/looper.cc ${CMAKE_CURRENT_LIST_DIR}/third_party/dart/include/dart_api_dl.c - ) +) list(APPEND GUMBO_PARSER ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gumbo-parser/src/attribute.c @@ -127,7 +139,7 @@ list(APPEND GUMBO_PARSER ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gumbo-parser/src/utf8.c ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gumbo-parser/src/util.c ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gumbo-parser/src/vector.c - ) +) list(APPEND BRIDGE_INCLUDE ${CMAKE_CURRENT_LIST_DIR}/foundation @@ -139,7 +151,7 @@ list(APPEND BRIDGE_INCLUDE ${CMAKE_CURRENT_LIST_DIR}/third_party/dart ${CMAKE_CURRENT_LIST_DIR}/third_party/double_conversion ${ADDITIONAL_INCLUDE_DIRS} - ) +) add_library(double_conversion STATIC third_party/double_conversion/double-conversion/bignum.cc @@ -153,7 +165,7 @@ add_library(double_conversion STATIC ) list(APPEND BRIDGE_LINK_LIBS double_conversion) -if (${WEBF_JS_ENGINE} MATCHES "quickjs") +if(${WEBF_JS_ENGINE} MATCHES "quickjs") add_compile_options(-DWEBF_QUICK_JS_ENGINE=1) execute_process( @@ -165,10 +177,6 @@ if (${WEBF_JS_ENGINE} MATCHES "quickjs") third_party/modp_b64/modp_b64.cc ) - if (NOT MSVC) - list(APPEND QUICK_JS_SOURCE third_party/quickjs/src/libbf.c) - endif() - list(APPEND QUICK_JS_SOURCE # third_party/quickjs/src/libbf.c third_party/quickjs/src/cutils.c @@ -213,9 +221,9 @@ if (${WEBF_JS_ENGINE} MATCHES "quickjs") third_party/quickjs/src/core/builtins/js-typed-array.c ) - if (${CMAKE_BUILD_TYPE} MATCHES "Debug") + if(${CMAKE_BUILD_TYPE} MATCHES "Debug") add_definitions(-DDDEBUG) - endif () + endif() if(${STATIC_QUICKJS}) add_library(quickjs STATIC ${QUICK_JS_SOURCE}) @@ -224,7 +232,7 @@ if (${WEBF_JS_ENGINE} MATCHES "quickjs") endif() # PThread compact - if(MSVC) + if(WIN32) # Using `add_subdirectory` will failed at cmake install starge due to unknown issues: # https://github.com/flutter/flutter/issues/95530 set(PTHREADS_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/third_party/quickjs/compat/win32/pthread-win32") @@ -257,7 +265,7 @@ if (${WEBF_JS_ENGINE} MATCHES "quickjs") endif() set(MI_OVERRIDE OFF) - if (NOT MSVC AND NOT DEFINED USE_SYSTEM_MALLOC) + if(NOT WIN32 AND NOT DEFINED USE_SYSTEM_MALLOC) add_compile_definitions(ENABLE_MI_MALLOC=1) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/third_party/quickjs/vendor/mimalloc) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/third_party/quickjs/vendor/mimalloc/include) @@ -266,7 +274,7 @@ if (${WEBF_JS_ENGINE} MATCHES "quickjs") target_include_directories(quickjs PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/third_party/quickjs/include) - if (MSVC) + if(WIN32) target_include_directories(quickjs PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/third_party/quickjs/compat/win32/pthread-win32) target_include_directories(quickjs PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/third_party/quickjs/compat/win32/atomic) endif() @@ -363,7 +371,7 @@ if (${WEBF_JS_ENGINE} MATCHES "quickjs") core/css/style_sheet_contents.cc core/css/css_style_sheet.cc core/css/style_rule_import.cc -# core/css/style_recalc_root.cc + # core/css/style_recalc_root.cc core/css/style_sheet.cc core/css/parser/css_parser.cc core/css/parser/css_parser_context.cc @@ -682,7 +690,7 @@ if (${WEBF_JS_ENGINE} MATCHES "quickjs") core/platform/fonts/font.cc core/platform/fonts/font_description.cc - ) + ) # Gen sources. list(APPEND BRIDGE_SOURCE @@ -876,17 +884,15 @@ if (${WEBF_JS_ENGINE} MATCHES "quickjs") out/plugin_api_transition_event.cc out/plugin_api_ui_event.cc out/plugin_api_custom_event.cc - ) + ) - if (NOT MSVC) # Quickjs use __builtin_frame_address() to get stack pointer, we should add follow options to get it work with -O2 # https://stackoverflow.com/questions/14735010/how-do-you-get-gccs-builtin-frame-address-to-work-with-o2 add_compile_options(-fno-optimize-sibling-calls -fno-omit-frame-pointer) - endif() target_compile_options(quickjs PUBLIC -DCONFIG_VERSION=${\"QUICKJS_VERSION\"}) -endif () +endif() list(APPEND PUBLIC_HEADER include/webf_bridge.h @@ -894,24 +900,20 @@ list(APPEND PUBLIC_HEADER add_library(webf SHARED ${BRIDGE_SOURCE}) -if(MSVC) - target_compile_options(webf PRIVATE /JMC) -endif() - target_compile_definitions(webf PUBLIC -DFLUTTER_BACKEND=1) add_library(gumbo_parse_static STATIC ${GUMBO_PARSER}) list(APPEND BRIDGE_LINK_LIBS gumbo_parse_static) -if (ENABLE_ASAN) +if(ENABLE_ASAN) target_compile_options(webf PRIVATE -fsanitize=address -fno-omit-frame-pointer) target_link_options(webf PRIVATE -fsanitize=address -fno-omit-frame-pointer) -endif () +endif() -if (${IS_ANDROID}) +if(${IS_ANDROID}) find_library(log-lib log) - if (${ANDROID_ABI} MATCHES "armeabi-v7a" OR ${ANDROID_ABI} MATCHES "x86") + if(${ANDROID_ABI} MATCHES "armeabi-v7a" OR ${ANDROID_ABI} MATCHES "x86") add_definitions(-DANDROID_32_BIT=1) endif() @@ -929,15 +931,15 @@ target_include_directories(webf PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} PUBLIC ./include) target_link_libraries(webf PRIVATE ${BRIDGE_LINK_LIBS}) -if ($ENV{WEBF_JS_ENGINE} MATCHES "quickjs" AND NOT MSVC) - if (${CMAKE_BUILD_TYPE} STREQUAL "Release" OR ${CMAKE_BUILD_TYPE} STREQUAL "RelWithDebInfo") +if($ENV{WEBF_JS_ENGINE} MATCHES "quickjs" AND NOT MSVC) + if(${CMAKE_BUILD_TYPE} STREQUAL "Release" OR ${CMAKE_BUILD_TYPE} STREQUAL "RelWithDebInfo") target_compile_options(webf PRIVATE -fno-exceptions -fvisibility=hidden -fno-rtti -fdata-sections -ffunction-sections) target_compile_options(quickjs PRIVATE -fno-exceptions -fno-rtti -fdata-sections -ffunction-sections) - else () + else() ### remove dynamic_cast and exceptions target_compile_options(webf PRIVATE -fno-exceptions -fno-rtti) - endif () -endif () + endif() +endif() execute_process( COMMAND node get_app_ver.js @@ -954,36 +956,36 @@ execute_process( string(REPLACE \n "" GIT_HEAD ${GIT_HEAD}) # Remove last \n add_definitions(-DAPP_REV="${GIT_HEAD}") # Read from git head sha1 -if (${ENABLE_TEST}) +if(${ENABLE_TEST}) add_compile_definitions(IS_TEST=true) include(./test/test.cmake) -endif () +endif() -if (DEFINED ENV{LIBRARY_OUTPUT_DIR}) +if(DEFINED ENV{LIBRARY_OUTPUT_DIR}) set_target_properties(webf PROPERTIES LIBRARY_OUTPUT_DIRECTORY "$ENV{LIBRARY_OUTPUT_DIR}" RUNTIME_OUTPUT_DIRECTORY "$ENV{LIBRARY_OUTPUT_DIR}" ) - if ($ENV{WEBF_JS_ENGINE} MATCHES "quickjs") + if($ENV{WEBF_JS_ENGINE} MATCHES "quickjs") set_target_properties(quickjs PROPERTIES - LIBRARY_OUTPUT_DIRECTORY "$ENV{LIBRARY_OUTPUT_DIR}" - RUNTIME_OUTPUT_DIRECTORY "$ENV{LIBRARY_OUTPUT_DIR}" + LIBRARY_OUTPUT_DIRECTORY "$ENV{LIBRARY_OUTPUT_DIR}" + RUNTIME_OUTPUT_DIRECTORY "$ENV{LIBRARY_OUTPUT_DIR}" ) - if(MSVC) + if(WIN32) set_target_properties(pthreadVC3 PROPERTIES - LIBRARY_OUTPUT_DIRECTORY "$ENV{LIBRARY_OUTPUT_DIR}" - RUNTIME_OUTPUT_DIRECTORY "$ENV{LIBRARY_OUTPUT_DIR}" + LIBRARY_OUTPUT_DIRECTORY "$ENV{LIBRARY_OUTPUT_DIR}" + RUNTIME_OUTPUT_DIRECTORY "$ENV{LIBRARY_OUTPUT_DIR}" ) endif() - endif () -elseif (IS_ANDROID) + endif() +elseif(IS_ANDROID) # android do nothing -endif () +endif() -if (${CMAKE_SYSTEM_NAME} MATCHES "iOS") +if(${CMAKE_SYSTEM_NAME} MATCHES "iOS") set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "NO") set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "") @@ -995,7 +997,7 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "iOS") MACOSX_FRAMEWORK_BUNDLE_VERSION 1.0 MACOSX_FRAMEWORK_SHORT_VERSION_STRING 1.0 PUBLIC_HEADER ${WEBF_PUBLIC_HEADERS} - ) + ) # If quickjs is static, there will be no quickjs.framework any more. if(NOT DEFINED STATIC_QUICKJS) @@ -1007,6 +1009,6 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "iOS") MACOSX_FRAMEWORK_BUNDLE_VERSION 1.0 MACOSX_FRAMEWORK_SHORT_VERSION_STRING 1.0 PUBLIC_HEADER ${QUICKJS_PUBLIC_HEADERS} - ) + ) endif() -endif () +endif() diff --git a/bridge/core/base/strings/string_util.cc b/bridge/core/base/strings/string_util.cc index 4870feed1c..8c8bb6e7db 100644 --- a/bridge/core/base/strings/string_util.cc +++ b/bridge/core/base/strings/string_util.cc @@ -7,6 +7,7 @@ */ #include "string_util.h" +#include #include #include "foundation/ascii_types.h" diff --git a/bridge/core/css/css_selector.cc b/bridge/core/css/css_selector.cc index 30c195f25c..6d0fdaeab4 100644 --- a/bridge/core/css/css_selector.cc +++ b/bridge/core/css/css_selector.cc @@ -69,12 +69,12 @@ unsigned MaximumSpecificity(const CSSSelector* first_selector) { return specificity; } -struct SameSizeAsCSSSelector { - unsigned bitfields; - void* pointers[3]; -}; - -static_assert(sizeof(CSSSelector) == sizeof(SameSizeAsCSSSelector)); +// struct SameSizeAsCSSSelector { +// uint32_t bitfields; +// void* pointers[3]; +// }; +// +// static_assert(sizeof(CSSSelector) == sizeof(SameSizeAsCSSSelector)); CSSSelector::CSSSelector(MatchType match_type, const QualifiedName& attribute, diff --git a/bridge/core/css/parser/at_rule_descriptor_parser.cc b/bridge/core/css/parser/at_rule_descriptor_parser.cc index b112b62741..a3e24cfe25 100644 --- a/bridge/core/css/parser/at_rule_descriptor_parser.cc +++ b/bridge/core/css/parser/at_rule_descriptor_parser.cc @@ -233,6 +233,7 @@ std::shared_ptr ConsumeDescriptor(StyleRule::RuleType rule_type, case StyleRule::kStartingStyle: case StyleRule::kFunction: case StyleRule::kPositionTry: + default: // TODO(andruud): Handle other descriptor types here. NOTREACHED_IN_MIGRATION(); return nullptr; diff --git a/bridge/core/css/parser/css_parser_token_range.h b/bridge/core/css/parser/css_parser_token_range.h index b04fc9c68c..e3f3173df0 100644 --- a/bridge/core/css/parser/css_parser_token_range.h +++ b/bridge/core/css/parser/css_parser_token_range.h @@ -124,7 +124,7 @@ class CSSParserTokenOffsets { const CSSParserToken* end) const { uint32_t begin_offset = OffsetFor(begin); uint32_t end_offset = OffsetFor(end); - return std::string_view(string_.begin() + begin_offset, end_offset - begin_offset); + return std::string_view(string_.data() + begin_offset, end_offset - begin_offset); } private: diff --git a/bridge/core/css/parser/css_selector_parser.cc b/bridge/core/css/parser/css_selector_parser.cc index 3d2274abf2..4cf4026ea9 100644 --- a/bridge/core/css/parser/css_selector_parser.cc +++ b/bridge/core/css/parser/css_selector_parser.cc @@ -1720,7 +1720,7 @@ bool CSSSelectorParser::ConsumeSimpleSelector(CSSParserTokenStream& stream) { return true; } -const std::string& CSSSelectorParser::DefaultNamespace() const { +const std::string CSSSelectorParser::DefaultNamespace() const { if (!style_sheet_ || ignore_default_namespace_) { return "*"; } diff --git a/bridge/core/css/parser/css_selector_parser.h b/bridge/core/css/parser/css_selector_parser.h index 3fbce95942..cda4d670ce 100644 --- a/bridge/core/css/parser/css_selector_parser.h +++ b/bridge/core/css/parser/css_selector_parser.h @@ -165,7 +165,7 @@ class CSSSelectorParser { // This doesn't include element names, since they're handled specially bool ConsumeSimpleSelector(CSSParserTokenStream&); - const std::string& DefaultNamespace() const; + const std::string DefaultNamespace() const; std::optional DetermineNamespace(const std::optional& prefix); // Returns an empty range on error. @@ -284,7 +284,7 @@ class CSSSelectorParser { tcb::span AddedElements() { DCHECK_GE(vector_.size(), initial_size_); - return {(vector_.begin() + initial_size_).base(), vector_.end().base()}; + return {(vector_.data() + initial_size_), vector_.data() + vector_.size()}; } // Make sure the added elements are left on the vector after diff --git a/bridge/core/css/style_sheet_contents.cc b/bridge/core/css/style_sheet_contents.cc index c4c2fe2dc0..141127fcdb 100644 --- a/bridge/core/css/style_sheet_contents.cc +++ b/bridge/core/css/style_sheet_contents.cc @@ -332,7 +332,7 @@ void StyleSheetContents::Trace(webf::GCVisitor* gc_visitor) const { } } -const std::optional& StyleSheetContents::NamespaceURIFromPrefix(const std::string& prefix) const { +const std::optional StyleSheetContents::NamespaceURIFromPrefix(const std::string& prefix) const { auto it = namespaces_.find(prefix); return it != namespaces_.end() ? std::optional(it->second) : std::nullopt; } diff --git a/bridge/core/css/style_sheet_contents.h b/bridge/core/css/style_sheet_contents.h index e568918b2a..a9143c81de 100644 --- a/bridge/core/css/style_sheet_contents.h +++ b/bridge/core/css/style_sheet_contents.h @@ -72,7 +72,7 @@ class StyleSheetContents : public std::enable_shared_from_this& NamespaceURIFromPrefix(const std::string& prefix) const; + const std::optional NamespaceURIFromPrefix(const std::string& prefix) const; void ParserAddNamespace(const std::optional& prefix, const std::optional& uri); diff --git a/bridge/core/dom/qualified_name.h b/bridge/core/dom/qualified_name.h index bcfb3a2a45..f3227b6a85 100644 --- a/bridge/core/dom/qualified_name.h +++ b/bridge/core/dom/qualified_name.h @@ -24,6 +24,7 @@ #ifndef WEBF_QUALIFIED_NAME_H #define WEBF_QUALIFIED_NAME_H +#include #include #include "bindings/qjs/atomic_string.h" #include "core/base/hash/hash.h" diff --git a/bridge/core/platform/fonts/font_selection_types.h b/bridge/core/platform/fonts/font_selection_types.h index df1f2fbaa2..ecefbb50fb 100644 --- a/bridge/core/platform/fonts/font_selection_types.h +++ b/bridge/core/platform/fonts/font_selection_types.h @@ -26,6 +26,7 @@ #ifndef WEBF_CORE_PLATFORM_FONTS_FONT_SELECTION_TYPES_H_ #define WEBF_CORE_PLATFORM_FONTS_FONT_SELECTION_TYPES_H_ +#include #include "foundation/macros.h" #include "core/platform/math_extras.h" diff --git a/bridge/core/platform/math_extras.h b/bridge/core/platform/math_extras.h index 6598b11395..e7b090a851 100644 --- a/bridge/core/platform/math_extras.h +++ b/bridge/core/platform/math_extras.h @@ -36,6 +36,10 @@ #include #include "foundation/macros.h" +#if defined(_WIN32) +#include +#endif + constexpr double kPiDouble = M_PI; constexpr float kPiFloat = static_cast(M_PI); diff --git a/bridge/core/platform/text/string_to_number.cc b/bridge/core/platform/text/string_to_number.cc index 629b16f7bc..06f372f59f 100644 --- a/bridge/core/platform/text/string_to_number.cc +++ b/bridge/core/platform/text/string_to_number.cc @@ -10,7 +10,6 @@ #include #include #include -#include #include "foundation/ascii_types.h" #include "foundation/string_builder.h" diff --git a/bridge/foundation/string_builder.cc b/bridge/foundation/string_builder.cc index dfdf37e522..1fad00824d 100644 --- a/bridge/foundation/string_builder.cc +++ b/bridge/foundation/string_builder.cc @@ -7,7 +7,7 @@ namespace webf { -void StringBuilder::CreateBuffer8(unsigned int added_size) { +void StringBuilder::CreateBuffer8(size_t added_size) { DCHECK(!HasBuffer()); has_buffer_ = true; // createBuffer is called right before appending addedSize more bytes. We diff --git a/bridge/foundation/string_builder.h b/bridge/foundation/string_builder.h index bf428ce3c4..4a5e7a1ca3 100644 --- a/bridge/foundation/string_builder.h +++ b/bridge/foundation/string_builder.h @@ -6,6 +6,7 @@ #ifndef WEBF_FOUNDATION_STRING_BUILDER_H_ #define WEBF_FOUNDATION_STRING_BUILDER_H_ +#include #include #include #include @@ -103,7 +104,6 @@ class StringBuilder { return; } - EnsureBuffer8(view.length()); string_.append(view); length_ += view.length(); @@ -166,7 +166,7 @@ class StringBuilder { return string_.data(); } - operator StringView() const { return StringView(Characters8(), length_); } + operator StringView() const { return StringView(Characters8(), static_cast(length_)); } std::string ReleaseString() { return string_; } @@ -177,20 +177,20 @@ class StringBuilder { void Reserve(unsigned new_size); private: - static const unsigned kInlineBufferSize = 16; - static unsigned InitialBufferSize() { return kInlineBufferSize; } + static const size_t kInlineBufferSize = 16; + static size_t InitialBufferSize() { return kInlineBufferSize; } - void EnsureBuffer8(unsigned added_size) { + void EnsureBuffer8(size_t added_size) { if (!HasBuffer()) CreateBuffer8(added_size); } bool HasBuffer() const { return has_buffer_; } - void CreateBuffer8(unsigned added_size); + void CreateBuffer8(size_t added_size); friend bool operator==(const StringBuilder& a, const std::string& b); - unsigned length_ = 0; + size_t length_ = 0; std::string string_; bool has_buffer_ = false; }; diff --git a/bridge/scripts/code_generator/bin/code_generator.js b/bridge/scripts/code_generator/bin/code_generator.js index 4ae31aedd7..7ade69759b 100644 --- a/bridge/scripts/code_generator/bin/code_generator.js +++ b/bridge/scripts/code_generator/bin/code_generator.js @@ -1,31 +1,32 @@ #!/usr/bin/env node -const { program } = require('commander'); +const {program} = require('commander'); const packageJSON = require('../package.json'); const path = require('path'); const glob = require('glob'); const fs = require('fs'); -const { execSync } = require('child_process'); -const { IDLBlob } = require('../dist/idl/IDLBlob'); -const { JSONBlob } = require('../dist/json/JSONBlob'); -const { JSONTemplate } = require('../dist/json/JSONTemplate'); -const { analyzer } = require('../dist/idl/analyzer'); -const { generatorSource } = require('../dist/idl/generator') -const { generateUnionTypes, generateUnionTypeFileName } = require('../dist/idl/generateUnionTypes') -const { generateJSONTemplate } = require('../dist/json/generator'); -const { generateNamesInstaller } = require("../dist/json/generator"); -const { generatePluginAPI } = require("../dist/idl/pluginAPIGenerator/cppGen"); -const { generateRustSource } = require("../dist/idl/pluginAPIGenerator/rsGen"); -const { union } = require("lodash"); +const os = require('os'); +const {execSync} = require('child_process'); +const {IDLBlob} = require('../dist/idl/IDLBlob'); +const {JSONBlob} = require('../dist/json/JSONBlob'); +const {JSONTemplate} = require('../dist/json/JSONTemplate'); +const {analyzer} = require('../dist/idl/analyzer'); +const {generatorSource} = require('../dist/idl/generator') +const {generateUnionTypes, generateUnionTypeFileName} = require('../dist/idl/generateUnionTypes') +const {generateJSONTemplate} = require('../dist/json/generator'); +const {generateNamesInstaller} = require("../dist/json/generator"); +const {generatePluginAPI} = require("../dist/idl/pluginAPIGenerator/cppGen"); +const {generateRustSource} = require("../dist/idl/pluginAPIGenerator/rsGen"); +const {union} = require("lodash"); const {makeCSSPropertyNames} = require("../dist/json/make_css_property_names"); const {makePropertyBitset} = require("../dist/json/make_property_bitset"); const {makeStylePropertyShorthand} = require("../dist/json/make_property_shorthand"); const {makeCSSPropertySubClasses} = require("../dist/json/make_css_property_subclasses"); const {makeCSSPropertyInstance} = require("../dist/json/make_css_property_instance"); -const { makeCSSValueIdMapping } = require('../dist/json/make_css_value_id_mappings'); -const { makeCSSPrimitiveValueUnitTrie } = require('../dist/json/make_css_primitive_value_unit_trie'); -const { makeAtRuleNames } = require('../dist/json/make_atrule_names'); -const { makeColorData } = require('../dist/json/make_color_data'); +const {makeCSSValueIdMapping} = require('../dist/json/make_css_value_id_mappings'); +const {makeCSSPrimitiveValueUnitTrie} = require('../dist/json/make_css_primitive_value_unit_trie'); +const {makeAtRuleNames} = require('../dist/json/make_atrule_names'); +const {makeColorData} = require('../dist/json/make_color_data'); program .version(packageJSON.version) @@ -68,12 +69,12 @@ function genCodeFromTypeDefine() { }); // Analyze all files first. - for (let i = 0; i < blobs.length; i ++) { + for (let i = 0; i < blobs.length; i++) { let b = blobs[i]; analyzer(b, definedPropertyCollector, unionTypeCollector); } - for (let i = 0; i < blobs.length; i ++) { + for (let i = 0; i < blobs.length; i++) { let b = blobs[i]; let result = generatorSource(b); @@ -94,7 +95,7 @@ function genCodeFromTypeDefine() { return -(n.value - p.value); }) }); - for(let i = 0; i < unionTypes.length; i ++) { + for (let i = 0; i < unionTypes.length; i++) { let result = generateUnionTypes(unionTypes[i]); let filename = generateUnionTypeFileName(unionTypes[i]); writeFileIfChanged(path.join(dist, filename) + '.h', result.header); @@ -102,6 +103,22 @@ function genCodeFromTypeDefine() { } } +function callGPerf(gperfParams, genFilePath, source) { + if (os.platform() === 'win32') { + const gperfExe = path.join(__dirname, './gperf.exe'); + execSync(`${gperfExe} ${gperfParams} --output-file=${genFilePath}`, { + shell: 'powershell.exe', + stdio: 'pipe', + encoding: 'utf-8', + input: source + }); + } else { + execSync(`cat << EOF | gperf ${gperfParams} > ${genFilePath} +${source} +EOF`, {stdio: 'inherit'}) + } +} + // Generate code from json data. function genCodeFromJSONData() { let jsonFiles = glob.sync('**/*.json5', { @@ -121,7 +138,7 @@ function genCodeFromJSONData() { return new JSONTemplate(path.join(path.join(__dirname, '../templates/json_templates'), template), filename); }); - for (let i = 0; i < blobs.length; i ++) { + for (let i = 0; i < blobs.length; i++) { let blob = blobs[i]; blob.json.metadata.templates.forEach((targetTemplate) => { if (targetTemplate.template === 'make_names') { @@ -157,9 +174,7 @@ function genCodeFromJSONData() { writeFileIfChanged(genFilePath + '.h', result.header); if (targetTemplate.gperf) { - execSync(`cat << EOF | gperf ${targetTemplate.gperf} > ${genFilePath + '.cc'} -${result.source} -EOF`, {stdio: 'inherit'}) + callGPerf(targetTemplate.gperf, genFilePath + '.cc', result.source); } else { result.source && writeFileIfChanged(genFilePath + '.cc', result.source); } @@ -178,9 +193,11 @@ EOF`, {stdio: 'inherit'}) let cssPropertyNamesResult = makeCSSPropertyNames(); let cssPropertyGenFilePath = path.join(dist, 'css_property_names'); writeFileIfChanged(cssPropertyGenFilePath + '.h', cssPropertyNamesResult.header); - execSync(`cat << EOF | gperf --key-positions='*' -P -n -m 50 -D -Q CSSPropStringPool > ${cssPropertyGenFilePath + '.cc'} -${cssPropertyNamesResult.source} -EOF`, {stdio: 'inherit'}); + callGPerf( + '--key-positions=\'*\' -P -n -m 50 -D -Q CSSPropStringPool', + cssPropertyGenFilePath + '.cc', + cssPropertyNamesResult.source + ); // Generate property_bitset code let propertyBitsetResult = makePropertyBitset(); @@ -221,9 +238,11 @@ EOF`, {stdio: 'inherit'}); let colorDataFilePath = path.join(dist, 'color_data'); writeFileIfChanged(colorDataFilePath + '.cc', colorData.source); - execSync(`cat << EOF | gperf --key-positions='*' -D -s 2 > ${colorDataFilePath + '.cc'} -${colorData.source} -EOF`, {stdio: 'inherit'}); + callGPerf( + '--key-positions=\'*\' -D -s 2', + colorDataFilePath + '.cc', + colorData.source + ); let cssPrimitiveValueUnitTrie = makeCSSPrimitiveValueUnitTrie(); let cssPrimitiveValueFilePath = path.join(dist, 'css_primitive_value_unit_trie'); @@ -232,9 +251,11 @@ EOF`, {stdio: 'inherit'}); let ruleData = makeAtRuleNames(); let atRuleDescriptorsFilePath = path.join(dist, 'at_rule_descriptors'); writeFileIfChanged(atRuleDescriptorsFilePath + '.h', ruleData.header); - execSync(`cat << EOF | gperf --key-positions='*' -P -n -m 50 -D > ${atRuleDescriptorsFilePath + '.cc'} -${ruleData.source} -EOF`, {stdio: 'inherit'}); + callGPerf( + '--key-positions=\'*\' -P -n -m 50 -D', + atRuleDescriptorsFilePath + '.cc', + ruleData.source + ); } class DefinedPropertyCollector { @@ -251,39 +272,7 @@ let definedPropertyCollector = new DefinedPropertyCollector(); let unionTypeCollector = new UnionTypeCollector(); let names_needs_install = new Set(); -const pluginApiList = [ - 'dom/events/add_event_listener_options.d.ts', - 'dom/events/event_listener_options.d.ts', - 'dom/scroll_options.d.ts', - 'dom/scroll_to_options.d.ts', - 'dom/events/event_init.d.ts', - 'events/animation_event_init.d.ts', - 'events/close_event_init.d.ts', - 'events/focus_event_init.d.ts', - 'events/gesture_event_init.d.ts', - 'events/hashchange_event_init.d.ts', - 'events/input_event_init.d.ts', - 'events/intersection_change_event_init.d.ts', - 'events/keyboard_event_init.d.ts', - 'events/mouse_event_init.d.ts', - 'events/pointer_event_init.d.ts', - 'events/transition_event_init.d.ts', - 'input/touch_init.d.ts', - 'events/ui_event_init.d.ts', - 'dom/events/event.d.ts', - 'dom/events/custom_event.d.ts', - 'events/animation_event.d.ts', - 'events/close_event.d.ts', - 'events/focus_event.d.ts', - 'events/gesture_event.d.ts', - 'events/hashchange_event.d.ts', - 'events/input_event.d.ts', - 'events/intersection_change_event.d.ts', - 'events/mouse_event.d.ts', - 'events/pointer_event.d.ts', - 'events/transition_event.d.ts', - 'events/ui_event.d.ts', -]; +const pluginApiList = ['dom/events/add_event_listener_options.d.ts', 'dom/events/event_listener_options.d.ts', 'dom/scroll_options.d.ts', 'dom/scroll_to_options.d.ts', 'dom/events/event_init.d.ts', 'events/animation_event_init.d.ts', 'events/close_event_init.d.ts', 'events/focus_event_init.d.ts', 'events/gesture_event_init.d.ts', 'events/hashchange_event_init.d.ts', 'events/input_event_init.d.ts', 'events/intersection_change_event_init.d.ts', 'events/keyboard_event_init.d.ts', 'events/mouse_event_init.d.ts', 'events/pointer_event_init.d.ts', 'events/transition_event_init.d.ts', 'input/touch_init.d.ts', 'events/ui_event_init.d.ts', 'dom/events/event.d.ts', 'dom/events/custom_event.d.ts', 'events/animation_event.d.ts', 'events/close_event.d.ts', 'events/focus_event.d.ts', 'events/gesture_event.d.ts', 'events/hashchange_event.d.ts', 'events/input_event.d.ts', 'events/intersection_change_event.d.ts', 'events/mouse_event.d.ts', 'events/pointer_event.d.ts', 'events/transition_event.d.ts', 'events/ui_event.d.ts',]; genCodeFromTypeDefine(); genCodeFromJSONData(); @@ -303,12 +292,12 @@ function genPluginAPICodeFromTypeDefine() { }); // Analyze all files first. - for (let i = 0; i < blobs.length; i ++) { + for (let i = 0; i < blobs.length; i++) { let b = blobs[i]; analyzer(b, definedPropertyCollector, unionTypeCollector); } - for (let i = 0; i < blobs.length; i ++) { + for (let i = 0; i < blobs.length; i++) { let b = blobs[i]; let result = generatePluginAPI(b); @@ -337,12 +326,12 @@ function genRustCodeFromTypeDefine() { }); // Analyze all files first. - for (let i = 0; i < blobs.length; i ++) { + for (let i = 0; i < blobs.length; i++) { let b = blobs[i]; analyzer(b, definedPropertyCollector, unionTypeCollector); } - for (let i = 0; i < blobs.length; i ++) { + for (let i = 0; i < blobs.length; i++) { let b = blobs[i]; let result = generateRustSource(b); diff --git a/bridge/scripts/code_generator/bin/gperf.exe b/bridge/scripts/code_generator/bin/gperf.exe new file mode 100644 index 0000000000000000000000000000000000000000..4620da25e1683f9175c48e2c5746354a52719fd6 GIT binary patch literal 221710 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 m)qR>B`?skOX+Rd-MO+QCi?{r?3U8d(zn literal 0 HcmV?d00001 diff --git a/bridge/third_party/quickjs/src/core/base.h b/bridge/third_party/quickjs/src/core/base.h index 51e50cb524..5ac4169422 100644 --- a/bridge/third_party/quickjs/src/core/base.h +++ b/bridge/third_party/quickjs/src/core/base.h @@ -53,6 +53,8 @@ #include +struct timezone; + // From: https://stackoverflow.com/a/26085827 int gettimeofday(struct timeval * tp, struct timezone * tzp); diff --git a/bridge/third_party/quickjs/src/core/builtins/js-atomics.c b/bridge/third_party/quickjs/src/core/builtins/js-atomics.c index d024346bf5..79372556d3 100644 --- a/bridge/third_party/quickjs/src/core/builtins/js-atomics.c +++ b/bridge/third_party/quickjs/src/core/builtins/js-atomics.c @@ -197,7 +197,16 @@ JSValue js_atomics_op(JSContext *ctx, OP(OR, atomic_fetch_or) OP(SUB, atomic_fetch_sub) OP(XOR, atomic_fetch_xor) - OP(EXCHANGE, atomic_exchange) + // OP(EXCHANGE, atomic_exchange) + case ATOMICS_OP_EXCHANGE | (0 << 3): + a = (uint32_t)_InterlockedExchangePointer((PVOID volatile*)(intptr_t*)ptr, (PVOID)v); + break; + case ATOMICS_OP_EXCHANGE | (1 << 3): + a = (uint32_t)_InterlockedExchangePointer((PVOID volatile*)(intptr_t*)ptr, (PVOID)v); + break; + case ATOMICS_OP_EXCHANGE | (2 << 3): + a = (uint32_t)_InterlockedExchangePointer((PVOID volatile*)(intptr_t*)ptr, (PVOID)v); + break; #undef OP case ATOMICS_OP_LOAD | (0 << 3): diff --git a/bridge/third_party/quickjs/src/core/function.h b/bridge/third_party/quickjs/src/core/function.h index c32070f2f4..7d3d53ac68 100644 --- a/bridge/third_party/quickjs/src/core/function.h +++ b/bridge/third_party/quickjs/src/core/function.h @@ -84,7 +84,7 @@ static inline BOOL js_check_stack_overflow(JSRuntime* rt, size_t alloca_size) { /* Note: OS and CPU dependent */ static inline uintptr_t js_get_stack_pointer(void) { #ifdef _MSC_VER - return _AddressOfReturnAddress(); + return (uintptr_t)_AddressOfReturnAddress(); #else return (uintptr_t)__builtin_frame_address(0); #endif