td icon indicating copy to clipboard operation
td copied to clipboard

tl-parser is built and attempted to be launched when cross-compiling on macOS x86_64 -> arm64

Open kambala-decapitator opened this issue 7 months ago • 2 comments

in case of macOS cross-compiling this check is incorrect:

https://github.com/tdlib/td/blob/e894536b2f46caad93f997448d2daff9431b19dd/td/generate/CMakeLists.txt#L113

An example on a sample project that has message("CMAKE_CROSSCOMPILING=${CMAKE_CROSSCOMPILING}"), running on an Intel Mac:

> cmake -S . -B build -D CMAKE_OSX_ARCHITECTURES=arm64
...
CMAKE_CROSSCOMPILING=FALSE

also refer to https://cmake.org/cmake/help/latest/variable/CMAKE_CROSSCOMPILING.html

the error itself that appears when building dependencies of https://github.com/overtake/TelegramSwift

...
~/dev/macos/TelegramSwift/core-xprojects/tde2e
+ echo 'Building for arm64...'
Building for arm64...
+ ARM64_DIR=/Users/kambala/dev/macos/TelegramSwift/core-xprojects/tde2e/build/arm64
+ mkdir -p /Users/kambala/dev/macos/TelegramSwift/core-xprojects/tde2e/build/arm64
+ pushd /Users/kambala/dev/macos/TelegramSwift/core-xprojects/tde2e/build/arm64
~/dev/macos/TelegramSwift/core-xprojects/tde2e/build/arm64 ~/dev/macos/TelegramSwift/core-xprojects/tde2e
+ cmake /Users/kambala/dev/macos/TelegramSwift/core-xprojects/tde2e/../../submodules/telegram-ios/third-party/td/td -DCMAKE_OSX_ARCHITECTURES=arm64 -DOPENSSL_FOUND=1 -DOPENSSL_INCLUDE_DIR=/Users/kambala/dev/macos/TelegramSwift/core-xprojects/tde2e/../openssl/build/openssl/include -DCMAKE_BUILD_TYPE=Release
...
+ cmake --build . --target tde2e -j6
[  0%] Building C object td/generate/tl-parser/CMakeFiles/tl-parser.dir/tlc.c.o
[  0%] Building CXX object tdtl/CMakeFiles/tdtl.dir/td/tl/tl_config.cpp.o
[  0%] Building CXX object tdutils/generate/CMakeFiles/generate_mime_types_gperf.dir/generate_mime_types_gperf.cpp.o
[  0%] Building CXX object tdtl/CMakeFiles/tdtl.dir/td/tl/tl_core.cpp.o
[  0%] Building C object td/generate/tl-parser/CMakeFiles/tl-parser.dir/crc32.c.o
[  0%] Building C object td/generate/tl-parser/CMakeFiles/tl-parser.dir/tl-parser.c.o
[  0%] Building CXX object tdtl/CMakeFiles/tdtl.dir/td/tl/tl_file_outputer.cpp.o
[  0%] Building CXX object tdtl/CMakeFiles/tdtl.dir/td/tl/tl_file_utils.cpp.o
[  5%] Building CXX object tdtl/CMakeFiles/tdtl.dir/td/tl/tl_generate.cpp.o
[  5%] Building CXX object tdtl/CMakeFiles/tdtl.dir/td/tl/tl_outputer.cpp.o
[  5%] Building CXX object tdtl/CMakeFiles/tdtl.dir/td/tl/tl_string_outputer.cpp.o
[  5%] Linking C executable tl-parser
[  5%] Built target tl-parser
[  5%] Building CXX object tdtl/CMakeFiles/tdtl.dir/td/tl/tl_writer.cpp.o
[  5%] Generate TLO files
/bin/sh: /Users/kambala/dev/macos/TelegramSwift/core-xprojects/tde2e/build/arm64/td/generate/tl-parser/tl-parser: Bad CPU type in executable
make[3]: *** [td/generate/CMakeFiles/tl_generate_tlo] Error 126

kambala-decapitator avatar Jun 04 '25 13:06 kambala-decapitator

See https://gitlab.kitware.com/cmake/cmake/-/issues/21885#note_914655:

Setting CMAKE_OSX_ARCHITECTURES to only include foreign architectures for macOS builds is clearly a cross-compiling case, and takes explicit user action. In that case users can explicitly tell CMake they intend to cross-compile by also setting CMAKE_SYSTEM_NAME explicitly: $ cmake ... -DCMAKE_SYSTEM_NAME=Darwin -DCMAKE_OSX_ARCHITECTURES=arm64

As suggested by the cmake developers the option CMAKE_SYSTEM_NAME must be always set explicitly when CMAKE_OSX_ARCHITECTURES is set to a probably foreign architecture.

In this case all required files must be pregenerated with

cmake -S . -B build-native -DTD_GENERATE_SOURCE_FILES=ON
cmake --build build-native```

levlam avatar Jun 04 '25 14:06 levlam

thanks, opened issue in the downstream project: https://github.com/overtake/TelegramSwift/issues/1245

kambala-decapitator avatar Jun 05 '25 07:06 kambala-decapitator