aboutsummaryrefslogtreecommitdiff
path: root/vcpkg/ports/v8
diff options
context:
space:
mode:
authorEthan Morgan <ethan@gweithio.com>2026-02-14 16:44:06 +0000
committerEthan Morgan <ethan@gweithio.com>2026-02-14 16:44:06 +0000
commit54409423f767d8b1cf30cb7d0efca6b4ca138823 (patch)
treed915ac7828703ce4b963efdd9728a1777ba18c1e /vcpkg/ports/v8
move to own git serverHEADmaster
Diffstat (limited to 'vcpkg/ports/v8')
-rw-r--r--vcpkg/ports/v8/V8Config-shared.cmake111
-rw-r--r--vcpkg/ports/v8/V8Config-static.cmake98
-rw-r--r--vcpkg/ports/v8/build.patch187
-rw-r--r--vcpkg/ports/v8/icu.gn71
-rw-r--r--vcpkg/ports/v8/portfile.cmake209
-rw-r--r--vcpkg/ports/v8/v8.patch241
-rw-r--r--vcpkg/ports/v8/v8.pc.in11
-rw-r--r--vcpkg/ports/v8/v8_libbase.pc.in10
-rw-r--r--vcpkg/ports/v8/v8_libplatform.pc.in10
-rw-r--r--vcpkg/ports/v8/v8_monolith.pc.in11
-rw-r--r--vcpkg/ports/v8/vcpkg.json29
-rw-r--r--vcpkg/ports/v8/zlib.gn21
12 files changed, 1009 insertions, 0 deletions
diff --git a/vcpkg/ports/v8/V8Config-shared.cmake b/vcpkg/ports/v8/V8Config-shared.cmake
new file mode 100644
index 0000000..fadfdb5
--- /dev/null
+++ b/vcpkg/ports/v8/V8Config-shared.cmake
@@ -0,0 +1,111 @@
+get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+if(_IMPORT_PREFIX STREQUAL "/")
+ set(_IMPORT_PREFIX "")
+endif()
+
+include(SelectLibraryConfigurations)
+
+find_path(V8_INCLUDE_DIR NAMES v8.h PATH_SUFFIXES include)
+
+if(EXISTS ${_IMPORT_PREFIX}/bin/snapshot_blob.bin)
+ set(V8_SNAPSHOT_BLOB_RELEASE ${_IMPORT_PREFIX}/bin/snapshot_blob.bin CACHE FILEPATH "Release version of V8 snapshot blob location")
+endif()
+if(EXISTS ${_IMPORT_PREFIX}/debug/bin/snapshot_blob.bin)
+ set(V8_SNAPSHOT_BLOB_DEBUG ${_IMPORT_PREFIX}/debug/bin/snapshot_blob.bin CACHE FILEPATH "Debug version of V8 snapshot blob location")
+endif()
+set(V8_SNAPSHOT_BLOB "$<IF:$<CONFIG:Debug>,${V8_SNAPSHOT_BLOB_DEBUG},${V8_SNAPSHOT_BLOB_RELEASE}>")
+
+if(EXISTS "${_IMPORT_PREFIX}/lib/v8${CMAKE_SHARED_LIBRARY_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}")
+ set(V8_LIBRARY_RELEASE "${_IMPORT_PREFIX}/lib/v8${CMAKE_SHARED_LIBRARY_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}" CACHE FILEPATH "Release version of the V8 library location")
+endif()
+if(EXISTS "${_IMPORT_PREFIX}/debug/lib/v8${CMAKE_SHARED_LIBRARY_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}")
+ set(V8_LIBRARY_DEBUG "${_IMPORT_PREFIX}/debug/lib/v8${CMAKE_SHARED_LIBRARY_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}" CACHE FILEPATH "Debug version of the V8 library location")
+endif()
+select_library_configurations(V8)
+
+if(EXISTS "${_IMPORT_PREFIX}/lib/v8_libbase${CMAKE_SHARED_LIBRARY_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}")
+ set(V8LIBBASE_LIBRARY_RELEASE "${_IMPORT_PREFIX}/lib/v8_libbase${CMAKE_SHARED_LIBRARY_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}" CACHE FILEPATH "Release version of the V8 libbase library location")
+endif()
+if(EXISTS "${_IMPORT_PREFIX}/debug/lib/v8_libbase${CMAKE_SHARED_LIBRARY_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}")
+ set(V8LIBBASE_LIBRARY_DEBUG "${_IMPORT_PREFIX}/debug/lib/v8_libbase${CMAKE_SHARED_LIBRARY_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}" CACHE FILEPATH "Debug version of the V8 libbase library location")
+endif()
+select_library_configurations(V8LIBBASE)
+
+if(EXISTS "${_IMPORT_PREFIX}/lib/v8_libplatform${CMAKE_SHARED_LIBRARY_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}")
+ set(V8LIBPLATFORM_LIBRARY_RELEASE "${_IMPORT_PREFIX}/lib/v8_libplatform${CMAKE_SHARED_LIBRARY_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}" CACHE FILEPATH "Release version of the V8 libplatform library location")
+endif()
+if(EXISTS "${_IMPORT_PREFIX}/debug/lib/v8_libplatform${CMAKE_SHARED_LIBRARY_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}")
+ set(V8LIBPLATFORM_LIBRARY_DEBUG "${_IMPORT_PREFIX}/debug/lib/v8_libplatform${CMAKE_SHARED_LIBRARY_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}" CACHE FILEPATH "Delete version of the V8 libplatform library location")
+endif()
+select_library_configurations(V8LIBPLATFORM)
+
+mark_as_advanced(V8_INCLUDE_DIR)
+
+if(V8_INCLUDE_DIR AND EXISTS "${V8_INCLUDE_DIR}/v8-version.h")
+ file(STRINGS "${V8_INCLUDE_DIR}/v8-version.h" V8_MAJOR_VERSION REGEX "^#define V8_MAJOR_VERSION [0-9]+.*$")
+ string(REGEX REPLACE "^#define V8_MAJOR_VERSION ([0-9]+).*$" "\\1" V8_MAJOR_VERSION "${V8_MAJOR_VERSION}")
+ file(STRINGS "${V8_INCLUDE_DIR}/v8-version.h" V8_MINOR_VERSION REGEX "^#define V8_MINOR_VERSION [0-9]+.*$")
+ string(REGEX REPLACE "^#define V8_MINOR_VERSION ([0-9]+).*$" "\\1" V8_MINOR_VERSION "${V8_MINOR_VERSION}")
+ file(STRINGS "${V8_INCLUDE_DIR}/v8-version.h" V8_BUILD_NUMBER REGEX "^#define V8_BUILD_NUMBER [0-9]+.*$")
+ string(REGEX REPLACE "^#define V8_BUILD_NUMBER ([0-9]+).*$" "\\1" V8_BUILD_NUMBER "${V8_BUILD_NUMBER}")
+ file(STRINGS "${V8_INCLUDE_DIR}/v8-version.h" V8_PATCH_LEVEL REGEX "^#define V8_PATCH_LEVEL [0-9]+.*$")
+ string(REGEX REPLACE "^#define V8_PATCH_LEVEL ([0-9]+).*$" "\\1" V8_PATCH_LEVEL "${V8_PATCH_LEVEL}")
+ set(V8_VERSION_STRING "${V8_MAJOR_VERSION}.${V8_MINOR_VERSION}.${V8_BUILD_NUMBER}.${V8_PATCH_LEVEL}")
+endif()
+
+
+if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+ set(V8_COMPILE_DEFINITIONS "V8_COMPRESS_POINTERS;V8_31BIT_SMIS_ON_64BIT_ARCH")
+elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
+ set(V8_COMPILE_DEFINITIONS " ")
+endif()
+
+mark_as_advanced(V8_COMPILE_DEFINITIONS)
+
+include(FindPackageHandleStandardArgs)
+
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(V8 REQUIRED_VARS V8_LIBRARY V8LIBBASE_LIBRARY V8LIBPLATFORM_LIBRARY V8_INCLUDE_DIR V8_COMPILE_DEFINITIONS
+VERSION_VAR V8_VERSION_STRING)
+set(V8_LIBRARIES ${V8_LIBRARY} ${V8LIBBASE_LIBRARY} ${V8LIBPLATFORM_LIBRARY})
+
+mark_as_advanced(V8_LIBRARIES)
+
+if(NOT TARGET V8::V8)
+ add_library(V8::V8 SHARED IMPORTED)
+ set_target_properties(V8::V8 PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "${V8_INCLUDE_DIR}"
+ INTERFACE_COMPILE_DEFINITIONS "${V8_COMPILE_DEFINITIONS}")
+
+ if(V8_LIBRARY_RELEASE)
+ set_property(TARGET V8::V8 APPEND PROPERTY
+ IMPORTED_CONFIGURATIONS RELEASE)
+ set_target_properties(V8::V8 PROPERTIES
+ IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/bin/v8${CMAKE_SHARED_LIBRARY_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ IMPORTED_IMPLIB_RELEASE "${V8_LIBRARY_RELEASE}"
+ )
+ set_target_properties(V8::V8 PROPERTIES
+ IMPORTED_LINK_INTERFACE_LIBRARIES_RELEASE
+ "${V8LIBBASE_LIBRARY_RELEASE};${V8LIBPLATFORM_LIBRARY_RELEASE}")
+ endif()
+
+ if(V8_LIBRARY_DEBUG)
+ set_property(TARGET V8::V8 APPEND PROPERTY
+ IMPORTED_CONFIGURATIONS DEBUG)
+ set_target_properties(V8::V8 PROPERTIES
+ IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/debug/bin/v8${CMAKE_SHARED_LIBRARY_SUFFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}"
+ IMPORTED_IMPLIB_DEBUG "${V8_LIBRARY_DEBUG}")
+ set_target_properties(V8::V8 PROPERTIES
+ IMPORTED_LINK_INTERFACE_LIBRARIES_DEBUG
+ "${V8LIBBASE_LIBRARY_DEBUG};${V8LIBPLATFORM_LIBRARY_DEBUG}")
+ endif()
+
+ if(NOT V8_LIBRARY_RELEASE AND NOT V8_LIBRARY_DEBUG)
+ set_property(TARGET V8::V8 APPEND PROPERTY
+ IMPORTED_IMPLIB "${V8_LIBRARY}")
+ set_target_properties(V8::V8 PROPERTIES
+ IMPORTED_LINK_INTERFACE_LIBRARIES
+ "${V8LIBBASE_LIBRARY};${V8LIBPLATFORM_LIBRARY}")
+ endif()
+endif()
diff --git a/vcpkg/ports/v8/V8Config-static.cmake b/vcpkg/ports/v8/V8Config-static.cmake
new file mode 100644
index 0000000..debd1f1
--- /dev/null
+++ b/vcpkg/ports/v8/V8Config-static.cmake
@@ -0,0 +1,98 @@
+include(CMakeFindDependencyMacro)
+find_dependency(ICU REQUIRED COMPONENTS in uc dt)
+find_dependency(ZLIB REQUIRED)
+if(UNIX)
+ find_package(PkgConfig REQUIRED)
+ pkg_check_modules(GLIB2 glib-2.0 gobject-2.0 gmodule-2.0 gio-2.0 IMPORTED_TARGET)
+ set(V8_IMPORTED_LINK_INTERFACE_LIBRARIES
+ "ICU::in;ICU::uc;ICU::dt;ZLIB::ZLIB")
+elseif(WIN32)
+ set(V8_IMPORTED_LINK_INTERFACE_LIBRARIES
+ "Winmm;DbgHelp;ZLIB::ZLIB;ICU::in;ICU::uc;ICU::dt")
+endif()
+
+get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+if(_IMPORT_PREFIX STREQUAL "/")
+ set(_IMPORT_PREFIX "")
+endif()
+
+include(SelectLibraryConfigurations)
+
+find_path(V8_INCLUDE_DIR NAMES v8.h PATH_SUFFIXES include)
+
+if(EXISTS "${_IMPORT_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}v8_monolith${CMAKE_STATIC_LIBRARY_SUFFIX}")
+ set(V8_LIBRARY_RELEASE "${_IMPORT_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}v8_monolith${CMAKE_STATIC_LIBRARY_SUFFIX}" CACHE FILEPATH "Release version of the V8 library location")
+endif()
+if(EXISTS "${_IMPORT_PREFIX}/debug/lib/${CMAKE_STATIC_LIBRARY_PREFIX}v8_monolith${CMAKE_STATIC_LIBRARY_SUFFIX}")
+ set(V8_LIBRARY_DEBUG "${_IMPORT_PREFIX}/debug/lib/${CMAKE_STATIC_LIBRARY_PREFIX}v8_monolith${CMAKE_STATIC_LIBRARY_SUFFIX}" CACHE FILEPATH "Debug version of the V8 library location")
+endif()
+select_library_configurations(V8)
+
+mark_as_advanced(V8_INCLUDE_DIR)
+
+if(V8_INCLUDE_DIR AND EXISTS "${V8_INCLUDE_DIR}/v8-version.h")
+ file(STRINGS "${V8_INCLUDE_DIR}/v8-version.h" V8_MAJOR_VERSION REGEX "^#define V8_MAJOR_VERSION [0-9]+.*$")
+ string(REGEX REPLACE "^#define V8_MAJOR_VERSION ([0-9]+).*$" "\\1" V8_MAJOR_VERSION "${V8_MAJOR_VERSION}")
+ file(STRINGS "${V8_INCLUDE_DIR}/v8-version.h" V8_MINOR_VERSION REGEX "^#define V8_MINOR_VERSION [0-9]+.*$")
+ string(REGEX REPLACE "^#define V8_MINOR_VERSION ([0-9]+).*$" "\\1" V8_MINOR_VERSION "${V8_MINOR_VERSION}")
+ file(STRINGS "${V8_INCLUDE_DIR}/v8-version.h" V8_BUILD_NUMBER REGEX "^#define V8_BUILD_NUMBER [0-9]+.*$")
+ string(REGEX REPLACE "^#define V8_BUILD_NUMBER ([0-9]+).*$" "\\1" V8_BUILD_NUMBER "${V8_BUILD_NUMBER}")
+ file(STRINGS "${V8_INCLUDE_DIR}/v8-version.h" V8_PATCH_LEVEL REGEX "^#define V8_PATCH_LEVEL [0-9]+.*$")
+ string(REGEX REPLACE "^#define V8_PATCH_LEVEL ([0-9]+).*$" "\\1" V8_PATCH_LEVEL "${V8_PATCH_LEVEL}")
+ set(V8_VERSION_STRING "${V8_MAJOR_VERSION}.${V8_MINOR_VERSION}.${V8_BUILD_NUMBER}.${V8_PATCH_LEVEL}")
+endif()
+
+
+if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+ set(V8_COMPILE_DEFINITIONS "V8_COMPRESS_POINTERS;V8_31BIT_SMIS_ON_64BIT_ARCH")
+else()
+ set(V8_COMPILE_DEFINITIONS " ")
+endif()
+
+mark_as_advanced(V8_COMPILE_DEFINITIONS)
+
+include(FindPackageHandleStandardArgs)
+
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(V8 REQUIRED_VARS V8_LIBRARY V8_INCLUDE_DIR V8_COMPILE_DEFINITIONS
+VERSION_VAR V8_VERSION_STRING)
+set(V8_LIBRARIES ${V8_LIBRARY})
+
+mark_as_advanced(V8_LIBRARIES)
+
+if(NOT TARGET V8::V8)
+ add_library(V8::V8 STATIC IMPORTED)
+ set_target_properties(V8::V8 PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "${V8_INCLUDE_DIR}"
+ INTERFACE_COMPILE_DEFINITIONS "${V8_COMPILE_DEFINITIONS}")
+ if(MSVC)
+ set_target_properties(V8::V8 PROPERTIES
+ INTERFACE_COMPILE_OPTIONS "/MT$<$<CONFIG:Debug>:d>")
+ endif()
+
+ if(V8_LIBRARY_RELEASE)
+ set_property(TARGET V8::V8 APPEND PROPERTY
+ IMPORTED_CONFIGURATIONS RELEASE)
+ set_target_properties(V8::V8 PROPERTIES
+ IMPORTED_LOCATION_RELEASE "${V8_LIBRARY_RELEASE}"
+ IMPORTED_LINK_INTERFACE_LIBRARIES_RELEASE
+ "${V8_IMPORTED_LINK_INTERFACE_LIBRARIES}")
+ endif()
+
+ if(V8_LIBRARY_DEBUG)
+ set_property(TARGET V8::V8 APPEND PROPERTY
+ IMPORTED_CONFIGURATIONS DEBUG)
+ set_target_properties(V8::V8 PROPERTIES
+ IMPORTED_LOCATION_DEBUG "${V8_LIBRARY_DEBUG}"
+ IMPORTED_LINK_INTERFACE_LIBRARIES_DEBUG
+ "${V8_IMPORTED_LINK_INTERFACE_LIBRARIES}")
+ endif()
+
+ if(NOT V8_LIBRARY_RELEASE AND NOT V8_LIBRARY_DEBUG)
+ set_property(TARGET V8::V8 APPEND PROPERTY
+ IMPORTED_LOCATION "${V8_LIBRARY}"
+ IMPORTED_LINK_INTERFACE_LIBRARIES
+ "${V8_IMPORTED_LINK_INTERFACE_LIBRARIES}")
+ endif()
+endif()
diff --git a/vcpkg/ports/v8/build.patch b/vcpkg/ports/v8/build.patch
new file mode 100644
index 0000000..15fede3
--- /dev/null
+++ b/vcpkg/ports/v8/build.patch
@@ -0,0 +1,187 @@
+diff --git a/config/compiler/BUILD.gn b/config/compiler/BUILD.gn
+index 1904a2559..e66586c88 100644
+--- a/config/compiler/BUILD.gn
++++ b/config/compiler/BUILD.gn
+@@ -1571,6 +1571,7 @@ config("default_warnings") {
+ # Disables.
+ "-Wno-missing-field-initializers", # "struct foo f = {0};"
+ "-Wno-unused-parameter", # Unused function parameters.
++ "-Wno-invalid-offsetof", # Use of "conditionally-supported" offsetof in c++17
+ ]
+ }
+
+@@ -1987,8 +1988,17 @@ config("no_incompatible_pointer_warnings") {
+ # Shared settings for both "optimize" and "optimize_max" configs.
+ # IMPORTANT: On Windows "/O1" and "/O2" must go before the common flags.
+ if (is_win) {
+- common_optimize_on_cflags = [
+- "/Ob2", # Both explicit and auto inlining.
++ common_optimize_on_cflags = []
++ if(is_clang) {
++ common_optimize_on_cflags += [
++ "/Ob2", # Both explicit and auto inlining.
++ ]
++ } else {
++ common_optimize_on_cflags += [
++ "/Ob3", # Both explicit and auto inlining.
++ ]
++ }
++ common_optimize_on_cflags += [
+ "/Oy-", # Disable omitting frame pointers, must be after /O2.
+ "/Zc:inline", # Remove unreferenced COMDAT (faster links).
+ ]
+diff --git a/config/linux/pkg-config.py b/config/linux/pkg-config.py
+index 5adf70cc3..dab159f98 100755
+--- a/config/linux/pkg-config.py
++++ b/config/linux/pkg-config.py
+@@ -41,6 +41,11 @@ from optparse import OptionParser
+ # Additionally, you can specify the option --atleast-version. This will skip
+ # the normal outputting of a dictionary and instead print true or false,
+ # depending on the return value of pkg-config for the given package.
++#
++# --pkg_config_libdir=<path> allows direct override
++# of the PKG_CONFIG_LIBDIR environment library.
++#
++# --full-path-libs causes lib names to include their full path.
+
+
+ def SetConfigPath(options):
+@@ -105,11 +110,32 @@ def RewritePath(path, strip_prefix, sysroot):
+ return path
+
+
++flag_regex = re.compile("(-.)(.+)")
++
++
++def FlagReplace(matchobj):
++ if matchobj.group(1) == '-I':
++ return matchobj.group(1) + subprocess.check_output([u'cygpath',u'-w',matchobj.group(2)]).strip().decode("utf-8")
++ if matchobj.group(1) == '-L':
++ return matchobj.group(1) + subprocess.check_output([u'cygpath',u'-w',matchobj.group(2)]).strip().decode("utf-8")
++ if matchobj.group(1) == '-l':
++ return matchobj.group(1) + matchobj.group(2) + '.lib'
++ return matchobj.group(0)
++
++
++def ConvertGCCToMSVC(flags):
++ """Rewrites GCC flags into MSVC flags."""
++ # need a better way to determine mingw vs msvc build
++ if 'win32' not in sys.platform or "GCC" in sys.version:
++ return flags
++ return [ flag_regex.sub(FlagReplace,flag) for flag in flags]
++
++
+ def main():
+ # If this is run on non-Linux platforms, just return nothing and indicate
+ # success. This allows us to "kind of emulate" a Linux build from other
+ # platforms.
+- if "linux" not in sys.platform:
++ if "linux" not in sys.platform and 'win32' not in sys.platform:
+ print("[[],[],[],[],[]]")
+ return 0
+
+@@ -128,6 +154,9 @@ def main():
+ parser.add_option('--dridriverdir', action='store_true', dest='dridriverdir')
+ parser.add_option('--version-as-components', action='store_true',
+ dest='version_as_components')
++ parser.add_option('--pkg_config_libdir', action='store', dest='pkg_config_libdir',
++ type='string')
++ parser.add_option('--full-path-libs', action='store_true', dest='full_path_libs')
+ (options, args) = parser.parse_args()
+
+ # Make a list of regular expressions to strip out.
+@@ -144,6 +173,10 @@ def main():
+ else:
+ prefix = ''
+
++ # Override PKG_CONFIG_LIBDIR
++ if options.pkg_config_libdir:
++ os.environ['PKG_CONFIG_LIBDIR'] = options.pkg_config_libdir
++
+ if options.atleast_version:
+ # When asking for the return value, just run pkg-config and print the return
+ # value, no need to do other work.
+@@ -203,7 +236,7 @@ def main():
+ # For now just split on spaces to get the args out. This will break if
+ # pkgconfig returns quoted things with spaces in them, but that doesn't seem
+ # to happen in practice.
+- all_flags = flag_string.strip().split(' ')
++ all_flags = ConvertGCCToMSVC(flag_string.strip().split(' '))
+
+
+ sysroot = options.sysroot
+@@ -220,7 +253,10 @@ def main():
+ continue;
+
+ if flag[:2] == '-l':
+- libs.append(RewritePath(flag[2:], prefix, sysroot))
++ library = RewritePath(flag[2:], prefix, sysroot)
++ # Skip math library on MSVC
++ if library != 'm.lib':
++ libs.append(library)
+ elif flag[:2] == '-L':
+ lib_dirs.append(RewritePath(flag[2:], prefix, sysroot))
+ elif flag[:2] == '-I':
+@@ -237,6 +273,14 @@ def main():
+ else:
+ cflags.append(flag)
+
++ if options.full_path_libs:
++ full_path_libs = []
++ for lib_dir in lib_dirs:
++ for lib in libs:
++ if os.path.isfile(lib_dir+"/"+lib):
++ full_path_libs.append(lib_dir+"/"+lib)
++ libs = full_path_libs
++
+ # Output a GN array, the first one is the cflags, the second are the libs. The
+ # JSON formatter prints GN compatible lists when everything is a list of
+ # strings.
+diff --git a/config/linux/pkg_config.gni b/config/linux/pkg_config.gni
+index 428e44ac0..a0d2175ee 100644
+--- a/config/linux/pkg_config.gni
++++ b/config/linux/pkg_config.gni
+@@ -45,6 +45,9 @@ declare_args() {
+ # in similar fashion by setting the `system_libdir` variable in the build's
+ # args.gn file to 'lib' or 'lib64' as appropriate for the target architecture.
+ system_libdir = "lib"
++
++ # Allow directly overriding the PKG_CONFIG_LIBDIR enviroment variable
++ pkg_config_libdir = ""
+ }
+
+ pkg_config_script = "//build/config/linux/pkg-config.py"
+@@ -87,6 +90,17 @@ if (host_pkg_config != "") {
+ host_pkg_config_args = pkg_config_args
+ }
+
++if (pkg_config_libdir != "") {
++ pkg_config_args += [
++ "--pkg_config_libdir",
++ pkg_config_libdir,
++ ]
++ host_pkg_config_args += [
++ "--pkg_config_libdir",
++ pkg_config_libdir,
++ ]
++}
++
+ template("pkg_config") {
+ assert(defined(invoker.packages),
+ "Variable |packages| must be defined to be a list in pkg_config.")
+diff --git a/util/lastchange.py b/util/lastchange.py
+index 02a36642b..78934f1b0 100755
+--- a/util/lastchange.py
++++ b/util/lastchange.py
+@@ -192,7 +192,10 @@ def GetGitTopDirectory(source_dir):
+ Returns:
+ The output of "git rev-parse --show-toplevel" as a string
+ """
+- return _RunGitCommand(source_dir, ['rev-parse', '--show-toplevel'])
++ directory = _RunGitCommand(source_dir, ['rev-parse', '--show-toplevel'])
++ if "GCC" in sys.version and sys.platform=='win32':
++ return subprocess.check_output(["cygpath", "-w", directory]).strip(b"\n").decode()
++ return directory
+
+
+ def WriteIfChanged(file_name, contents):
diff --git a/vcpkg/ports/v8/icu.gn b/vcpkg/ports/v8/icu.gn
new file mode 100644
index 0000000..60dc6b8
--- /dev/null
+++ b/vcpkg/ports/v8/icu.gn
@@ -0,0 +1,71 @@
+import("//build/config/linux/pkg_config.gni")
+
+declare_args() {
+ # Tells icu to load an external data file rather than rely on the icudata
+ # being linked directly into the binary.
+ icu_use_data_file = true
+ # If true, compile icu into a standalone static library. Currently this is
+ # only useful on Chrome OS.
+ icu_disable_thin_archive = false
+}
+
+pkg_config("system_icui18n") {
+ packages = [ "icu-i18n" ]
+ if (is_win) {
+ extra_args = ["--full-path-libs"] # Workaround the WinSDK having an older version of ICU
+ }
+}
+
+pkg_config("system_icuuc") {
+ packages = [ "icu-uc" ]
+ if (is_win) {
+ extra_args = ["--full-path-libs"] # Workaround the WinSDK having an older version of ICU
+ }
+}
+
+group("icu") {
+ public_deps = [
+ ":icui18n",
+ ":icuuc",
+ ]
+}
+
+config("icu_config") {
+ defines = [
+ "USING_SYSTEM_ICU=1",
+ ]
+ if(is_win){
+ if(!is_component_build) {
+ ldflags = ["/ignore:4099"] # needed on CI builds
+ }
+ defines += [ "UCHAR_TYPE=wchar_t" ]
+ }
+ else{
+ defines += [ "UCHAR_TYPE=uint16_t" ]
+ }
+ if (icu_use_data_file) {
+ defines += [ "ICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_FILE" ]
+ } else {
+ defines += [ "ICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC" ]
+ }
+}
+
+source_set("icui18n") {
+ public_configs = [
+ ":icu_config",
+ ":system_icui18n"
+ ]
+}
+
+source_set("icuuc") {
+ public_configs = [
+ ":icu_config",
+ ":system_icuuc"
+ ]
+}
+
+source_set("icudata") {
+ public_configs = [
+ ":icu_config",
+ ]
+}
diff --git a/vcpkg/ports/v8/portfile.cmake b/vcpkg/ports/v8/portfile.cmake
new file mode 100644
index 0000000..469bc5a
--- /dev/null
+++ b/vcpkg/ports/v8/portfile.cmake
@@ -0,0 +1,209 @@
+vcpkg_get_windows_sdk(WINDOWS_SDK)
+
+if (WINDOWS_SDK MATCHES "10.")
+ set(LIBFILEPATH "$ENV{WindowsSdkDir}Lib\\${WINDOWS_SDK}\\um\\${TRIPLET_SYSTEM_ARCH}\\Ws2_32.Lib")
+ set(HEADERSPATH "$ENV{WindowsSdkDir}Include\\${WINDOWS_SDK}\\um")
+elseif(WINDOWS_SDK MATCHES "8.")
+ set(LIBFILEPATH "$ENV{WindowsSdkDir}Lib\\winv6.3\\um\\${TRIPLET_SYSTEM_ARCH}\\Ws2_32.Lib")
+ set(HEADERSPATH "$ENV{WindowsSdkDir}Include\\um")
+else()
+ message(FATAL_ERROR "Portfile not yet configured for Windows SDK with version: ${WINDOWS_SDK}")
+endif()
+
+set(pkgver "9.1.269.39")
+
+set(ENV{DEPOT_TOOLS_WIN_TOOLCHAIN} 0)
+
+get_filename_component(GIT_PATH ${GIT} DIRECTORY)
+vcpkg_find_acquire_program(PYTHON2)
+get_filename_component(PYTHON2_PATH ${PYTHON2} DIRECTORY)
+vcpkg_find_acquire_program(GN)
+get_filename_component(GN_PATH ${GN} DIRECTORY)
+vcpkg_find_acquire_program(NINJA)
+get_filename_component(NINJA_PATH ${NINJA} DIRECTORY)
+
+vcpkg_add_to_path(PREPEND "${CURRENT_INSTALLED_DIR}/bin")
+vcpkg_add_to_path(PREPEND "${CURRENT_INSTALLED_DIR}/debug/bin")
+vcpkg_add_to_path(PREPEND "${GIT_PATH}")
+vcpkg_add_to_path(PREPEND "${PYTHON2_PATH}")
+vcpkg_add_to_path(PREPEND "${GN_PATH}")
+vcpkg_add_to_path(PREPEND "${NINJA_PATH}")
+if(VCPKG_TARGET_IS_WINDOWS)
+ vcpkg_acquire_msys(MSYS_ROOT PACKAGES pkg-config)
+ vcpkg_add_to_path("${MSYS_ROOT}/usr/bin")
+endif()
+
+set(VCPKG_KEEP_ENV_VARS PATH;DEPOT_TOOLS_WIN_TOOLCHAIN)
+
+function(v8_fetch)
+ set(oneValueArgs DESTINATION URL REF SOURCE)
+ set(multipleValuesArgs PATCHES)
+ cmake_parse_arguments(V8 "" "${oneValueArgs}" "${multipleValuesArgs}" ${ARGN})
+
+ if(NOT DEFINED V8_DESTINATION)
+ message(FATAL_ERROR "DESTINATION must be specified.")
+ endif()
+
+ if(NOT DEFINED V8_URL)
+ message(FATAL_ERROR "The git url must be specified")
+ endif()
+
+ if(NOT DEFINED V8_REF)
+ message(FATAL_ERROR "The git ref must be specified.")
+ endif()
+
+ if(EXISTS ${V8_SOURCE}/${V8_DESTINATION})
+ vcpkg_execute_required_process(
+ COMMAND ${GIT} reset --hard
+ WORKING_DIRECTORY ${V8_SOURCE}/${V8_DESTINATION}
+ LOGNAME build-${TARGET_TRIPLET})
+ else()
+ vcpkg_execute_required_process(
+ COMMAND ${GIT} clone --depth 1 ${V8_URL} ${V8_DESTINATION}
+ WORKING_DIRECTORY ${V8_SOURCE}
+ LOGNAME build-${TARGET_TRIPLET})
+ vcpkg_execute_required_process(
+ COMMAND ${GIT} fetch --depth 1 origin ${V8_REF}
+ WORKING_DIRECTORY ${V8_SOURCE}/${V8_DESTINATION}
+ LOGNAME build-${TARGET_TRIPLET})
+ vcpkg_execute_required_process(
+ COMMAND ${GIT} checkout FETCH_HEAD
+ WORKING_DIRECTORY ${V8_SOURCE}/${V8_DESTINATION}
+ LOGNAME build-${TARGET_TRIPLET})
+ endif()
+ foreach(PATCH ${V8_PATCHES})
+ vcpkg_execute_required_process(
+ COMMAND ${GIT} apply ${PATCH}
+ WORKING_DIRECTORY ${V8_SOURCE}/${V8_DESTINATION}
+ LOGNAME build-${TARGET_TRIPLET})
+ endforeach()
+endfunction()
+
+vcpkg_from_git(
+ OUT_SOURCE_PATH SOURCE_PATH
+ URL https://chromium.googlesource.com/v8/v8.git
+ REF 7d3d62c91f69a702e5aa54c6b4dbbaa883683717
+ PATCHES ${CURRENT_PORT_DIR}/v8.patch
+)
+
+message(STATUS "Fetching submodules")
+v8_fetch(
+ DESTINATION build
+ URL https://chromium.googlesource.com/chromium/src/build.git
+ REF fd86d60f33cbc794537c4da2ef7e298d7f81138e
+ SOURCE ${SOURCE_PATH}
+ PATCHES ${CURRENT_PORT_DIR}/build.patch)
+v8_fetch(
+ DESTINATION third_party/zlib
+ URL https://chromium.googlesource.com/chromium/src/third_party/zlib.git
+ REF 156be8c52f80cde343088b4a69a80579101b6e67
+ SOURCE ${SOURCE_PATH})
+v8_fetch(
+ DESTINATION base/trace_event/common
+ URL https://chromium.googlesource.com/chromium/src/base/trace_event/common.git
+ REF dab187b372fc17e51f5b9fad8201813d0aed5129
+ SOURCE ${SOURCE_PATH})
+v8_fetch(
+ DESTINATION third_party/googletest/src
+ URL https://chromium.googlesource.com/external/github.com/google/googletest.git
+ REF 10b1902d893ea8cc43c69541d70868f91af3646b
+ SOURCE ${SOURCE_PATH})
+v8_fetch(
+ DESTINATION third_party/jinja2
+ URL https://chromium.googlesource.com/chromium/src/third_party/jinja2.git
+ REF b41863e42637544c2941b574c7877d3e1f663e25
+ SOURCE ${SOURCE_PATH})
+v8_fetch(
+ DESTINATION third_party/markupsafe
+ URL https://chromium.googlesource.com/chromium/src/third_party/markupsafe.git
+ REF 8f45f5cfa0009d2a70589bcda0349b8cb2b72783
+ SOURCE ${SOURCE_PATH})
+
+vcpkg_execute_required_process(
+ COMMAND ${PYTHON2} build/util/lastchange.py -o build/util/LASTCHANGE
+ WORKING_DIRECTORY ${SOURCE_PATH}
+ LOGNAME build-${TARGET_TRIPLET}
+)
+
+file(MAKE_DIRECTORY "${SOURCE_PATH}/third_party/icu")
+configure_file("${CURRENT_PORT_DIR}/zlib.gn" "${SOURCE_PATH}/third_party/zlib/BUILD.gn" COPYONLY)
+configure_file("${CURRENT_PORT_DIR}/icu.gn" "${SOURCE_PATH}/third_party/icu/BUILD.gn" COPYONLY)
+file(WRITE "${SOURCE_PATH}/build/config/gclient_args.gni" "checkout_google_benchmark = false\n")
+if(VCPKG_TARGET_IS_WINDOWS)
+ string(REGEX REPLACE "\\\\+$" "" WindowsSdkDir $ENV{WindowsSdkDir})
+ file(APPEND "${SOURCE_PATH}/build/config/gclient_args.gni" "windows_sdk_path = \"${WindowsSdkDir}\"\n")
+endif()
+
+if(VCPKG_TARGET_IS_LINUX)
+ set(UNIX_CURRENT_INSTALLED_DIR ${CURRENT_INSTALLED_DIR})
+ set(LIBS "-ldl -lpthread")
+ set(REQUIRES ", gmodule-2.0, gobject-2.0, gthread-2.0")
+elseif(VCPKG_TARGET_IS_WINDOWS)
+ execute_process(COMMAND cygpath "${CURRENT_INSTALLED_DIR}" OUTPUT_VARIABLE UNIX_CURRENT_INSTALLED_DIR)
+ string(STRIP ${UNIX_CURRENT_INSTALLED_DIR} UNIX_CURRENT_INSTALLED_DIR)
+ set(LIBS "-lWinmm -lDbgHelp")
+endif()
+
+if(VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
+ set(is_component_build true)
+ set(v8_monolithic false)
+ set(v8_use_external_startup_data true)
+ set(targets :v8_libbase :v8_libplatform :v8)
+else()
+ set(is_component_build false)
+ set(v8_monolithic true)
+ set(v8_use_external_startup_data false)
+ set(targets :v8_monolith)
+endif()
+
+message(STATUS "Generating v8 build files. Please wait...")
+
+vcpkg_gn_configure(
+ SOURCE_PATH "${SOURCE_PATH}"
+ OPTIONS "is_component_build=${is_component_build} target_cpu=\"${VCPKG_TARGET_ARCHITECTURE}\" v8_monolithic=${v8_monolithic} v8_use_external_startup_data=${v8_use_external_startup_data} use_sysroot=false is_clang=false use_custom_libcxx=false v8_enable_verify_heap=false icu_use_data_file=false"
+ OPTIONS_DEBUG "is_debug=true enable_iterator_debugging=true pkg_config_libdir=\"${UNIX_CURRENT_INSTALLED_DIR}/debug/lib/pkgconfig\""
+ OPTIONS_RELEASE "is_debug=false enable_iterator_debugging=false pkg_config_libdir=\"${UNIX_CURRENT_INSTALLED_DIR}/lib/pkgconfig\""
+)
+
+message(STATUS "Building v8. Please wait...")
+
+vcpkg_gn_install(
+ SOURCE_PATH "${SOURCE_PATH}"
+ TARGETS ${targets}
+)
+
+if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
+ set(CFLAGS "-DV8_COMPRESS_POINTERS -DV8_31BIT_SMIS_ON_64BIT_ARCH")
+endif()
+
+file(INSTALL "${SOURCE_PATH}/include" DESTINATION "${CURRENT_PACKAGES_DIR}/include" FILES_MATCHING PATTERN "*.h")
+
+if(VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
+ set(PREFIX ${CURRENT_PACKAGES_DIR})
+ configure_file("${CURRENT_PORT_DIR}/v8.pc.in" "${CURRENT_PACKAGES_DIR}/lib/pkgconfig/v8.pc" @ONLY)
+ configure_file("${CURRENT_PORT_DIR}/v8_libbase.pc.in" "${CURRENT_PACKAGES_DIR}/lib/pkgconfig/v8_libbase.pc" @ONLY)
+ configure_file("${CURRENT_PORT_DIR}/v8_libplatform.pc.in" "${CURRENT_PACKAGES_DIR}/lib/pkgconfig/v8_libplatform.pc" @ONLY)
+ file(INSTALL "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/snapshot_blob.bin" DESTINATION "${CURRENT_PACKAGES_DIR}/bin")
+
+ set(PREFIX ${CURRENT_PACKAGES_DIR}/debug)
+ configure_file("${CURRENT_PORT_DIR}/v8.pc.in" "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/v8.pc" @ONLY)
+ configure_file("${CURRENT_PORT_DIR}/v8_libbase.pc.in" "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/v8_libbase.pc" @ONLY)
+ configure_file("${CURRENT_PORT_DIR}/v8_libplatform.pc.in" "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/v8_libplatform.pc" @ONLY)
+ configure_file("${CURRENT_PORT_DIR}/V8Config-shared.cmake" "${CURRENT_PACKAGES_DIR}/share/v8/V8Config.cmake" @ONLY)
+ file(INSTALL "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/snapshot_blob.bin" DESTINATION "${CURRENT_PACKAGES_DIR}/debug/bin")
+else()
+ set(PREFIX ${CURRENT_PACKAGES_DIR})
+ configure_file("${CURRENT_PORT_DIR}/v8_monolith.pc.in" "${CURRENT_PACKAGES_DIR}/lib/pkgconfig/v8_monolith.pc" @ONLY)
+ set(PREFIX ${CURRENT_PACKAGES_DIR}/debug)
+ configure_file("${CURRENT_PORT_DIR}/v8_monolith.pc.in" "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/v8_monolith.pc" @ONLY)
+ configure_file("${CURRENT_PORT_DIR}/V8Config-static.cmake" "${CURRENT_PACKAGES_DIR}/share/v8/V8Config.cmake" @ONLY)
+endif()
+
+
+vcpkg_copy_pdbs()
+
+# v8 libraries are listed as SYSTEM_LIBRARIES because the pc files reference each other.
+vcpkg_fixup_pkgconfig(SYSTEM_LIBRARIES m dl pthread Winmm DbgHelp v8_libbase v8_libplatform v8)
+
+# Handle copyright
+file(INSTALL "${SOURCE_PATH}/LICENSE" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME copyright)
diff --git a/vcpkg/ports/v8/v8.patch b/vcpkg/ports/v8/v8.patch
new file mode 100644
index 0000000..7b41c8d
--- /dev/null
+++ b/vcpkg/ports/v8/v8.patch
@@ -0,0 +1,241 @@
+diff --git a/BUILD.gn b/BUILD.gn
+index d2bfb6129d..c5ab18ee44 100644
+--- a/BUILD.gn
++++ b/BUILD.gn
+@@ -5366,6 +5366,7 @@ if (is_component_build) {
+
+ public_deps = [
+ ":v8_base",
++ ":v8_initializers",
+ ":v8_snapshot",
+ ]
+
+diff --git a/src/codegen/code-stub-assembler.h b/src/codegen/code-stub-assembler.h
+index 72b8fbc8a8..3ebfc23f1f 100644
+--- a/src/codegen/code-stub-assembler.h
++++ b/src/codegen/code-stub-assembler.h
+@@ -303,7 +303,7 @@ enum class PrimitiveType { kBoolean, kNumber, kString, kSymbol };
+ // it's possible to add JavaScript-specific useful CodeAssembler "macros"
+ // without modifying files in the compiler directory (and requiring a review
+ // from a compiler directory OWNER).
+-class V8_EXPORT_PRIVATE CodeStubAssembler
++class V8_EXPORT CodeStubAssembler
+ : public compiler::CodeAssembler,
+ public TorqueGeneratedExportedMacrosAssembler {
+ public:
+diff --git a/src/common/globals.h b/src/common/globals.h
+index f51c3210f8..5291285337 100644
+--- a/src/common/globals.h
++++ b/src/common/globals.h
+@@ -1364,7 +1364,7 @@ class BinaryOperationFeedback {
+ // This is distinct from BinaryOperationFeedback on purpose, because the
+ // feedback that matters differs greatly as well as the way it is consumed.
+ class CompareOperationFeedback {
+- enum {
++ enum : uint32_t {
+ kSignedSmallFlag = 1 << 0,
+ kOtherNumberFlag = 1 << 1,
+ kBooleanFlag = 1 << 2,
+@@ -1378,7 +1378,7 @@ class CompareOperationFeedback {
+ };
+
+ public:
+- enum Type {
++ enum Type : uint32_t {
+ kNone = 0,
+
+ kBoolean = kBooleanFlag,
+diff --git a/src/compiler/node-cache.h b/src/compiler/node-cache.h
+index 8e1d3d4eae..c55d8329de 100644
+--- a/src/compiler/node-cache.h
++++ b/src/compiler/node-cache.h
+@@ -29,7 +29,7 @@ class Node;
+ // nodes such as constants, parameters, etc.
+ template <typename Key, typename Hash = base::hash<Key>,
+ typename Pred = std::equal_to<Key> >
+-class EXPORT_TEMPLATE_DECLARE(V8_EXPORT_PRIVATE) NodeCache final {
++class V8_EXPORT_PRIVATE NodeCache final {
+ public:
+ explicit NodeCache(Zone* zone) : map_(zone) {}
+ ~NodeCache() = default;
+diff --git a/src/heap/paged-spaces-inl.h b/src/heap/paged-spaces-inl.h
+index e135e30efc..0c055247bc 100644
+--- a/src/heap/paged-spaces-inl.h
++++ b/src/heap/paged-spaces-inl.h
+@@ -19,7 +19,7 @@ namespace internal {
+ // -----------------------------------------------------------------------------
+ // PagedSpaceObjectIterator
+
+-HeapObject PagedSpaceObjectIterator::Next() {
++inline HeapObject PagedSpaceObjectIterator::Next() {
+ do {
+ HeapObject next_obj = FromCurrentPage();
+ if (!next_obj.is_null()) return next_obj;
+diff --git a/src/heap/paged-spaces.h b/src/heap/paged-spaces.h
+index 621d92aa89..a8592a5b4d 100644
+--- a/src/heap/paged-spaces.h
++++ b/src/heap/paged-spaces.h
+@@ -45,7 +45,7 @@ class V8_EXPORT_PRIVATE PagedSpaceObjectIterator : public ObjectIterator {
+ // Advance to the next object, skipping free spaces and other fillers and
+ // skipping the special garbage section of which there is one per space.
+ // Returns nullptr when the iteration has ended.
+- inline HeapObject Next() override;
++ HeapObject Next() override;
+
+ private:
+ // Fast (inlined) path of next().
+diff --git a/src/objects/feedback-vector.cc b/src/objects/feedback-vector.cc
+index a77ea5d265..0cddb92a02 100644
+--- a/src/objects/feedback-vector.cc
++++ b/src/objects/feedback-vector.cc
+@@ -114,9 +114,9 @@ Handle<FeedbackMetadata> FeedbackMetadata::New(LocalIsolate* isolate,
+ return metadata;
+ }
+
+-template Handle<FeedbackMetadata> FeedbackMetadata::New(
++template V8_EXPORT Handle<FeedbackMetadata> FeedbackMetadata::New(
+ Isolate* isolate, const FeedbackVectorSpec* spec);
+-template Handle<FeedbackMetadata> FeedbackMetadata::New(
++template V8_EXPORT Handle<FeedbackMetadata> FeedbackMetadata::New(
+ LocalIsolate* isolate, const FeedbackVectorSpec* spec);
+
+ bool FeedbackMetadata::SpecDiffersFrom(
+diff --git a/src/objects/fixed-array-inl.h b/src/objects/fixed-array-inl.h
+index cca6d40070..d6d36ff59f 100644
+--- a/src/objects/fixed-array-inl.h
++++ b/src/objects/fixed-array-inl.h
+@@ -88,7 +88,7 @@ bool FixedArray::is_the_hole(Isolate* isolate, int index) {
+ return get(isolate, index).IsTheHole(isolate);
+ }
+
+-void FixedArray::set(int index, Smi value) {
++inline V8_EXPORT_PRIVATE void FixedArray::set(int index, Smi value) {
+ DCHECK_NE(map(), GetReadOnlyRoots().fixed_cow_array_map());
+ DCHECK_LT(static_cast<unsigned>(index), static_cast<unsigned>(length()));
+ DCHECK(Object(value).IsSmi());
+diff --git a/src/objects/fixed-array.h b/src/objects/fixed-array.h
+index 98c5d8d5b5..bd5303e44c 100644
+--- a/src/objects/fixed-array.h
++++ b/src/objects/fixed-array.h
+@@ -132,7 +132,7 @@ class FixedArray
+ inline bool is_the_hole(Isolate* isolate, int index);
+
+ // Setter that doesn't need write barrier.
+- inline void set(int index, Smi value);
++ inline V8_EXPORT_PRIVATE void set(int index, Smi value);
+ // Setter with explicit barrier mode.
+ inline void set(int index, Object value, WriteBarrierMode mode);
+
+diff --git a/src/snapshot/snapshot-utils.cc b/src/snapshot/snapshot-utils.cc
+index eb2372372c..7defadb4b1 100644
+--- a/src/snapshot/snapshot-utils.cc
++++ b/src/snapshot/snapshot-utils.cc
+@@ -5,7 +5,7 @@
+ #include "src/snapshot/snapshot-utils.h"
+
+ #include "src/sanitizer/msan.h"
+-#include "third_party/zlib/zlib.h"
++#include "zlib.h"
+
+ namespace v8 {
+ namespace internal {
+diff --git a/src/wasm/function-body-decoder-impl.h b/src/wasm/function-body-decoder-impl.h
+index d37f718681..3a409e1d76 100644
+--- a/src/wasm/function-body-decoder-impl.h
++++ b/src/wasm/function-body-decoder-impl.h
+@@ -2013,7 +2013,7 @@ class WasmDecoder : public Decoder {
+ }
+
+ // TODO(clemensb): This is only used by the interpreter; move there.
+- V8_EXPORT_PRIVATE std::pair<uint32_t, uint32_t> StackEffect(const byte* pc) {
++ std::pair<uint32_t, uint32_t> StackEffect(const byte* pc) {
+ WasmOpcode opcode = static_cast<WasmOpcode>(*pc);
+ // Handle "simple" opcodes with a fixed signature first.
+ const FunctionSig* sig = WasmOpcodes::Signature(opcode);
+diff --git a/test/cctest/BUILD.gn b/test/cctest/BUILD.gn
+index ffa4e3a136..a279faee9b 100644
+--- a/test/cctest/BUILD.gn
++++ b/test/cctest/BUILD.gn
+@@ -493,6 +493,10 @@ v8_source_set("cctest_sources") {
+ # C4309: 'static_cast': truncation of constant value
+ cflags += [ "/wd4309" ]
+
++ if(!is_clang) {
++ cflags += [ "/wd4789" ]
++ }
++
+ # MSVS wants this for gay-{precision,shortest}.cc.
+ cflags += [ "/bigobj" ]
+
+diff --git a/tools/debug_helper/BUILD.gn b/tools/debug_helper/BUILD.gn
+index 2256df1f55..29e27c6af9 100644
+--- a/tools/debug_helper/BUILD.gn
++++ b/tools/debug_helper/BUILD.gn
+@@ -100,10 +100,12 @@ v8_component("v8_debug_helper") {
+ "../..:v8_libbase",
+ "../..:v8_shared_internal_headers",
+ "../..:v8_tracing",
++ "../..:v8",
+ ]
+
+ configs = [ ":internal_config" ]
+ if (v8_enable_i18n_support) {
++ public_deps = [ "//third_party/icu" ]
+ configs += [ "//third_party/icu:icu_config" ]
+ }
+
+diff --git a/tools/v8windbg/BUILD.gn b/tools/v8windbg/BUILD.gn
+index 5618d2d945..71568f1670 100644
+--- a/tools/v8windbg/BUILD.gn
++++ b/tools/v8windbg/BUILD.gn
+@@ -6,7 +6,7 @@ import("../../gni/v8.gni")
+
+ config("v8windbg_config") {
+ # Required for successful compilation of SDK header file DbgModel.h.
+- cflags_cc = [ "/Zc:twoPhase-" ]
++ cflags_cc = [ "/Zc:twoPhase-", "/std:c++latest" ]
+
+ include_dirs = [ "../.." ]
+ }
+diff --git a/tools/v8windbg/base/dbgext.h b/tools/v8windbg/base/dbgext.h
+index 8b36a8f361..f8d9f0d64e 100644
+--- a/tools/v8windbg/base/dbgext.h
++++ b/tools/v8windbg/base/dbgext.h
+@@ -9,6 +9,7 @@
+ #error Unicode not defined
+ #endif
+
++#include <new>
+ #include <DbgEng.h>
+ #include <DbgModel.h>
+ #include <Windows.h>
+diff --git a/tools/v8windbg/src/v8-debug-helper-interop.h b/tools/v8windbg/src/v8-debug-helper-interop.h
+index f7d78c5dd3..1c70e54e7a 100644
+--- a/tools/v8windbg/src/v8-debug-helper-interop.h
++++ b/tools/v8windbg/src/v8-debug-helper-interop.h
+@@ -5,10 +5,11 @@
+ #ifndef V8_TOOLS_V8WINDBG_SRC_V8_DEBUG_HELPER_INTEROP_H_
+ #define V8_TOOLS_V8WINDBG_SRC_V8_DEBUG_HELPER_INTEROP_H_
+
+-#include <wrl/client.h>
+-
++#include <new>
++#include <DbgEng.h>
+ #include <DbgModel.h>
+
++#include <wrl/client.h>
+ #include <cstdint>
+ #include <map>
+ #include <string>
+diff --git a/tools/v8windbg/test/debug-callbacks.h b/tools/v8windbg/test/debug-callbacks.h
+index 8855d6ffbc..ed2b0f62e9 100644
+--- a/tools/v8windbg/test/debug-callbacks.h
++++ b/tools/v8windbg/test/debug-callbacks.h
+@@ -9,6 +9,7 @@
+ #error Unicode not defined
+ #endif
+
++#include <new>
+ #include <DbgEng.h>
+ #include <DbgModel.h>
+ #include <Windows.h>
diff --git a/vcpkg/ports/v8/v8.pc.in b/vcpkg/ports/v8/v8.pc.in
new file mode 100644
index 0000000..5f57217
--- /dev/null
+++ b/vcpkg/ports/v8/v8.pc.in
@@ -0,0 +1,11 @@
+prefix=@PREFIX@
+exec_prefix=${prefix}
+libdir=${prefix}/lib
+includedir=${prefix}/include
+
+Name: v8
+Description: V8 JavaScript Engine
+Version: @pkgver@
+Requires: zlib, icu-uc, icu-i18n, v8_libbase = @pkgver@
+Libs: -L${libdir} -lv8
+Cflags: -I${includedir} @CFLAGS@
diff --git a/vcpkg/ports/v8/v8_libbase.pc.in b/vcpkg/ports/v8/v8_libbase.pc.in
new file mode 100644
index 0000000..ad472ab
--- /dev/null
+++ b/vcpkg/ports/v8/v8_libbase.pc.in
@@ -0,0 +1,10 @@
+prefix=@PREFIX@
+exec_prefix=${prefix}
+libdir=${prefix}/lib
+includedir=${prefix}/include
+
+Name: v8
+Description: V8 JavaScript Engine - Base library
+Version: @pkgver@
+Libs: -L${libdir} -lv8_libbase
+Cflags: -I${includedir} @CFLAGS@
diff --git a/vcpkg/ports/v8/v8_libplatform.pc.in b/vcpkg/ports/v8/v8_libplatform.pc.in
new file mode 100644
index 0000000..19c54ba
--- /dev/null
+++ b/vcpkg/ports/v8/v8_libplatform.pc.in
@@ -0,0 +1,10 @@
+prefix=@PREFIX@
+exec_prefix=${prefix}
+libdir=${prefix}/lib
+includedir=${prefix}/include
+
+Name: v8
+Description: V8 JavaScript Engine - Platform library
+Version: @pkgver@
+Libs: -L${libdir} -lv8_libplatform
+Cflags: -I${includedir} @CFLAGS@
diff --git a/vcpkg/ports/v8/v8_monolith.pc.in b/vcpkg/ports/v8/v8_monolith.pc.in
new file mode 100644
index 0000000..b23c661
--- /dev/null
+++ b/vcpkg/ports/v8/v8_monolith.pc.in
@@ -0,0 +1,11 @@
+prefix=@PREFIX@
+exec_prefix=${prefix}
+libdir=${prefix}/lib
+includedir=${prefix}/include
+
+Name: v8
+Description: V8 JavaScript Engine
+Version: @pkgver@
+Requires: zlib, icu-uc, icu-i18n @REQUIRES@
+Libs: -L${libdir} -lv8_monolith @LIBS@
+Cflags: -I${includedir} @CFLAGS@
diff --git a/vcpkg/ports/v8/vcpkg.json b/vcpkg/ports/v8/vcpkg.json
new file mode 100644
index 0000000..3decc19
--- /dev/null
+++ b/vcpkg/ports/v8/vcpkg.json
@@ -0,0 +1,29 @@
+{
+ "name": "v8",
+ "version": "9.1.269.39",
+ "port-version": 8,
+ "description": "Google Chrome's JavaScript engine",
+ "homepage": "https://v8.dev",
+ "license": "BSD-3-Clause",
+ "supports": "!(arm | arm64 | uwp | osx | linux)",
+ "dependencies": [
+ {
+ "name": "glib",
+ "platform": "linux"
+ },
+ "icu",
+ {
+ "name": "pthread",
+ "platform": "linux"
+ },
+ {
+ "name": "vcpkg-gn",
+ "host": true
+ },
+ {
+ "name": "vcpkg-tool-python2",
+ "host": true
+ },
+ "zlib"
+ ]
+}
diff --git a/vcpkg/ports/v8/zlib.gn b/vcpkg/ports/v8/zlib.gn
new file mode 100644
index 0000000..570d0e2
--- /dev/null
+++ b/vcpkg/ports/v8/zlib.gn
@@ -0,0 +1,21 @@
+import("//build/config/linux/pkg_config.gni")
+
+pkg_config("system_zlib") {
+ packages = [ "zlib" ]
+ defines = [ "USE_SYSTEM_ZLIB=1" ]
+}
+
+config("zlib_config") {
+ if(is_win && !is_component_build) {
+ ldflags = ["/ignore:4099"] # needed on VCPKG CI builds
+ }
+ configs = [
+ ":system_zlib",
+ ]
+}
+
+source_set("zlib") {
+ public_configs = [
+ ":system_zlib",
+ ]
+}