https://github.com/frobtech created https://github.com/llvm/llvm-project/pull/211753
Use the supplied Fuchsia SDK's version_history.json to deduce the oldest API level still supported, and target that for toolchain runtimes so they'll be runtime-compatible when linked into user programs that target any SDK-supported API level. >From 110d2087f27e22c8db4beadfbe70e8e0a907f705 Mon Sep 17 00:00:00 2001 From: Roland McGrath <[email protected]> Date: Fri, 24 Jul 2026 01:41:07 -0700 Subject: [PATCH] [CMake][Fuchsia] Compile runtimes with -ffuchsia-api-level Use the supplied Fuchsia SDK's version_history.json to deduce the oldest API level still supported, and target that for toolchain runtimes so they'll be runtime-compatible when linked into user programs that target any SDK-supported API level. --- clang/cmake/caches/Fuchsia-stage2.cmake | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/clang/cmake/caches/Fuchsia-stage2.cmake b/clang/cmake/caches/Fuchsia-stage2.cmake index a2c2a83be221b..be31d68efc5bc 100644 --- a/clang/cmake/caches/Fuchsia-stage2.cmake +++ b/clang/cmake/caches/Fuchsia-stage2.cmake @@ -199,13 +199,31 @@ foreach(target aarch64-unknown-linux-gnu;armv7-unknown-linux-gnueabihf;i386-unkn endforeach() if(FUCHSIA_SDK) + # Since there is only one build of the toolchain runtimes for users doing any + # supported -ffuchsia-api-level=... build, target the oldest unretired level. + file(READ "${FUCHSIA_SDK}/version_history.json" FUCHSIA_SDK_VERSION_HISTORY) + string(JSON FUCHSIA_SDK_API_LEVEL_COUNT LENGTH "${FUCHSIA_SDK_VERSION_HISTORY}" "data" "api_levels") + math(EXPR FUCHSIA_SDK_API_LEVEL_MAXIDX "${FUCHSIA_SDK_API_LEVEL_COUNT} - 1") + set(FUCHSIA_API_LEVEL 0) + foreach(idx RANGE ${FUCHSIA_SDK_API_LEVEL_MAXIDX}) + string(JSON FUCHSIA_API_LEVEL_NAME MEMBER "${FUCHSIA_SDK_VERSION_HISTORY}" "data" "api_levels" ${idx}) + string(JSON FUCHSIA_API_LEVEL_PHASE GET "${FUCHSIA_SDK_VERSION_HISTORY}" "data" "api_levels" "${FUCHSIA_API_LEVEL_NAME}" "phase") + if(NOT "${FUCHSIA_API_LEVEL_PHASE}" STREQUAL "retired") + set(FUCHSIA_API_LEVEL_INT ${FUCHSIA_API_LEVEL_NAME}) + if(FUCHSIA_API_LEVEL EQUAL 0 OR FUCHSIA_API_LEVEL_INT LESS FUCHSIA_API_LEVEL) + set(FUCHSIA_API_LEVEL ${FUCHSIA_API_LEVEL_INT}) + endif() + endif() + endforeach() + message(STATUS "Runtimes target Fuchsia API level ${FUCHSIA_API_LEVEL}") + set(FUCHSIA_aarch64-unknown-fuchsia_NAME arm64) set(FUCHSIA_arm-unknown-fuchsia_NAME arm) set(FUCHSIA_i386-unknown-fuchsia_NAME x64) set(FUCHSIA_x86_64-unknown-fuchsia_NAME x64) set(FUCHSIA_riscv64-unknown-fuchsia_NAME riscv64) foreach(target i386-unknown-fuchsia;x86_64-unknown-fuchsia;aarch64-unknown-fuchsia;arm-unknown-fuchsia;riscv64-unknown-fuchsia) - set(FUCHSIA_${target}_COMPILER_FLAGS "--target=${target} -I${FUCHSIA_SDK}/pkg/sync/include -I${FUCHSIA_SDK}/pkg/fdio/include -fstack-size-section -fexperimental-call-graph-section") + set(FUCHSIA_${target}_COMPILER_FLAGS "--target=${target} -ffuchsia-api-level=${FUCHSIA_API_LEVEL} -I${FUCHSIA_SDK}/pkg/sync/include -I${FUCHSIA_SDK}/pkg/fdio/include -fstack-size-section -fexperimental-call-graph-section") set(FUCHSIA_${target}_LINKER_FLAGS "-L${FUCHSIA_SDK}/arch/${FUCHSIA_${target}_NAME}/lib") set(FUCHSIA_${target}_SYSROOT "${FUCHSIA_SDK}/arch/${FUCHSIA_${target}_NAME}/sysroot") endforeach() _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
