Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ryu] Fix toolchain selection on *nixes. Fix macOS build. Add support for Mingw-w64 on Windows #31037

Merged
merged 3 commits into from
May 1, 2023
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
155 changes: 90 additions & 65 deletions ports/ryu/portfile.cmake
Original file line number Diff line number Diff line change
@@ -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()

Expand All @@ -22,64 +45,66 @@ 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 ("${VCPKG_BUILD_TYPE}" STREQUAL "" OR "${VCPKG_BUILD_TYPE}" STREQUAL "release")
bazel_build("release")
endif ()

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/)
if ("${VCPKG_BUILD_TYPE}" STREQUAL "" OR "${VCPKG_BUILD_TYPE}" STREQUAL "debug")
bazel_build("debug")
endif ()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note that the only supported single-config type is "release", so transformed to a frequent pattern, this would be:

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}")
2 changes: 1 addition & 1 deletion ports/ryu/vcpkg.json
Original file line number Diff line number Diff line change
@@ -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": [
Expand Down
3 changes: 0 additions & 3 deletions scripts/ci.baseline.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1351,9 +1351,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
Expand Down
2 changes: 1 addition & 1 deletion versions/baseline.json
Original file line number Diff line number Diff line change
Expand Up @@ -7114,7 +7114,7 @@
},
"ryu": {
"baseline": "2.0",
"port-version": 8
"port-version": 9
},
"s2geometry": {
"baseline": "0.10.0",
Expand Down
5 changes: 5 additions & 0 deletions versions/r-/ryu.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
{
"versions": [
{
"git-tree": "858268791161130834449f30d145b1f44d0db48a",
"version": "2.0",
"port-version": 9
},
{
"git-tree": "660ffa1a7a15e75dbcff064ac704f53b8a2da880",
"version": "2.0",
Expand Down