git: f366d9631672 - main - lang/v8-beta: Add v8-beta 9.6.180.5

From: Po-Chuan Hsieh <sunpoet_at_FreeBSD.org>
Date: Mon, 01 Nov 2021 13:45:14 UTC
The branch main has been updated by sunpoet:

URL: https://cgit.FreeBSD.org/ports/commit/?id=f366d96316722f0acfe0183f844e6fd3d6a5d80a

commit f366d96316722f0acfe0183f844e6fd3d6a5d80a
Author:     Po-Chuan Hsieh <sunpoet@FreeBSD.org>
AuthorDate: 2021-11-01 13:23:13 +0000
Commit:     Po-Chuan Hsieh <sunpoet@FreeBSD.org>
CommitDate: 2021-11-01 13:41:20 +0000

    lang/v8-beta: Add v8-beta 9.6.180.5
    
    Changes:        https://v8.dev/blog/v8-release-96
                    https://chromium.googlesource.com/v8/v8.git/+log/refs/heads/9.6-lkgr
                    https://github.com/v8/v8/commits/9.6-lkgr
---
 lang/Makefile                                      |   1 +
 lang/v8-beta/Makefile                              | 107 ++++++++++++++++++++
 lang/v8-beta/distinfo                              |  17 ++++
 lang/v8-beta/files/patch-BUILD.gn                  |  32 ++++++
 lang/v8-beta/files/patch-build_config_BUILD.gn     |  30 ++++++
 .../files/patch-build_config_BUILDCONFIG.gn        |  44 ++++++++
 .../files/patch-build_config_compiler_BUILD.gn     | 101 +++++++++++++++++++
 .../files/patch-build_config_compiler_compiler.gni |  11 ++
 lang/v8-beta/files/patch-build_config_features.gni |  11 ++
 .../files/patch-build_config_freetype_freetype.gni |   9 ++
 .../files/patch-build_config_linux_BUILD.gn        |  11 ++
 .../files/patch-build_config_linux_pkg-config.py   |  26 +++++
 lang/v8-beta/files/patch-build_config_rust.gni     |  11 ++
 lang/v8-beta/files/patch-build_config_sysroot.gni  |  14 +++
 .../files/patch-build_detect__host__arch.py        |  11 ++
 lang/v8-beta/files/patch-build_gn__run__binary.py  |  11 ++
 lang/v8-beta/files/patch-build_linux_chrome.map    |  29 ++++++
 .../files/patch-build_linux_libpci_BUILD.gn        |  53 ++++++++++
 .../files/patch-build_linux_unbundle_libusb.gn     |  27 +++++
 ...atch-build_linux_unbundle_replace__gn__files.py |  10 ++
 .../files/patch-build_toolchain_gcc__toolchain.gni |  45 +++++++++
 ...patch-build_toolchain_get__concurrent__links.py |  17 ++++
 .../files/patch-build_toolchain_linux_BUILD.gn     |  10 ++
 .../patch-buildtools_third__party_libc++_BUILD.gn  |  10 ++
 lang/v8-beta/files/patch-include_v8config.h        |  21 ++++
 lang/v8-beta/files/patch-src_api_api.cc            |  11 ++
 lang/v8-beta/files/patch-src_base_cpu.cc           |  18 ++++
 .../patch-src_base_platform_platform-freebsd.cc    |  13 +++
 .../patch-src_base_platform_platform-posix.cc      |  24 +++++
 lang/v8-beta/files/patch-src_d8_d8-posix.cc        |  19 ++++
 .../v8-beta/files/patch-third__party_zlib_BUILD.gn |  11 ++
 .../files/patch-third__party_zlib_cpu__features.c  |  48 +++++++++
 lang/v8-beta/files/v8.pc.in                        |  11 ++
 lang/v8-beta/files/v8_libbase.pc.in                |  10 ++
 lang/v8-beta/files/v8_libplatform.pc.in            |  10 ++
 lang/v8-beta/pkg-descr                             |  14 +++
 lang/v8-beta/pkg-plist                             | 112 +++++++++++++++++++++
 37 files changed, 970 insertions(+)

diff --git a/lang/Makefile b/lang/Makefile
index 2ab54b67d32a..e35bd548f879 100644
--- a/lang/Makefile
+++ b/lang/Makefile
@@ -357,6 +357,7 @@
     SUBDIR += urweb
     SUBDIR += v
     SUBDIR += v8
+    SUBDIR += v8-beta
     SUBDIR += vala
     SUBDIR += visualworks
     SUBDIR += voc
diff --git a/lang/v8-beta/Makefile b/lang/v8-beta/Makefile
new file mode 100644
index 000000000000..adea349bf6bb
--- /dev/null
+++ b/lang/v8-beta/Makefile
@@ -0,0 +1,107 @@
+# We follow the beta channel on https://omahaproxy.appspot.com/
+# https://chromium.googlesource.com/v8/v8/+/refs/heads/9.6-lkgr
+
+PORTNAME=	v8
+PORTVERSION=	9.6.180.5
+CATEGORIES=	lang
+MASTER_SITES=	LOCAL/sunpoet/v8/${PORTVERSION:R:R}
+DISTFILES=	build-${BUILD_REV}.tar.gz \
+		buildtools-${BUILDTOOLS_REV}.tar.gz \
+		clang-${CLANG_REV}.tar.gz \
+		common-${COMMON_REV}.tar.gz \
+		googletest-${GOOGLETEST_REV}.tar.gz \
+		icu-${ICU_REV}.tar.gz \
+		zlib-${ZLIB_REV}.tar.gz
+EXTRACT_ONLY=	${DISTNAME}.tar.gz
+DIST_SUBDIR=	v8/${PORTVERSION:R:R}
+PKGNAMESUFFIX=	-beta
+
+MAINTAINER=	sunpoet@FreeBSD.org
+COMMENT=	Open source JavaScript engine by Google
+
+LICENSE=	BSD3CLAUSE
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+BUILD_DEPENDS=	binutils>=0:devel/binutils \
+		gn:devel/gn \
+		${PYTHON_PKGNAMEPREFIX}Jinja2>=0:devel/py-Jinja2@${PY_FLAVOR}
+LIB_DEPENDS=	libicudata.so:devel/icu
+
+USES=		compiler:c++17-lang cpe gnome ninja pkgconfig python:3.5+,build tar:xz
+USE_GNOME=	glib20
+
+BINARY_ALIAS=	python3=${PYTHON_CMD}
+MAKE_ARGS=	-C out/Release
+USE_LDCONFIG=	yes
+
+SUB_FILES=	v8.pc v8_libbase.pc v8_libplatform.pc
+
+USE_GITHUB=	yes
+
+CPE_VENDOR=	google
+
+CONFLICTS_INSTALL=	v8
+
+BUILD_REV=	ebad8533842661f66b9b905e0ee9890a32f628d5
+BUILDTOOLS_REV=	a9bc3e283182a586998338a665c7eae17406ec54
+CLANG_REV=	c06edd1f455183fc89e9f8c2cf745db8f564d8ea
+COMMON_REV=	68d816952258c9d817bba656ee2664b35507f01b
+GOOGLETEST_REV=	3b49be074d5c1340eeb447e6a8e78427051e675a
+ICU_REV=	3f443830bd52d3aa5fab3c1aa2b6d0848bb5039d
+ZLIB_REV=	dfa96e81458fb3b39676e45f7e9e000dff789b05
+
+# Run "gn args --list out/Release" for all variables.
+# Some parts don't have use_system_* flag, and can be turned on/off by using
+# replace_gn_files.py script, some parts just turned on/off for target host
+# OS "target_os == is_bsd", like libusb, libpci.
+GN_ARGS+=	clang_use_chrome_plugins=false \
+		extra_cxxflags="${CXXFLAGS}" \
+		extra_ldflags="${LDFLAGS}" \
+		is_clang=true \
+		treat_warnings_as_errors=false \
+		use_aura=true \
+		use_lld=true \
+		use_custom_libcxx=false \
+		v8_use_external_startup_data=false
+
+post-extract:
+	@${MKDIR} ${WRKSRC}/base/trace_event/common ${WRKSRC}/build ${WRKSRC}/buildtools ${WRKSRC}/third_party/googletest/src ${WRKSRC}/third_party/icu ${WRKSRC}/third_party/zlib ${WRKSRC}/tools/clang
+	@${TAR} -xf ${DISTDIR}/${DIST_SUBDIR}/build-${BUILD_REV}.tar.gz -C ${WRKSRC}/build
+	@${TAR} -xf ${DISTDIR}/${DIST_SUBDIR}/buildtools-${BUILDTOOLS_REV}.tar.gz -C ${WRKSRC}/buildtools
+	@${TAR} -xf ${DISTDIR}/${DIST_SUBDIR}/clang-${CLANG_REV}.tar.gz -C ${WRKSRC}/tools/clang
+	@${TAR} -xf ${DISTDIR}/${DIST_SUBDIR}/common-${COMMON_REV}.tar.gz -C ${WRKSRC}/base/trace_event/common
+	@${TAR} -xf ${DISTDIR}/${DIST_SUBDIR}/googletest-${GOOGLETEST_REV}.tar.gz -C ${WRKSRC}/third_party/googletest/src
+	@${TAR} -xf ${DISTDIR}/${DIST_SUBDIR}/icu-${ICU_REV}.tar.gz -C ${WRKSRC}/third_party/icu
+	@${TAR} -xf ${DISTDIR}/${DIST_SUBDIR}/zlib-${ZLIB_REV}.tar.gz -C ${WRKSRC}/third_party/zlib
+
+post-patch:
+	@${REINPLACE_CMD} -i '' 's|%%LOCALBASE%%|${LOCALBASE}|' ${WRKSRC}/build/toolchain/gcc_toolchain.gni ${WRKSRC}/buildtools/third_party/libc++/BUILD.gn
+	# https://github.com/klzgrad/naiveproxy/blob/master/src/build/config/gclient_args.gni
+	${ECHO_CMD} 'checkout_google_benchmark = false' > ${WRKSRC}/build/config/gclient_args.gni
+
+# Use ICU from ports and create needed directory
+pre-configure:
+	@cd ${WRKSRC} && ${SETENV} ${CONFIGURE_ENV} ${PYTHON_CMD} ./build/linux/unbundle/replace_gn_files.py --system-libraries icu # || ${FALSE}
+	@${MKDIR} ${WRKSRC}/out/Release/gen/shim_headers/icui18n_shim/third_party/icu/source/i18n/unicode ${WRKSRC}/out/Release/gen/shim_headers/icuuc_shim/third_party/icu/source/common/unicode
+	@${MKDIR} ${WRKSRC}/out/Release/gen/include
+	@${CP} -R ${LOCALBASE}/include/unicode ${WRKSRC}/out/Release/gen/include/unicode
+
+do-configure:
+	@cd ${WRKSRC} && ${SETENV} ${CONFIGURE_ENV} gn gen out/Release --args='${GN_ARGS}'
+
+do-install:
+	${MKDIR} ${STAGEDIR}${PREFIX}/include/cppgc ${STAGEDIR}${PREFIX}/include/libplatform
+	${INSTALL_PROGRAM} ${WRKSRC}/out/Release/d8 ${STAGEDIR}${PREFIX}/bin/d8
+	${INSTALL_PROGRAM} ${WRKSRC}/out/Release/mkgrokdump ${STAGEDIR}${PREFIX}/bin/mkgrokdump
+	${INSTALL_PROGRAM} ${WRKSRC}/out/Release/mksnapshot ${STAGEDIR}${PREFIX}/bin/mksnapshot
+	${INSTALL_LIB} ${WRKSRC}/out/Release/libchrome_zlib.so ${STAGEDIR}${PREFIX}/lib/libchrome_zlib.so
+	${INSTALL_LIB} ${WRKSRC}/out/Release/libcppgc.so ${STAGEDIR}${PREFIX}/lib/libcppgc.so
+	${INSTALL_LIB} ${WRKSRC}/out/Release/libv8.so ${STAGEDIR}${PREFIX}/lib/libv8.so
+	${INSTALL_LIB} ${WRKSRC}/out/Release/libv8_libbase.so ${STAGEDIR}${PREFIX}/lib/libv8_libbase.so
+	${INSTALL_LIB} ${WRKSRC}/out/Release/libv8_libplatform.so ${STAGEDIR}${PREFIX}/lib/libv8_libplatform.so
+	${INSTALL_DATA} ${WRKSRC}/include/*.h ${STAGEDIR}${PREFIX}/include/
+	cd ${WRKSRC}/include/cppgc && ${COPYTREE_SHARE} . ${STAGEDIR}${PREFIX}/include/cppgc '-name *\.h'
+	${INSTALL_DATA} ${WRKSRC}/include/libplatform/*.h ${STAGEDIR}${PREFIX}/include/libplatform/
+	${INSTALL_DATA} ${WRKDIR}/v8*.pc ${STAGEDIR}${PREFIX}/libdata/pkgconfig/
+
+.include <bsd.port.mk>
diff --git a/lang/v8-beta/distinfo b/lang/v8-beta/distinfo
new file mode 100644
index 000000000000..b0f8cdb397c9
--- /dev/null
+++ b/lang/v8-beta/distinfo
@@ -0,0 +1,17 @@
+TIMESTAMP = 1635730869
+SHA256 (v8/9.6/build-ebad8533842661f66b9b905e0ee9890a32f628d5.tar.gz) = d8e9e21f48b0a88f456d88bb76fe6381ba2d3429c36f371dbabf11f50c704468
+SIZE (v8/9.6/build-ebad8533842661f66b9b905e0ee9890a32f628d5.tar.gz) = 1357606
+SHA256 (v8/9.6/buildtools-a9bc3e283182a586998338a665c7eae17406ec54.tar.gz) = 4aaec99b3c5cc9bf588a5ddd76efdc024276097a9bdddf1364936f9ddcdf7f78
+SIZE (v8/9.6/buildtools-a9bc3e283182a586998338a665c7eae17406ec54.tar.gz) = 86607
+SHA256 (v8/9.6/clang-c06edd1f455183fc89e9f8c2cf745db8f564d8ea.tar.gz) = 1f03b84dad25f4b80fcb137e00be9efc9f0503146103ec4ac6b792df78700aa7
+SIZE (v8/9.6/clang-c06edd1f455183fc89e9f8c2cf745db8f564d8ea.tar.gz) = 288468
+SHA256 (v8/9.6/common-68d816952258c9d817bba656ee2664b35507f01b.tar.gz) = 6d84abfe22276bf1940b617aa8c320ec098d40c7d6dc83978b157836061f5c34
+SIZE (v8/9.6/common-68d816952258c9d817bba656ee2664b35507f01b.tar.gz) = 10624
+SHA256 (v8/9.6/googletest-3b49be074d5c1340eeb447e6a8e78427051e675a.tar.gz) = 75be476046d5135185521ed95a8c03872d6eb1ff3a2d956ee7d0739936492df6
+SIZE (v8/9.6/googletest-3b49be074d5c1340eeb447e6a8e78427051e675a.tar.gz) = 830864
+SHA256 (v8/9.6/icu-3f443830bd52d3aa5fab3c1aa2b6d0848bb5039d.tar.gz) = 033b914dba13dbb5599ab1e21c652d707c3b5d96184c535c6a3dc65f6c0d610b
+SIZE (v8/9.6/icu-3f443830bd52d3aa5fab3c1aa2b6d0848bb5039d.tar.gz) = 43801217
+SHA256 (v8/9.6/zlib-dfa96e81458fb3b39676e45f7e9e000dff789b05.tar.gz) = aefe670a752dd8ac2e6d3e9820cdcb83f660a849750d6da1301bb06be97a2528
+SIZE (v8/9.6/zlib-dfa96e81458fb3b39676e45f7e9e000dff789b05.tar.gz) = 313143
+SHA256 (v8/9.6/v8-v8-9.6.180.5_GH0.tar.gz) = 6fa5963df6af3d10479294bd1194b52fbecc558234ae0dbe6bee21360fb96932
+SIZE (v8/9.6/v8-v8-9.6.180.5_GH0.tar.gz) = 27104492
diff --git a/lang/v8-beta/files/patch-BUILD.gn b/lang/v8-beta/files/patch-BUILD.gn
new file mode 100644
index 000000000000..f39f14add820
--- /dev/null
+++ b/lang/v8-beta/files/patch-BUILD.gn
@@ -0,0 +1,32 @@
+--- BUILD.gn.orig	2021-10-06 18:22:58 UTC
++++ BUILD.gn
+@@ -4804,7 +4804,7 @@ v8_component("v8_libbase") {
+     }
+   }
+ 
+-  if (is_linux || is_chromeos) {
++  if ((is_linux || is_chromeos) && !is_bsd) {
+     sources += [
+       "src/base/debug/stack_trace_posix.cc",
+       "src/base/platform/platform-linux.cc",
+@@ -4821,6 +4821,12 @@ v8_component("v8_libbase") {
+     ]
+ 
+     libs = [ "dl" ]
++  } else if (is_bsd) {
++    sources += [
++      "src/base/debug/stack_trace_posix.cc",
++      "src/base/platform/platform-freebsd.cc",
++    ]
++    libs = [ "rt", "execinfo" ]
+   } else if (is_android) {
+     if (current_toolchain == host_toolchain) {
+       libs = [
+@@ -5313,6 +5319,7 @@ if (v8_monolithic) {
+       ":v8_libplatform",
+       "//build/win:default_exe_manifest",
+     ]
++    libs = ["execinfo"]
+ 
+     configs = [ ":internal_config" ]
+   }
diff --git a/lang/v8-beta/files/patch-build_config_BUILD.gn b/lang/v8-beta/files/patch-build_config_BUILD.gn
new file mode 100644
index 000000000000..862adcb37658
--- /dev/null
+++ b/lang/v8-beta/files/patch-build_config_BUILD.gn
@@ -0,0 +1,30 @@
+--- build/config/BUILD.gn.orig	2021-05-26 12:26:11 UTC
++++ build/config/BUILD.gn
+@@ -128,7 +128,7 @@ config("debug") {
+       # builds, and we have to tell it to turn it off.
+       defines += [ "_HAS_ITERATOR_DEBUGGING=0" ]
+     }
+-  } else if ((is_linux || is_chromeos) && current_cpu == "x64" &&
++  } else if ((is_linux || is_chromeos || is_bsd) && current_cpu == "x64" &&
+              enable_iterator_debugging) {
+     # Enable libstdc++ debugging facilities to help catch problems early, see
+     # http://crbug.com/65151 .
+@@ -227,9 +227,7 @@ config("default_libs") {
+     ]
+   } else if (is_linux || is_chromeos) {
+     libs = [
+-      "dl",
+       "pthread",
+-      "rt",
+     ]
+   }
+ }
+@@ -308,7 +306,7 @@ config("executable_config") {
+       "//build/config/ios:ios_dynamic_flags",
+       "//build/config/ios:ios_executable_flags",
+     ]
+-  } else if (is_linux || is_chromeos || is_android || current_os == "aix") {
++  } else if (is_linux || is_bsd || is_chromeos || is_android || current_os == "aix") {
+     configs += [ "//build/config/gcc:executable_config" ]
+     if (is_chromecast) {
+       configs += [ "//build/config/chromecast:executable_config" ]
diff --git a/lang/v8-beta/files/patch-build_config_BUILDCONFIG.gn b/lang/v8-beta/files/patch-build_config_BUILDCONFIG.gn
new file mode 100644
index 000000000000..926e6acaf504
--- /dev/null
+++ b/lang/v8-beta/files/patch-build_config_BUILDCONFIG.gn
@@ -0,0 +1,44 @@
+--- build/config/BUILDCONFIG.gn.orig	2021-05-26 12:26:11 UTC
++++ build/config/BUILDCONFIG.gn
+@@ -131,7 +131,7 @@ declare_args() {
+   is_official_build = false
+ 
+   # Set to true when compiling with the Clang compiler.
+-  is_clang = current_os != "linux" ||
++  is_clang = current_os != "linux" || current_os == "freebsd" ||
+              (current_cpu != "s390x" && current_cpu != "s390" &&
+               current_cpu != "ppc64" && current_cpu != "ppc" &&
+               current_cpu != "mips" && current_cpu != "mips64" &&
+@@ -184,8 +184,8 @@ if (host_toolchain == "") {
+   # TODO(dpranke): Add some sort of assert here that verifies that
+   # no toolchain omitted host_toolchain from its toolchain_args().
+ 
+-  if (host_os == "linux") {
+-    if (target_os != "linux") {
++  if (host_os == "linux" || host_os == "freebsd") {
++    if (target_os != "linux" && target_os != "freebsd") {
+       host_toolchain = "//build/toolchain/linux:clang_$host_cpu"
+     } else if (is_clang) {
+       host_toolchain = "//build/toolchain/linux:clang_$host_cpu"
+@@ -222,7 +222,7 @@ if (target_os == "android") {
+   assert(host_os == "linux" || host_os == "mac",
+          "Android builds are only supported on Linux and Mac hosts.")
+   _default_toolchain = "//build/toolchain/android:android_clang_$target_cpu"
+-} else if (target_os == "chromeos" || target_os == "linux") {
++} else if (target_os == "chromeos" || target_os == "linux" || target_os == "freebsd") {
+   # See comments in build/toolchain/cros/BUILD.gn about board compiles.
+   if (is_clang) {
+     _default_toolchain = "//build/toolchain/linux:clang_$target_cpu"
+@@ -287,10 +287,11 @@ is_android = current_os == "android"
+ is_chromeos = current_os == "chromeos"
+ is_fuchsia = current_os == "fuchsia"
+ is_ios = current_os == "ios"
+-is_linux = current_os == "linux"
++is_linux = current_os == "linux" || current_os == "freebsd"
+ is_mac = current_os == "mac"
+ is_nacl = current_os == "nacl"
+ is_win = current_os == "win" || current_os == "winuwp"
++is_bsd = current_os == "freebsd"
+ 
+ is_apple = is_ios || is_mac
+ is_posix = !is_win && !is_fuchsia
diff --git a/lang/v8-beta/files/patch-build_config_compiler_BUILD.gn b/lang/v8-beta/files/patch-build_config_compiler_BUILD.gn
new file mode 100644
index 000000000000..20c0c04bcf4c
--- /dev/null
+++ b/lang/v8-beta/files/patch-build_config_compiler_BUILD.gn
@@ -0,0 +1,101 @@
+--- build/config/compiler/BUILD.gn.orig	2021-10-20 15:47:54 UTC
++++ build/config/compiler/BUILD.gn
+@@ -140,7 +140,7 @@ declare_args() {
+   #
+   # TODO(crbug.com/1131993): Enabling this when 'is_android' is true breaks
+   # content_shell_test_apk on both ARM and x86.
+-  init_stack_vars = !is_android
++  init_stack_vars = !is_android && !is_bsd
+ 
+   # This argument is to control whether enabling text section splitting in the
+   # final binary. When enabled, the separated text sections with prefix
+@@ -355,7 +355,7 @@ config("compiler") {
+     }
+ 
+     # Linker warnings.
+-    if (fatal_linker_warnings && !is_apple && current_os != "aix") {
++    if (fatal_linker_warnings && !is_apple && !is_bsd && current_os != "aix") {
+       ldflags += [ "-Wl,--fatal-warnings" ]
+     }
+     if (fatal_linker_warnings && is_apple) {
+@@ -531,7 +531,7 @@ config("compiler") {
+     ldflags += [ "-Wl,-z,keep-text-section-prefix" ]
+   }
+ 
+-  if (is_clang && !is_nacl && !use_xcode_clang) {
++  if (is_clang && !is_nacl && !use_xcode_clang && !is_bsd) {
+     cflags += [ "-fcrash-diagnostics-dir=" + clang_diagnostic_dir ]
+ 
+     # TODO(hans): Remove this once Clang generates better optimized debug info
+@@ -909,7 +909,7 @@ config("compiler_cpu_abi") {
+         cflags += [ "-mtune=$arm_tune" ]
+       }
+     } else if (current_cpu == "arm64") {
+-      if (is_clang && !is_android && !is_nacl && !is_fuchsia) {
++      if (is_clang && !is_android && !is_nacl && !is_fuchsia && !is_bsd) {
+         cflags += [ "--target=aarch64-linux-gnu" ]
+         ldflags += [ "--target=aarch64-linux-gnu" ]
+       }
+@@ -1253,7 +1253,7 @@ config("compiler_deterministic") {
+     # different build directory like "out/feature_a" and "out/feature_b" if
+     # we build same files with same compile flag.
+     # Other paths are already given in relative, no need to normalize them.
+-    if (is_nacl) {
++    if (is_nacl || is_bsd) {
+       # TODO(https://crbug.com/1231236): Use -ffile-compilation-dir= here.
+       cflags += [
+         "-Xclang",
+@@ -1266,7 +1266,7 @@ config("compiler_deterministic") {
+       # and -fcoverage-compilation-dir=.
+       cflags += [ "-ffile-compilation-dir=." ]
+     }
+-    if (!is_win) {
++    if (!is_win && !is_bsd) {
+       # We don't use clang -cc1as on Windows (yet? https://crbug.com/762167)
+       asmflags = [ "-Wa,-fdebug-compilation-dir,." ]
+     }
+@@ -1650,7 +1650,7 @@ config("default_warnings") {
+         cflags += [ "-Wno-null-pointer-subtraction" ]
+       }
+ 
+-      if (current_toolchain == host_toolchain || !use_xcode_clang) {
++      if ((current_toolchain == host_toolchain || !use_xcode_clang) && !is_bsd) {
+         # Flags Xcode 9.2 (Clang clang-900.0.39.2) does not recognize.
+         cflags += [
+           "-Wenum-compare-conditional",
+@@ -1904,7 +1904,7 @@ config("thin_archive") {
+   # archives.
+   # TODO(crbug.com/1221615): Enable on is_apple if use_lld once that no longer
+   # confuses lldb.
+-  if ((is_posix && !is_nacl && !is_apple) || is_fuchsia) {
++  if ((is_posix && !is_nacl && !is_apple && !is_bsd) || is_fuchsia) {
+     arflags = [ "-T" ]
+   } else if (is_win && use_lld) {
+     arflags = [ "/llvmlibthin" ]
+@@ -2404,7 +2404,7 @@ config("symbols") {
+     # flag, so we can use use -g1 for pnacl and nacl-clang compiles.
+     # gcc nacl is is_nacl && !is_clang, pnacl and nacl-clang are && is_clang.
+     if (!is_nacl || is_clang) {
+-      cflags += [ "-g2" ]
++      cflags += [ "-g0" ]
+     }
+ 
+     if (!is_nacl && is_clang && !is_tsan && !is_asan) {
+@@ -2439,7 +2439,7 @@ config("symbols") {
+     # DWARF info may be corrupt; offsets in a range list entry are in different
+     # sections" there.  Maybe just a bug in nacl_switch_32.S.
+     if (!is_apple && !is_nacl && current_cpu != "x86" &&
+-        (use_gold || use_lld)) {
++        (use_gold || use_lld) && !is_bsd) {
+       if (is_clang) {
+         # This flag enables the GNU-format pubnames and pubtypes sections,
+         # which lld needs in order to generate a correct GDB index.
+@@ -2452,7 +2452,7 @@ config("symbols") {
+   }
+ 
+   if (is_clang && !is_nacl && !use_xcode_clang) {
+-    if (is_apple) {
++    if (is_apple || is_bsd) {
+       # TODO(https://crbug.com/1050118): Investigate missing debug info on mac.
+       # Make sure we don't use constructor homing on mac.
+       cflags += [
diff --git a/lang/v8-beta/files/patch-build_config_compiler_compiler.gni b/lang/v8-beta/files/patch-build_config_compiler_compiler.gni
new file mode 100644
index 000000000000..b40ee50f0b69
--- /dev/null
+++ b/lang/v8-beta/files/patch-build_config_compiler_compiler.gni
@@ -0,0 +1,11 @@
+--- build/config/compiler/compiler.gni.orig	2021-10-13 07:49:03 UTC
++++ build/config/compiler/compiler.gni
+@@ -205,7 +205,7 @@ declare_args() {
+ 
+ declare_args() {
+   # Whether to use the gold linker from binutils instead of lld or bfd.
+-  use_gold = !use_lld && !(is_chromecast && is_linux &&
++  use_gold = !use_lld && !is_bsd && !(is_chromecast && is_linux &&
+                            (current_cpu == "arm" || current_cpu == "mipsel")) &&
+              (((is_linux || is_chromeos_lacros) &&
+                (current_cpu == "x64" || current_cpu == "x86" ||
diff --git a/lang/v8-beta/files/patch-build_config_features.gni b/lang/v8-beta/files/patch-build_config_features.gni
new file mode 100644
index 000000000000..4469d4f06273
--- /dev/null
+++ b/lang/v8-beta/files/patch-build_config_features.gni
@@ -0,0 +1,11 @@
+--- build/config/features.gni.orig	2020-09-19 19:50:44 UTC
++++ build/config/features.gni
+@@ -26,7 +26,7 @@ declare_args() {
+   proprietary_codecs = is_chrome_branded || is_chromecast
+ 
+   # libudev usage. This currently only affects the content layer.
+-  use_udev = (is_linux || is_chromeos) && !is_chromecast
++  use_udev = (is_linux || is_chromeos) && !is_chromecast && !is_bsd
+ 
+   use_dbus = (is_linux || is_chromeos) && !is_chromecast
+ 
diff --git a/lang/v8-beta/files/patch-build_config_freetype_freetype.gni b/lang/v8-beta/files/patch-build_config_freetype_freetype.gni
new file mode 100644
index 000000000000..17bed01510f8
--- /dev/null
+++ b/lang/v8-beta/files/patch-build_config_freetype_freetype.gni
@@ -0,0 +1,9 @@
+--- build/config/freetype/freetype.gni.orig	2019-03-18 08:59:45 UTC
++++ build/config/freetype/freetype.gni
+@@ -10,5 +10,5 @@ declare_args() {
+   # than version 2.7.1 and have color bitmap support compiled in. WARNING:
+   # System FreeType configurations other than as described WILL INTRODUCE TEXT
+   # RENDERING AND SECURITY REGRESSIONS.
+-  use_system_freetype = false
++  use_system_freetype = true
+ }
diff --git a/lang/v8-beta/files/patch-build_config_linux_BUILD.gn b/lang/v8-beta/files/patch-build_config_linux_BUILD.gn
new file mode 100644
index 000000000000..9b9bb1d634f9
--- /dev/null
+++ b/lang/v8-beta/files/patch-build_config_linux_BUILD.gn
@@ -0,0 +1,11 @@
+--- build/config/linux/BUILD.gn.orig	2021-10-13 07:49:03 UTC
++++ build/config/linux/BUILD.gn
+@@ -39,7 +39,7 @@ config("runtime_library") {
+ 
+   if ((!(is_chromeos_ash || is_chromeos_lacros) ||
+        default_toolchain != "//build/toolchain/cros:target") &&
+-      (!use_custom_libcxx || current_cpu == "mipsel")) {
++      (!use_custom_libcxx || current_cpu == "mipsel") && !is_bsd) {
+     libs = [ "atomic" ]
+   }
+ }
diff --git a/lang/v8-beta/files/patch-build_config_linux_pkg-config.py b/lang/v8-beta/files/patch-build_config_linux_pkg-config.py
new file mode 100644
index 000000000000..8a2865a024c0
--- /dev/null
+++ b/lang/v8-beta/files/patch-build_config_linux_pkg-config.py
@@ -0,0 +1,26 @@
+--- build/config/linux/pkg-config.py.orig	2019-07-24 18:58:02 UTC
++++ build/config/linux/pkg-config.py
+@@ -59,8 +59,12 @@ def SetConfigPath(options):
+     print("You must specify an architecture via -a if using a sysroot.")
+     sys.exit(1)
+ 
+-  libdir = sysroot + '/usr/' + options.system_libdir + '/pkgconfig'
+-  libdir += ':' + sysroot + '/usr/share/pkgconfig'
++  if "linux" in sys.platform:
++    libdir = sysroot + '/libdata/' + options.system_libdir + '/pkgconfig'
++    libdir += ':' + sysroot + '/usr/share/pkgconfig'
++  elif "bsd" in sys.platform:
++    libdir = sysroot + '/libdata/pkgconfig'
++    libdir += ':' + '/usr/libdata/pkgconfig'
+   os.environ['PKG_CONFIG_LIBDIR'] = libdir
+   return libdir
+ 
+@@ -109,7 +113,7 @@ 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 "bsd" not in sys.platform:
+     print("[[],[],[],[],[]]")
+     return 0
+ 
diff --git a/lang/v8-beta/files/patch-build_config_rust.gni b/lang/v8-beta/files/patch-build_config_rust.gni
new file mode 100644
index 000000000000..b272ec620862
--- /dev/null
+++ b/lang/v8-beta/files/patch-build_config_rust.gni
@@ -0,0 +1,11 @@
+--- build/config/rust.gni.orig	2021-10-20 15:47:54 UTC
++++ build/config/rust.gni
+@@ -58,7 +58,7 @@ toolchain_has_official_rust =
+     (!is_nacl &&
+      (is_android && (current_cpu == "arm" || current_cpu == "arm64" ||
+                      current_cpu == "x64" || current_cpu == "x86"))) ||
+-    (is_linux && current_cpu == "x64")
++    (current_os == "linux" && current_cpu == "x64")
+ 
+ toolchain_has_rust = enable_rust && (toolchain_has_official_rust ||
+                                      use_unverified_rust_toolchain)
diff --git a/lang/v8-beta/files/patch-build_config_sysroot.gni b/lang/v8-beta/files/patch-build_config_sysroot.gni
new file mode 100644
index 000000000000..8b68404769fb
--- /dev/null
+++ b/lang/v8-beta/files/patch-build_config_sysroot.gni
@@ -0,0 +1,14 @@
+--- build/config/sysroot.gni.orig	2020-05-13 18:39:36 UTC
++++ build/config/sysroot.gni
+@@ -21,9 +21,9 @@ declare_args() {
+ 
+   # Controls default is_linux sysroot. If set to true, and sysroot
+   # is empty, default sysroot is calculated.
+-  use_sysroot = current_cpu == "x86" || current_cpu == "x64" ||
++  use_sysroot = !is_bsd && (current_cpu == "x86" || current_cpu == "x64" ||
+                 current_cpu == "arm" || current_cpu == "arm64" ||
+-                current_cpu == "mipsel" || current_cpu == "mips64el"
++                current_cpu == "mipsel" || current_cpu == "mips64el")
+ }
+ 
+ if (sysroot == "") {
diff --git a/lang/v8-beta/files/patch-build_detect__host__arch.py b/lang/v8-beta/files/patch-build_detect__host__arch.py
new file mode 100644
index 000000000000..588896662607
--- /dev/null
+++ b/lang/v8-beta/files/patch-build_detect__host__arch.py
@@ -0,0 +1,11 @@
+--- build/detect_host_arch.py.orig	2019-07-24 18:58:02 UTC
++++ build/detect_host_arch.py
+@@ -21,6 +21,8 @@ def HostArch():
+     host_arch = 'ia32'
+   elif host_arch in ['x86_64', 'amd64']:
+     host_arch = 'x64'
++  elif host_arch.startswith('arm64'):
++    host_arch = 'arm64'
+   elif host_arch.startswith('arm'):
+     host_arch = 'arm'
+   elif host_arch.startswith('aarch64'):
diff --git a/lang/v8-beta/files/patch-build_gn__run__binary.py b/lang/v8-beta/files/patch-build_gn__run__binary.py
new file mode 100644
index 000000000000..d9e733834b4a
--- /dev/null
+++ b/lang/v8-beta/files/patch-build_gn__run__binary.py
@@ -0,0 +1,11 @@
+--- build/gn_run_binary.py.orig	2019-07-24 18:58:02 UTC
++++ build/gn_run_binary.py
+@@ -24,7 +24,7 @@ if not os.path.isabs(path):
+ # The rest of the arguments are passed directly to the executable.
+ args = [path] + sys.argv[2:]
+ 
+-ret = subprocess.call(args)
++ret = subprocess.call(args, env={"CHROME_EXE_PATH":"${WRKSRC}/out/Release/chrome"})
+ if ret != 0:
+   if ret <= -100:
+     # Windows error codes such as 0xC0000005 and 0xC0000409 are much easier to
diff --git a/lang/v8-beta/files/patch-build_linux_chrome.map b/lang/v8-beta/files/patch-build_linux_chrome.map
new file mode 100644
index 000000000000..f540509b3054
--- /dev/null
+++ b/lang/v8-beta/files/patch-build_linux_chrome.map
@@ -0,0 +1,29 @@
+--- build/linux/chrome.map.orig	2021-05-01 21:15:31 UTC
++++ build/linux/chrome.map
+@@ -1,4 +1,7 @@
+ {
++local:
++  *;
++
+ global:
+   __bss_start;
+   __data_start;
+@@ -20,6 +23,10 @@ global:
+   # Program entry point.
+   _start;
+ 
++  # FreeBSD specific variables.
++  __progname;
++  environ;
++
+   # Memory allocation symbols.  We want chrome and any libraries to
+   # share the same heap, so it is correct to export these symbols.
+   calloc;
+@@ -83,7 +90,4 @@ global:
+   localtime_r;
+ 
+   v8dbg_*;
+-
+-local:
+-  *;
+ };
diff --git a/lang/v8-beta/files/patch-build_linux_libpci_BUILD.gn b/lang/v8-beta/files/patch-build_linux_libpci_BUILD.gn
new file mode 100644
index 000000000000..86373b5ebf39
--- /dev/null
+++ b/lang/v8-beta/files/patch-build_linux_libpci_BUILD.gn
@@ -0,0 +1,53 @@
+--- build/linux/libpci/BUILD.gn.orig	2019-03-11 22:00:52 UTC
++++ build/linux/libpci/BUILD.gn
+@@ -3,20 +3,36 @@
+ # found in the LICENSE file.
+ 
+ import("//tools/generate_library_loader/generate_library_loader.gni")
++import("//build/config/linux/pkg_config.gni")
+ 
+-# This generates a target named "libpci".
+-generate_library_loader("libpci") {
+-  name = "LibPciLoader"
+-  output_h = "libpci.h"
+-  output_cc = "libpci_loader.cc"
+-  header = "<pci/pci.h>"
++declare_args() {
++  use_system_libpci = is_bsd
++}
+ 
+-  functions = [
+-    "pci_alloc",
+-    "pci_init",
+-    "pci_cleanup",
+-    "pci_scan_bus",
+-    "pci_fill_info",
+-    "pci_lookup_name",
+-  ]
++if (use_system_libpci) {
++  pkg_config("system_libpci") {
++    packages = [ "libpci" ]
++  }
++
++  source_set("libpci") {
++    public_configs = [ ":system_libpci" ]
++  }
++
++} else {
++  # This generates a target named "libpci".
++  generate_library_loader("libpci") {
++    name = "LibPciLoader"
++    output_h = "libpci.h"
++    output_cc = "libpci_loader.cc"
++    header = "<pci/pci.h>"
++
++    functions = [
++      "pci_alloc",
++      "pci_init",
++      "pci_cleanup",
++      "pci_scan_bus",
++      "pci_fill_info",
++      "pci_lookup_name",
++    ]
++  }
+ }
diff --git a/lang/v8-beta/files/patch-build_linux_unbundle_libusb.gn b/lang/v8-beta/files/patch-build_linux_unbundle_libusb.gn
new file mode 100644
index 000000000000..1cc0b00012c6
--- /dev/null
+++ b/lang/v8-beta/files/patch-build_linux_unbundle_libusb.gn
@@ -0,0 +1,27 @@
+--- build/linux/unbundle/libusb.gn.orig	2019-03-17 01:47:13 UTC
++++ build/linux/unbundle/libusb.gn
+@@ -0,0 +1,24 @@
++# Copyright 2016 The Chromium Authors. All rights reserved.
++# Use of this source code is governed by a BSD-style license that can be
++# found in the LICENSE file.
++
++import("//build/config/linux/pkg_config.gni")
++import("//build/shim_headers.gni")
++
++pkg_config("system_libusb") {
++  packages = [ "libusb-1.0" ]
++}
++
++shim_headers("libusb_shim") {
++  root_path = "src/libusb"
++  headers = [
++    "libusb.h",
++  ]
++}
++
++source_set("libusb") {
++  deps = [
++    ":libusb_shim",
++  ]
++  public_configs = [ ":system_libusb" ]
++}
diff --git a/lang/v8-beta/files/patch-build_linux_unbundle_replace__gn__files.py b/lang/v8-beta/files/patch-build_linux_unbundle_replace__gn__files.py
new file mode 100644
index 000000000000..ca2d4fd5e12e
--- /dev/null
+++ b/lang/v8-beta/files/patch-build_linux_unbundle_replace__gn__files.py
@@ -0,0 +1,10 @@
+--- build/linux/unbundle/replace_gn_files.py.orig	2019-03-11 22:00:52 UTC
++++ build/linux/unbundle/replace_gn_files.py
+@@ -27,6 +27,7 @@ REPLACEMENTS = {
+   'libevent': 'base/third_party/libevent/BUILD.gn',
+   'libjpeg': 'third_party/libjpeg.gni',
+   'libpng': 'third_party/libpng/BUILD.gn',
++  'libusb': 'third_party/libusb/BUILD.gn',
+   'libvpx': 'third_party/libvpx/BUILD.gn',
+   'libwebp': 'third_party/libwebp/BUILD.gn',
+   'libxml': 'third_party/libxml/BUILD.gn',
diff --git a/lang/v8-beta/files/patch-build_toolchain_gcc__toolchain.gni b/lang/v8-beta/files/patch-build_toolchain_gcc__toolchain.gni
new file mode 100644
index 000000000000..528964d2bc7d
--- /dev/null
+++ b/lang/v8-beta/files/patch-build_toolchain_gcc__toolchain.gni
@@ -0,0 +1,45 @@
+--- build/toolchain/gcc_toolchain.gni.orig	2021-10-13 07:49:03 UTC
++++ build/toolchain/gcc_toolchain.gni
+@@ -48,6 +48,11 @@ if (enable_resource_allowlist_generation) {
+       "enable_resource_allowlist_generation=true does not work for target_os=$target_os")
+ }
+ 
++declare_args() {
++  extra_cxxflags = ""
++  extra_ldflags = ""
++}
++
+ # This template defines a toolchain for something that works like gcc
+ # (including clang).
+ #
+@@ -673,13 +678,23 @@ template("clang_toolchain") {
+   }
+ 
+   gcc_toolchain(target_name) {
+-    prefix = rebase_path("$clang_base_path/bin", root_build_dir)
+-    cc = "$prefix/clang"
+-    cxx = "$prefix/clang++"
+-    ld = cxx
+-    readelf = "${toolprefix}readelf"
+-    ar = "${prefix}/llvm-ar"
+-    nm = "${prefix}/llvm-nm"
++    if (is_bsd) {
++      prefix = "%%LOCALBASE%%/bin"
++      cc = "cc"
++      cxx = "c++"
++      ld = cxx
++      readelf = "${toolprefix}readelf"
++      ar = "${prefix}/ar"
++      nm = "${prefix}/nm"
++    } else {
++      prefix = rebase_path("$clang_base_path/bin", root_build_dir)
++      cc = "$prefix/clang"
++      cxx = "$prefix/clang++"
++      ld = cxx
++      readelf = "${toolprefix}readelf"
++      ar = "${prefix}/llvm-ar"
++      nm = "${prefix}/llvm-nm"
++    }
+ 
+     forward_variables_from(invoker,
+                            [
diff --git a/lang/v8-beta/files/patch-build_toolchain_get__concurrent__links.py b/lang/v8-beta/files/patch-build_toolchain_get__concurrent__links.py
new file mode 100644
index 000000000000..edf94a0e06b7
--- /dev/null
+++ b/lang/v8-beta/files/patch-build_toolchain_get__concurrent__links.py
@@ -0,0 +1,17 @@
+--- build/toolchain/get_concurrent_links.py.orig	2021-05-01 21:15:31 UTC
++++ build/toolchain/get_concurrent_links.py
+@@ -53,6 +53,14 @@ def _GetTotalMemoryInBytes():
+       return int(subprocess.check_output(['sysctl', '-n', 'hw.memsize']))
+     except Exception:
+       return 0
++  elif sys.platform.startswith('freebsd'):
++    try:
++      avail_bytes = int(subprocess.check_output(['sysctl', '-n', 'hw.physmem']))
++      # With -fuse-lld it doesn't take a lot of ram, feel free to change that
++      # 1 * ... to needed amount
++      return max(1, avail_bytes / (1 * (2 ** 30)))  # total / 4GB
++    except Exception:
++      return 1
+   # TODO(scottmg): Implement this for other platforms.
+   return 0
+ 
diff --git a/lang/v8-beta/files/patch-build_toolchain_linux_BUILD.gn b/lang/v8-beta/files/patch-build_toolchain_linux_BUILD.gn
new file mode 100644
index 000000000000..08d5cf924d40
--- /dev/null
+++ b/lang/v8-beta/files/patch-build_toolchain_linux_BUILD.gn
@@ -0,0 +1,10 @@
+--- build/toolchain/linux/BUILD.gn.orig	2021-05-01 21:15:31 UTC
++++ build/toolchain/linux/BUILD.gn
+@@ -23,7 +23,6 @@ clang_toolchain("clang_arm") {
+ }
+ 
+ clang_toolchain("clang_arm64") {
+-  toolprefix = "aarch64-linux-gnu-"
+   toolchain_args = {
+     current_cpu = "arm64"
+     current_os = "linux"
diff --git a/lang/v8-beta/files/patch-buildtools_third__party_libc++_BUILD.gn b/lang/v8-beta/files/patch-buildtools_third__party_libc++_BUILD.gn
new file mode 100644
index 000000000000..da2a4bc2e17a
--- /dev/null
+++ b/lang/v8-beta/files/patch-buildtools_third__party_libc++_BUILD.gn
@@ -0,0 +1,10 @@
+--- buildtools/third_party/libc++/BUILD.gn.orig	2021-09-19 10:01:13 UTC
++++ buildtools/third_party/libc++/BUILD.gn
+@@ -23,6 +23,7 @@ config("config") {
+     cflags += [
+       "-fPIC",
+       "-std=c++17",
++      "-I%%LOCALBASE%%/include",
+     ]
+   }
+ }
diff --git a/lang/v8-beta/files/patch-include_v8config.h b/lang/v8-beta/files/patch-include_v8config.h
new file mode 100644
index 000000000000..2a1c5e2972e9
--- /dev/null
+++ b/lang/v8-beta/files/patch-include_v8config.h
@@ -0,0 +1,21 @@
+--- include/v8config.h.orig	2021-10-06 18:22:58 UTC
++++ include/v8config.h
+@@ -338,7 +338,18 @@ path. Add it with -I<path> to the command line
+ 
+ # define V8_HAS_CPP_ATTRIBUTE_NODISCARD (V8_HAS_CPP_ATTRIBUTE(nodiscard))
+ 
++// Work around Clang bug present in 9.0.1, at least.
++//
++// Clang stores alignment as a 32-bit unsigned integer, but V8 only uses
++// V8_ASSUME_ALIGNED() for a 4GB (2^32) alignment
++// (kPtrComprIsolateRootAlignment).  As such, the alignment overflows and
++// becomes zero, triggering an internal Clang assertion that alignment must not
++// be zero.
++#if 0
+ # define V8_HAS_BUILTIN_ASSUME_ALIGNED (__has_builtin(__builtin_assume_aligned))
++#else
++# define V8_HAS_BUILTIN_ASSUME_ALIGNED 0
++#endif
+ # define V8_HAS_BUILTIN_BSWAP16 (__has_builtin(__builtin_bswap16))
+ # define V8_HAS_BUILTIN_BSWAP32 (__has_builtin(__builtin_bswap32))
+ # define V8_HAS_BUILTIN_BSWAP64 (__has_builtin(__builtin_bswap64))
diff --git a/lang/v8-beta/files/patch-src_api_api.cc b/lang/v8-beta/files/patch-src_api_api.cc
new file mode 100644
index 000000000000..056c643b5194
--- /dev/null
+++ b/lang/v8-beta/files/patch-src_api_api.cc
@@ -0,0 +1,11 @@
+--- src/api/api.cc.orig	2021-10-06 18:22:58 UTC
++++ src/api/api.cc
+@@ -5886,7 +5886,7 @@ bool v8::V8::Initialize(const int build_config) {
+   return true;
+ }
+ 
+-#if V8_OS_LINUX || V8_OS_MACOSX
++#if V8_OS_LINUX || V8_OS_MACOSX || V8_OS_OPENBSD || V8_OS_FREEBSD
+ bool TryHandleWebAssemblyTrapPosix(int sig_code, siginfo_t* info,
+                                    void* context) {
+ #if V8_ENABLE_WEBASSEMBLY && V8_TRAP_HANDLER_SUPPORTED
diff --git a/lang/v8-beta/files/patch-src_base_cpu.cc b/lang/v8-beta/files/patch-src_base_cpu.cc
new file mode 100644
index 000000000000..edded0adef06
--- /dev/null
+++ b/lang/v8-beta/files/patch-src_base_cpu.cc
@@ -0,0 +1,18 @@
+--- src/base/cpu.cc.orig	2021-10-06 18:22:58 UTC
++++ src/base/cpu.cc
+@@ -568,6 +568,7 @@ CPU::CPU()
+ 
+ #if V8_OS_LINUX
+ 
++#if V8_OS_LINUX
+   CPUInfo cpu_info;
+ 
+   // Extract implementor from the "CPU implementer" field.
+@@ -601,6 +602,7 @@ CPU::CPU()
+     }
+     delete[] part;
+   }
++#endif
+ 
+   // Extract architecture from the "CPU Architecture" field.
+   // The list is well-known, unlike the the output of
diff --git a/lang/v8-beta/files/patch-src_base_platform_platform-freebsd.cc b/lang/v8-beta/files/patch-src_base_platform_platform-freebsd.cc
new file mode 100644
index 000000000000..0af7a6ed208b
--- /dev/null
+++ b/lang/v8-beta/files/patch-src_base_platform_platform-freebsd.cc
@@ -0,0 +1,13 @@
+--- src/base/platform/platform-freebsd.cc.orig	2021-04-22 15:00:28 UTC
++++ src/base/platform/platform-freebsd.cc
+@@ -82,8 +82,8 @@ std::vector<OS::SharedLibraryAddress> OS::GetSharedLib
+             lib_name = std::string(path);
+           }
+           result.push_back(SharedLibraryAddress(
+-              lib_name, reinterpret_cast<uintptr_t>(map->kve_start),
+-              reinterpret_cast<uintptr_t>(map->kve_end)));
++              lib_name, static_cast<uintptr_t>(map->kve_start),
++              static_cast<uintptr_t>(map->kve_end)));
+         }
+ 
+         start += ssize;
diff --git a/lang/v8-beta/files/patch-src_base_platform_platform-posix.cc b/lang/v8-beta/files/patch-src_base_platform_platform-posix.cc
new file mode 100644
index 000000000000..df2cb6eb4180
--- /dev/null
+++ b/lang/v8-beta/files/patch-src_base_platform_platform-posix.cc
@@ -0,0 +1,24 @@
+--- src/base/platform/platform-posix.cc.orig	2021-10-06 18:22:58 UTC
++++ src/base/platform/platform-posix.cc
+@@ -493,7 +493,7 @@ bool OS::DiscardSystemPages(void* address, size_t size
+ 
+ // static
+ bool OS::HasLazyCommits() {
+-#if V8_OS_AIX || V8_OS_LINUX || V8_OS_MACOSX
++#if V8_OS_AIX || V8_OS_LINUX || V8_OS_MACOSX || V8_OS_FREEBSD
+   return true;
+ #else
+   // TODO(bbudge) Return true for all POSIX platforms.
+@@ -626,6 +626,12 @@ int OS::GetCurrentThreadId() {
+   return static_cast<int>(syscall(__NR_gettid));
+ #elif V8_OS_ANDROID
+   return static_cast<int>(gettid());
++#elif V8_OS_DRAGONFLYBSD || defined(__DragonFly__)
++  return static_cast<int>(lwp_gettid());
++#elif V8_OS_FREEBSD
++  return static_cast<int>(pthread_getthreadid_np());
++#elif V8_OS_NETBSD
++  return static_cast<int>(_lwp_self());
+ #elif V8_OS_AIX
+   return static_cast<int>(thread_self());
+ #elif V8_OS_FUCHSIA
diff --git a/lang/v8-beta/files/patch-src_d8_d8-posix.cc b/lang/v8-beta/files/patch-src_d8_d8-posix.cc
new file mode 100644
index 000000000000..e76ba72218e9
--- /dev/null
+++ b/lang/v8-beta/files/patch-src_d8_d8-posix.cc
@@ -0,0 +1,19 @@
+--- src/d8/d8-posix.cc.orig	2020-06-13 18:02:18 UTC
++++ src/d8/d8-posix.cc
+@@ -4,6 +4,8 @@
+ 
+ #include <errno.h>
+ #include <fcntl.h>
++#include <sys/types.h>
++#include <netinet/in.h>
+ #include <netinet/ip.h>
+ #include <signal.h>
+ #include <stdlib.h>
+@@ -12,7 +14,6 @@
*** 265 LINES SKIPPED ***