vcpkg/ports/v8/portfile.cmake
JonLiu1993 159ceab8d9
[v8] Get WINDOWS_SDK error log from portfile.cmake (#38390)
Fixes comments:
https://github.com/microsoft/vcpkg/issues/15351#issuecomment-752072575

v8 errors regarding the SDK are currently reported from upstream GN,
this error message should be reported in portfile.cmake rather than in
the failure log. Adding judgment print messages makes it easier to view
errors.

- [x] Changes comply with the [maintainer
guide](https://github.com/microsoft/vcpkg-docs/blob/main/vcpkg/contributing/maintainer-guide.md).
- [ ] ~~SHA512s are updated for each updated download.~~
- [ ] ~~The "supports" clause reflects platforms that may be fixed by
this new version.~~
- [ ] ~~Any fixed [CI
baseline](https://github.com/microsoft/vcpkg/blob/master/scripts/ci.baseline.txt)
entries are removed from that file.~~
- [ ] ~~Any patches that are no longer applied are deleted from the
port's directory.~~
- [x] The version database is fixed by rerunning `./vcpkg x-add-version
--all` and committing the result.
- [x] Only one version is added to each modified port's versions file.

---------

Co-authored-by: Jon <v-zhli17@microsoft.com>
2024-04-26 13:19:04 -04:00

210 lines
9.2 KiB
CMake

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(WIN32)
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(WIN32)
string(REGEX REPLACE "\\\\+$" "" WindowsSdkDir $ENV{WindowsSdkDir})
file(APPEND "${SOURCE_PATH}/build/config/gclient_args.gni" "windows_sdk_path = \"${WindowsSdkDir}\"\n")
endif()
if(UNIX)
set(UNIX_CURRENT_INSTALLED_DIR ${CURRENT_INSTALLED_DIR})
set(LIBS "-ldl -lpthread")
set(REQUIRES ", gmodule-2.0, gobject-2.0, gthread-2.0")
elseif(WIN32)
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)