Files
2026-10-04 04:07:15 +00:00

227 lines
11 KiB
Makefile

# We follow the stable channel on https://chromiumdash.appspot.com/releases?platform=Linux
# Latest stable version API: https://chromiumdash.appspot.com/fetch_releases?channel=Stable&platform=Linux&num=1&offset=0
# V8 is mirrored at https://github.com/v8/v8 (use a specific release tag, not lkgr which is a dynamic ref)
# Browse current stable branch: https://chromium.googlesource.com/v8/v8/+/refs/heads/15.4-lkgr
PORTNAME= v8
PORTVERSION= 15.4.80.20
CATEGORIES= lang
# Sub-dependencies are fetched from chromium.googlesource.com +archive endpoint
# (archives extract flat with no top-level wrapper directory)
MASTER_SITES+= https://chromium.googlesource.com/chromium/src/third_party/abseil-cpp/+archive/:absl \
https://chromium.googlesource.com/chromium/src/build/+archive/:build \
https://chromium.googlesource.com/chromium/src/buildtools/+archive/:buildtools \
https://chromium.googlesource.com/chromium/src/tools/clang/+archive/:clang \
https://chromium.googlesource.com/chromium/src/third_party/cpu_features/+archive/:cpu_features_chromium \
https://chromium.googlesource.com/external/github.com/google/cpu_features/+archive/:cpu_features \
https://chromium.googlesource.com/external/github.com/aengelke/disarm/+archive/:disarm \
https://chromium.googlesource.com/external/github.com/jk-jeon/dragonbox/+archive/:dragonbox \
https://chromium.googlesource.com/external/github.com/aengelke/fadec/+archive/:fadec \
https://chromium.googlesource.com/external/github.com/fastfloat/fast_float/+archive/:fast_float \
https://chromium.googlesource.com/external/github.com/Maratyszcza/FP16/+archive/:fp16 \
https://chromium.googlesource.com/chromium/src/third_party/fuzztest/+archive/:fuzztest \
https://chromium.googlesource.com/external/github.com/google/fuzztest/+archive/:fuzztest_src \
https://chromium.googlesource.com/external/github.com/google/googletest/+archive/:googletest \
https://chromium.googlesource.com/external/github.com/google/highway/+archive/:highway \
https://chromium.googlesource.com/chromium/deps/icu/+archive/:icu \
https://chromium.googlesource.com/external/github.com/open-source-parsers/jsoncpp/+archive/:jsoncpp \
https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxx/+archive/:libcxx \
https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxxabi/+archive/:libcxxabi \
https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libunwind/+archive/:libunwind \
https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libc/+archive/:llvm_libc \
https://chromium.googlesource.com/chromium/src/base/allocator/partition_allocator/+archive/:partition_alloc \
https://chromium.googlesource.com/chromium/src/third_party/protobuf/+archive/:protobuf \
https://chromium.googlesource.com/chromium/src/tools/protoc_wrapper/+archive/:protoc_wrapper \
https://chromium.googlesource.com/external/github.com/google/re2/+archive/:re2 \
https://chromium.googlesource.com/chromium/src/third_party/simdutf/+archive/:simdutf \
https://chromium.googlesource.com/chromium/src/third_party/zlib/+archive/:zlib
DISTFILES= ${ABSL_REV}.tar.gz:absl \
${BUILD_REV}.tar.gz:build \
${BUILDTOOLS_REV}.tar.gz:buildtools \
${CLANG_REV}.tar.gz:clang \
${CPU_FEATURES_CHROMIUM_REV}.tar.gz:cpu_features_chromium \
${CPU_FEATURES_REV}.tar.gz:cpu_features \
${DISARM_REV}.tar.gz:disarm \
${DRAGONBOX_REV}.tar.gz:dragonbox \
${FADEC_REV}.tar.gz:fadec \
${FAST_FLOAT_REV}.tar.gz:fast_float \
${FP16_REV}.tar.gz:fp16 \
${FUZZTEST_REV}.tar.gz:fuzztest \
${FUZZTEST_SRC_REV}.tar.gz:fuzztest_src \
${GOOGLETEST_REV}.tar.gz:googletest \
${HIGHWAY_REV}.tar.gz:highway \
${ICU_REV}.tar.gz:icu \
${JSONCPP_REV}.tar.gz:jsoncpp \
${LIBCXX_REV}.tar.gz:libcxx \
${LIBCXXABI_REV}.tar.gz:libcxxabi \
${LIBUNWIND_REV}.tar.gz:libunwind \
${LLVM_LIBC_REV}.tar.gz:llvm_libc \
${PARTITION_ALLOC_REV}.tar.gz:partition_alloc \
${PROTOBUF_REV}.tar.gz:protobuf \
${PROTOC_WRAPPER_REV}.tar.gz:protoc_wrapper \
${RE2_REV}.tar.gz:re2 \
${SIMDUTF_REV}.tar.gz:simdutf \
${ZLIB_REV}.tar.gz:zlib
DIST_SUBDIR= v8/${PORTVERSION:R}
EXTRACT_ONLY= ${DISTNAME}${EXTRACT_SUFX}
MAINTAINER= delphij@FreeBSD.org
COMMENT= Open source JavaScript engine by Google
WWW= https://v8.dev/
LICENSE= BSD3CLAUSE
LICENSE_FILE= ${WRKSRC}/LICENSE
ONLY_FOR_ARCHS= aarch64 amd64 i386
BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}Jinja2>=0:devel/py-Jinja2@${PY_FLAVOR} \
binutils>=0:devel/binutils \
gn:devel/gn
LIB_DEPENDS= libicudata.so:devel/icu
USES= compiler:c++20-lang cpe elfctl gnome llvm:min=20,build ninja \
pkgconfig python:build
CPE_VENDOR= google
USE_GITHUB= yes
GH_ACCOUNT= v8
GH_PROJECT= v8
USE_GNOME= glib20
USE_LDCONFIG= yes
MAKE_ARGS= -C \
out/Release
ALL_TARGET= d8 v8_shell mkgrokdump mksnapshot
# V8's JIT maps its code range read+write+execute and has no W^X mode usable
# on FreeBSD, so isolate creation aborts when kern.elf64.allow_wx=0
# (PR 271838). The kernel reads wxneeded from the main executable only, so
# consumers embedding libv8 must mark their own binaries the same way.
ELF_FEATURES= +wxneeded:out/Release/d8 +wxneeded:out/Release/mkgrokdump \
+wxneeded:out/Release/mksnapshot +wxneeded:out/Release/v8_shell
CONFLICTS_INSTALL= v8-beta
BINARY_ALIAS= python3=${PYTHON_CMD}
SUB_FILES= v8.pc v8_libbase.pc v8_libplatform.pc
SUB_LIST+= PORTVERSION=${PORTVERSION}
# Sub-dependency commit hashes from DEPS at tag ${PORTVERSION}
ABSL_REV= 435e7d977fb36fb47854a4c552c0706dad0bd7cf
BUILD_REV= fdd530b37c6cd6c8645cdfa296d209643ab2dc26
BUILDTOOLS_REV= 6f6a5dbf04b734214f3b1f386567d101ec9d607e
CLANG_REV= 450d823868eaee61e2b2cb986e19aec287f16d58
CPU_FEATURES_CHROMIUM_REV= 4974e2063946d9dd2a417c27db139fd982ff447a
CPU_FEATURES_REV= 81d13c49649f0714dd41fb56bb246398b6584085
DISARM_REV= 2d13d3f410a52daff1c5d8ef07d623332f372560
DRAGONBOX_REV= beeeef91cf6fef89a4d4ba5e95d47ca64ccb3a44
FADEC_REV= c9f78f532b9004de278489019ab2c6c28ae9746e
FAST_FLOAT_REV= 34164f547b7df3f5d794ff67e9f885c36819ebfc
FP16_REV= 782eea126dc5c755827be751a099eb01826175cf
FUZZTEST_REV= 0dcd0b87a3252a116ec59fadcfc80f2d2015bbac
FUZZTEST_SRC_REV= 94c3cf3a4391eb0bb12999128e29cbe625bad2f3
GOOGLETEST_REV= 4fe3307fb2d9f86d19777c7eb0e4809e9694dde7
HIGHWAY_REV= 2607d3b5b0113992fe84d3848859eae13b3b52c1
ICU_REV= 8cc91d9b6ab9991802fd208ee03a69714fd0251c
JSONCPP_REV= 3347a4b86bb914cb565f0cbda19c06e109513300
LIBCXX_REV= 97b436da4c33663581d394f4ee0a5977fc38c2f4
LIBCXXABI_REV= fc1897a2c12aa27e703c3ed48b62eba8abf4ce19
LIBUNWIND_REV= 45120ee2331193c3650acc9c427ed267fab31d62
LLVM_LIBC_REV= 320824188c37e5c28738b9652a0ca8087c934bc9
PARTITION_ALLOC_REV= f0d1e646eb41d8736261d5d8d8f094404bac62ac
PROTOBUF_REV= 5f8c379d1fc89fe8eee16ae560dd5e514a4608da
PROTOC_WRAPPER_REV= e9dbe1bf6a2a5d2d4973725874259eed587cf18d
RE2_REV= 972a15cedd008d846f1a39b2e88ce48d7f166cbd
SIMDUTF_REV= f7356eed293f8208c40b3c1b344a50bd70971983
ZLIB_REV= 5eb4d7ed380f214e7a0a23c18f629048d3ba9e00
# 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_base_path="${LLVM_PREFIX}" \
clang_use_chrome_plugins=false \
enable_rust=false \
extra_cxxflags="${CXXFLAGS}" \
extra_ldflags="${LDFLAGS} -Wl,--icf=none" \
is_clang=true \
icu_use_data_file=false \
is_component_build=true \
is_debug=false \
treat_warnings_as_errors=false \
use_aura=true \
use_lld=true \
use_custom_libcxx=false \
use_custom_libcxx_for_host=false \
v8_use_external_startup_data=false \
v8_enable_temporal_support=false # TC39 Temporal (Stage 3) requires Rust; disabled until supported
#OPTIONS_DEFINE= EXAMPLES
# rev:dest-subdir-under-WRKSRC pairs for sub-dependency extraction
_V8_OUTDIR= ${WRKSRC}/out/Release
post-extract:
.for dep in ${ABSL_REV}:third_party/abseil-cpp ${BUILD_REV}:build \
${BUILDTOOLS_REV}:buildtools ${CLANG_REV}:tools/clang \
${CPU_FEATURES_CHROMIUM_REV}:third_party/cpu_features \
${CPU_FEATURES_REV}:third_party/cpu_features/src \
${DISARM_REV}:third_party/disarm/src \
${DRAGONBOX_REV}:third_party/dragonbox/src \
${FADEC_REV}:third_party/fadec/src \
${FAST_FLOAT_REV}:third_party/fast_float/src \
${FP16_REV}:third_party/fp16/src ${FUZZTEST_REV}:third_party/fuzztest \
${FUZZTEST_SRC_REV}:third_party/fuzztest/src \
${GOOGLETEST_REV}:third_party/googletest/src \
${HIGHWAY_REV}:third_party/highway/src ${ICU_REV}:third_party/icu \
${JSONCPP_REV}:third_party/jsoncpp/source \
${LIBCXX_REV}:third_party/libc++/src \
${LIBCXXABI_REV}:third_party/libc++abi/src \
${LIBUNWIND_REV}:third_party/libunwind/src \
${LLVM_LIBC_REV}:third_party/llvm-libc/src \
${PARTITION_ALLOC_REV}:third_party/partition_alloc \
${PROTOBUF_REV}:third_party/protobuf \
${PROTOC_WRAPPER_REV}:tools/protoc_wrapper \
${RE2_REV}:third_party/re2/src ${SIMDUTF_REV}:third_party/simdutf \
${ZLIB_REV}:third_party/zlib
@${MKDIR} ${WRKSRC}/${dep:C/.*://}
@${TAR} -xf ${DISTDIR}/${DIST_SUBDIR}/${dep:C/:.*//}.tar.gz -C ${WRKSRC}/${dep:C/.*://}
.endfor
post-patch:
@${REINPLACE_CMD} -i '' 's|%%LOCALBASE%%|${LOCALBASE}|' ${WRKSRC}/build/toolchain/gcc_toolchain.gni
# 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} ${_V8_OUTDIR}/gen/shim_headers/icui18n_shim/third_party/icu/source/i18n/unicode \
${_V8_OUTDIR}/gen/shim_headers/icuuc_shim/third_party/icu/source/common/unicode \
${_V8_OUTDIR}/gen/include
@${CP} -R ${LOCALBASE}/include/unicode ${_V8_OUTDIR}/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
.for prog in d8 mkgrokdump mksnapshot v8_shell
${INSTALL_PROGRAM} ${_V8_OUTDIR}/${prog} ${STAGEDIR}${PREFIX}/bin/${prog}
.endfor
.for lib in libchrome_zlib.so libv8.so libv8_libbase.so libv8_libplatform.so \
libthird_party_abseil-cpp_absl.so \
libthird_party_partition_alloc_src_partition_alloc_allocator_base.so \
libthird_party_partition_alloc_src_partition_alloc_allocator_core.so \
libthird_party_partition_alloc_src_partition_alloc_allocator_shim.so
${INSTALL_LIB} ${_V8_OUTDIR}/${lib} ${STAGEDIR}${PREFIX}/lib/${lib}
.endfor
${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/
do-install-EXAMPLES-on:
${MKDIR} ${STAGEDIR}${EXAMPLESDIR}
${INSTALL_PROGRAM} ${_V8_OUTDIR}/v8_simple_* ${STAGEDIR}${EXAMPLESDIR}
.include <bsd.port.mk>