mirror of
https://github.com/microsoft/vcpkg.git
synced 2024-11-27 19:19:01 +08:00
[ryu] Fix toolchain selection on *nixes. Fix macOS build. Add support for Mingw-w64 on Windows (#31037)
* [ryu] Fix toolchain selection on *nixes. Fix macOS build. Add support for Mingw-w64 on Windows * Refactor code * Fix build type handling
This commit is contained in:
parent
8849a1a3c9
commit
d46c6ba36f
@ -1,16 +1,39 @@
|
||||
function(prepare_bazel_opts flags opts switch)
|
||||
string(STRIP ${${flags}} ${flags})
|
||||
if (${flags})
|
||||
string(REGEX REPLACE "[ ]+-" ";-" ${flags} ${${flags}})
|
||||
foreach (OPT IN LISTS ${flags})
|
||||
if (${opts})
|
||||
string(REGEX REPLACE "^([^ ]+)[ ]+\"?([^\"]+)\"?$" \\1\\2 OPT ${OPT})
|
||||
set(${opts} ${${opts}};${switch}=${OPT})
|
||||
else ()
|
||||
set(${opts} ${switch}=${OPT})
|
||||
endif ()
|
||||
endforeach ()
|
||||
set(${opts} ${${opts}} PARENT_SCOPE)
|
||||
function(bazel_build build_type)
|
||||
set(c_flags "${VCPKG_COMBINED_C_FLAGS_RELEASE}")
|
||||
set(linker_flags "${VCPKG_COMBINED_SHARED_LINKER_FLAGS_RELEASE}")
|
||||
set(log_suffix "rel")
|
||||
if (${build_type} STREQUAL "debug")
|
||||
set(c_flags "${VCPKG_COMBINED_C_FLAGS_DEBUG}")
|
||||
set(linker_flags "${VCPKG_COMBINED_SHARED_LINKER_FLAGS_DEBUG}")
|
||||
set(log_suffix "dbg")
|
||||
set(destination_modifier "/debug")
|
||||
endif ()
|
||||
|
||||
separate_arguments(conly_opts NATIVE_COMMAND "${c_flags}")
|
||||
separate_arguments(link_opts NATIVE_COMMAND "${linker_flags}")
|
||||
|
||||
if (DEFINED ENV{CC})
|
||||
list(JOIN conly_opts ":" joined_opts)
|
||||
set(ENV{BAZEL_CXXOPTS} "${joined_opts}")
|
||||
list(JOIN link_opts ":" joined_opts)
|
||||
set(ENV{BAZEL_LINKOPTS} "${joined_opts}")
|
||||
endif ()
|
||||
|
||||
list(TRANSFORM conly_opts PREPEND "--conlyopt=")
|
||||
list(TRANSFORM link_opts PREPEND "--linkopt=")
|
||||
|
||||
vcpkg_execute_build_process(
|
||||
COMMAND "${BAZEL}" --batch ${BAZEL_OUTPUT} build ${BAZEL_COMPILER} ${BAZEL_CPU} ${conly_opts} ${link_opts} --verbose_failures --strategy=CppCompile=standalone //ryu //ryu:ryu_printf
|
||||
WORKING_DIRECTORY "${SOURCE_PATH}"
|
||||
LOGNAME "build-${TARGET_TRIPLET}-${log_suffix}"
|
||||
)
|
||||
|
||||
if ("${CMAKE_STATIC_LIBRARY_SUFFIX}" STREQUAL ".lib")
|
||||
file(INSTALL "${SOURCE_PATH}/bazel-bin/ryu/ryu.lib" DESTINATION "${CURRENT_PACKAGES_DIR}${destination_modifier}/lib")
|
||||
file(INSTALL "${SOURCE_PATH}/bazel-bin/ryu/ryu_printf.lib" DESTINATION "${CURRENT_PACKAGES_DIR}${destination_modifier}/lib")
|
||||
else ()
|
||||
file(INSTALL "${SOURCE_PATH}/bazel-bin/ryu/libryu.a" DESTINATION "${CURRENT_PACKAGES_DIR}${destination_modifier}/lib")
|
||||
file(INSTALL "${SOURCE_PATH}/bazel-bin/ryu/libryu_printf.a" DESTINATION "${CURRENT_PACKAGES_DIR}${destination_modifier}/lib")
|
||||
endif ()
|
||||
endfunction()
|
||||
|
||||
@ -22,64 +45,63 @@ vcpkg_from_github(
|
||||
HEAD_REF master
|
||||
)
|
||||
|
||||
find_program(BAZEL bazel PATHS ${CURRENT_HOST_INSTALLED_DIR}/tools REQUIRED)
|
||||
get_filename_component(BAZEL_DIR ${BAZEL} DIRECTORY)
|
||||
vcpkg_add_to_path(PREPEND ${BAZEL_DIR})
|
||||
set(ENV{BAZEL_BIN_PATH} ${BAZEL})
|
||||
find_program(BAZEL bazel PATHS "${CURRENT_HOST_INSTALLED_DIR}/tools" REQUIRED)
|
||||
get_filename_component(BAZEL_DIR "${BAZEL}" DIRECTORY)
|
||||
vcpkg_add_to_path(PREPEND "${BAZEL_DIR}")
|
||||
set(ENV{BAZEL_BIN_PATH} "${BAZEL}")
|
||||
|
||||
vcpkg_cmake_get_vars(cmake_vars_file)
|
||||
include(${cmake_vars_file})
|
||||
|
||||
if (CMAKE_HOST_WIN32)
|
||||
set(ENV{BAZEL_VC} $ENV{VCInstallDir})
|
||||
if (VCPKG_DETECTED_CMAKE_SYSTEM_PROCESSOR STREQUAL x86)
|
||||
set(BAZEL_CPU --cpu=x64_x86_windows)
|
||||
elseif (VCPKG_DETECTED_CMAKE_SYSTEM_PROCESSOR STREQUAL ARM)
|
||||
set(BAZEL_CPU --cpu=x64_arm_windows)
|
||||
elseif (VCPKG_DETECTED_CMAKE_SYSTEM_PROCESSOR STREQUAL ARM64)
|
||||
set(BAZEL_CPU --cpu=x64_arm64_windows)
|
||||
include("${cmake_vars_file}")
|
||||
if (VCPKG_HOST_IS_WINDOWS)
|
||||
if (VCPKG_DETECTED_MSVC)
|
||||
set(ENV{BAZEL_VC} "$ENV{VCInstallDir}")
|
||||
elseif (VCPKG_TARGET_IS_MINGW)
|
||||
if (NOT "${VCPKG_DETECTED_CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64")
|
||||
message(FATAL_ERROR "${TARGET_TRIPLET} is not supported on Windows!")
|
||||
endif ()
|
||||
set(BAZEL_COMPILER "--compiler=mingw-gcc")
|
||||
# BAZEL_SH can be propagated to the build environment using VCPKG_KEEP_ENV_VARS
|
||||
if (NOT DEFINED ENV{BAZEL_SH})
|
||||
message("BAZEL_SH is not specified, trying to guess...")
|
||||
get_filename_component(DIR "${VCPKG_DETECTED_CMAKE_C_COMPILER}" DIRECTORY)
|
||||
# Bazel expects Mingw-w64 to be installed in MSYS2 (pacman -S mingw-w64-x86_64-toolchain).
|
||||
# From BAZEL_SH it finds MSYS2 root, adds "mingw64" to the root and uses this path as the location of Mingw-w64.
|
||||
# It is also possible to use non-MSYS2 binaries with Bazel if they are installed to a directory
|
||||
# whose name ends with "mingw64", such as c:\mingw64 or c:\TDM-GCC-64\mingw64.
|
||||
string(REGEX REPLACE /mingw64/bin$ "" MSYS2_ROOT "${DIR}")
|
||||
set(ENV{BAZEL_SH} "${MSYS2_ROOT}/usr/bin/bash.exe")
|
||||
message("BAZEL_SH $ENV{BAZEL_SH}")
|
||||
endif ()
|
||||
else ()
|
||||
message(FATAL_ERROR "${TARGET_TRIPLET} is not supported!")
|
||||
endif ()
|
||||
if ("${VCPKG_DETECTED_CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86")
|
||||
set(BAZEL_CPU "--cpu=x64_x86_windows")
|
||||
elseif ("${VCPKG_DETECTED_CMAKE_SYSTEM_PROCESSOR}" STREQUAL "AMD64" OR "${VCPKG_DETECTED_CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64")
|
||||
set(BAZEL_CPU "--cpu=x64_windows")
|
||||
elseif ("${VCPKG_DETECTED_CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ARM")
|
||||
set(BAZEL_CPU "--cpu=x64_arm_windows")
|
||||
elseif ("${VCPKG_DETECTED_CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ARM64")
|
||||
set(BAZEL_CPU "--cpu=arm64_windows")
|
||||
else ()
|
||||
message(FATAL_ERROR "${TARGET_TRIPLET} is not supported!")
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
if (VCPKG_DETECTED_CMAKE_HOST_SYSTEM_NAME STREQUAL Darwin)
|
||||
set(ENV{SDKROOT} ${VCPKG_DETECTED_CMAKE_OSX_SYSROOT})
|
||||
endif ()
|
||||
|
||||
prepare_bazel_opts(VCPKG_COMBINED_C_FLAGS_RELEASE CONLY_OPTS_RELEASE --conlyopt)
|
||||
prepare_bazel_opts(VCPKG_COMBINED_C_FLAGS_DEBUG CONLY_OPTS_DEBUG --conlyopt)
|
||||
prepare_bazel_opts(VCPKG_COMBINED_STATIC_LINKER_FLAGS_RELEASE LINK_OPTS_RELEASE --linkopt)
|
||||
prepare_bazel_opts(VCPKG_COMBINED_STATIC_LINKER_FLAGS_DEBUG LINK_OPTS_DEBUG --linkopt)
|
||||
|
||||
vcpkg_execute_build_process(
|
||||
COMMAND ${BAZEL} --batch build ${BAZEL_CPU} ${CONLY_OPTS_RELEASE} ${LINK_OPTS_RELEASE} --verbose_failures --strategy=CppCompile=standalone //ryu //ryu:ryu_printf
|
||||
WORKING_DIRECTORY ${SOURCE_PATH}
|
||||
LOGNAME build-${TARGET_TRIPLET}-rel
|
||||
)
|
||||
|
||||
if (CMAKE_HOST_WIN32)
|
||||
file(INSTALL ${SOURCE_PATH}/bazel-bin/ryu/ryu.lib DESTINATION ${CURRENT_PACKAGES_DIR}/lib/)
|
||||
file(INSTALL ${SOURCE_PATH}/bazel-bin/ryu/ryu_printf.lib DESTINATION ${CURRENT_PACKAGES_DIR}/lib/)
|
||||
else ()
|
||||
file(INSTALL ${SOURCE_PATH}/bazel-bin/ryu/libryu.a DESTINATION ${CURRENT_PACKAGES_DIR}/lib/)
|
||||
file(INSTALL ${SOURCE_PATH}/bazel-bin/ryu/libryu_printf.a DESTINATION ${CURRENT_PACKAGES_DIR}/lib/)
|
||||
if (NOT DEFINED ENV{USER})
|
||||
set(ENV{USER} "root")
|
||||
set(BAZEL_OUTPUT "--output_user_root=/tmp/bazel")
|
||||
endif ()
|
||||
set(ENV{BAZEL_USE_CPP_ONLY_TOOLCHAIN} "1")
|
||||
set(ENV{CC} "${VCPKG_DETECTED_CMAKE_C_COMPILER}")
|
||||
endif ()
|
||||
|
||||
vcpkg_execute_build_process(
|
||||
COMMAND ${BAZEL} --batch build ${BAZEL_CPU} ${CONLY_OPTS_DEBUG} ${LINK_OPTS_DEBUG} --verbose_failures --strategy=CppCompile=standalone //ryu //ryu:ryu_printf
|
||||
WORKING_DIRECTORY ${SOURCE_PATH}
|
||||
LOGNAME build-${TARGET_TRIPLET}-dbg
|
||||
)
|
||||
|
||||
if (CMAKE_HOST_WIN32)
|
||||
file(INSTALL ${SOURCE_PATH}/bazel-bin/ryu/ryu.lib DESTINATION ${CURRENT_PACKAGES_DIR}/debug/lib/)
|
||||
file(INSTALL ${SOURCE_PATH}/bazel-bin/ryu/ryu_printf.lib DESTINATION ${CURRENT_PACKAGES_DIR}/debug/lib/)
|
||||
else ()
|
||||
file(INSTALL ${SOURCE_PATH}/bazel-bin/ryu/libryu.a DESTINATION ${CURRENT_PACKAGES_DIR}/debug/lib/)
|
||||
file(INSTALL ${SOURCE_PATH}/bazel-bin/ryu/libryu_printf.a DESTINATION ${CURRENT_PACKAGES_DIR}/debug/lib/)
|
||||
bazel_build("release")
|
||||
if (NOT VCPKG_BUILD_TYPE)
|
||||
bazel_build("debug")
|
||||
endif ()
|
||||
|
||||
file(INSTALL ${SOURCE_PATH}/LICENSE-Boost DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright)
|
||||
file(INSTALL ${SOURCE_PATH}/ryu/ryu.h DESTINATION ${CURRENT_PACKAGES_DIR}/include/ryu/)
|
||||
file(INSTALL ${SOURCE_PATH}/ryu/ryu2.h DESTINATION ${CURRENT_PACKAGES_DIR}/include/ryu/)
|
||||
file(INSTALL ${CMAKE_CURRENT_LIST_DIR}/ryuConfig.cmake DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT})
|
||||
file(INSTALL ${CMAKE_CURRENT_LIST_DIR}/usage DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT})
|
||||
file(INSTALL "${SOURCE_PATH}/LICENSE-Boost" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME copyright)
|
||||
file(INSTALL "${SOURCE_PATH}/ryu/ryu.h" DESTINATION "${CURRENT_PACKAGES_DIR}/include/ryu")
|
||||
file(INSTALL "${SOURCE_PATH}/ryu/ryu2.h" DESTINATION "${CURRENT_PACKAGES_DIR}/include/ryu")
|
||||
file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/ryuConfig.cmake" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
|
||||
file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
|
||||
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "ryu",
|
||||
"version": "2.0",
|
||||
"port-version": 8,
|
||||
"port-version": 9,
|
||||
"description": "Ryu generates the shortest decimal representation of a floating point number that maintains round-trip safety.",
|
||||
"homepage": "https://github.com/ulfjack/ryu",
|
||||
"dependencies": [
|
||||
|
@ -1401,9 +1401,6 @@ rtlsdr:x64-osx=fail
|
||||
rttr:arm-neon-android=fail
|
||||
rttr:arm64-android=fail
|
||||
rttr:x64-android=fail
|
||||
ryu:arm-neon-android=fail
|
||||
ryu:arm64-android=fail
|
||||
ryu:x64-android=fail
|
||||
scintilla:arm-neon-android=fail
|
||||
scintilla:arm64-android=fail
|
||||
scintilla:x64-android=fail
|
||||
|
@ -7134,7 +7134,7 @@
|
||||
},
|
||||
"ryu": {
|
||||
"baseline": "2.0",
|
||||
"port-version": 8
|
||||
"port-version": 9
|
||||
},
|
||||
"s2geometry": {
|
||||
"baseline": "0.10.0",
|
||||
|
@ -1,5 +1,10 @@
|
||||
{
|
||||
"versions": [
|
||||
{
|
||||
"git-tree": "c19f7f75e6695396873fa98b4d39512899a34fb5",
|
||||
"version": "2.0",
|
||||
"port-version": 9
|
||||
},
|
||||
{
|
||||
"git-tree": "660ffa1a7a15e75dbcff064ac704f53b8a2da880",
|
||||
"version": "2.0",
|
||||
|
Loading…
Reference in New Issue
Block a user