gregtitus
(Greg Titus)
November 20, 2020, 8:35pm
1
Is building the Swift compiler on Apple Silicon Macs supported yet?
I'm currently seeing a failure in clang-rt attempting to build with an M1 MacBook Air:
[371/1854][ 20%][11.945s] Building C object lib/tsan/CMakeFiles/clang_rt.tsan_osx_dynamic.dir/rtl/tsan_rtl_aarch64.S.o
FAILED: lib/tsan/CMakeFiles/clang_rt.tsan_osx_dynamic.dir/rtl/tsan_rtl_aarch64.S.o
/Users/toon/GitHub/build/Ninja-ReleaseAssert/llvm-macosx-arm64/./bin/clang -Dclang_rt_tsan_osx_dynamic_EXPORTS -I/Users/toon/GitHub/llvm-project/compiler-rt/lib/tsan/.. -x c -Wall -Wno-unused-parameter -O3 -DNDEBUG -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk -fPIC -stdlib=libc++ -mmacosx-version-min=10.9 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk -fno-lto -fPIC -fno-builtin -fno-exceptions -funwind-tables -fno-stack-protector -fno-sanitize=safe-stack -fvisibility=hidden -fno-lto -O3 -gline-tables-only -Wno-gnu -Wno-variadic-macros -Wno-c99-extensions -Wno-non-virtual-dtor -fPIE -fno-rtti -Wframe-larger-than=530 -Wglobal-constructors --sysroot=. -MD -MT lib/tsan/CMakeFiles/clang_rt.tsan_osx_dynamic.dir/rtl/tsan_rtl_aarch64.S.o -MF lib/tsan/CMakeFiles/clang_rt.tsan_osx_dynamic.dir/rtl/tsan_rtl_aarch64.S.o.d -o lib/tsan/CMakeFiles/clang_rt.tsan_osx_dynamic.dir/rtl/tsan_rtl_aarch64.S.o -c /Users/toon/GitHub/llvm-project/compiler-rt/lib/tsan/rtl/tsan_rtl_aarch64.S
/Users/toon/GitHub/llvm-project/compiler-rt/lib/tsan/rtl/tsan_rtl_aarch64.S:7:1: error: expected identifier or '('
.align 2
^
1 error generated.
[380/1854][ 20%][13.385s] Building CXX object lib/tsan/CMakeFiles/clang_rt.tsan_osx_dynamic.dir/rtl/tsan_interceptors_posix.cpp.o
ninja: build stopped: subcommand failed.
[3808/3859][ 98%][2001.846s] Building CXX object tools/clang/tools/extra/clangd/CMakeFiles/obj.clangDaemon.dir/index/Background.cpp.o
FAILED: tools/clang/runtime/compiler-rt-stamps/compiler-rt-build
Any guidance - even just a "wait, that isn't supported publicly yet" would be helpful. Thanks!
Joe_Groff
(Joe Groff)
November 20, 2020, 9:36pm
2
It looks like there was a bug in some cmake workaround goop. Does this PR help?
https://github.com/apple/llvm-project/pull/2160/files
1 Like
gregtitus
(Greg Titus)
November 20, 2020, 10:57pm
3
Thanks for the pointer! Yep, that gets me past libunwind, at least.
2 Likes
gregtitus
(Greg Titus)
November 21, 2020, 2:11am
4
Looks like the next issue is some architecture confusion. It's trying to lipo together macosx/x86_64/libswiftCompatibility50.a
(which contains x86_64 and arm64) +
macosx/arm64/libswiftCompatibility50.a
(which contains arm64) +
macosx/arm64e/libswiftCompatibility50.a
(which contains arm64 and arm64e).
... and erroring because this would be multiple arm64 segments in the resulting fat library. For my own sanity I really try to avoid build system debugging, so I'll leave it for now for someone else to figure out.
2 Likes
Joe_Groff
(Joe Groff)
November 21, 2020, 2:30am
5
arm64e isn't supported for third-party code anyway, currently, so you could try just disabling building the arm64e slice.
2 Likes
I'm currently building with
utils/build-script --skip-build-benchmarks \
--skip-ios --skip-watchos --skip-tvos \
--swift-darwin-supported-archs "arm64" \
--sccache --release-debuginfo --test
as described in the Getting Started guide , the only difference being the --swift-darwin-supported-archs
option, but I'm getting a different error:
ninja: error: 'stdlib/swift-test-stdlib-macosx-x86_64',
needed by 'stdlib/CMakeFiles/swift-test-stdlib', missing and no known rule to make it
I've tracked all seemingly relevant CMake target creation code that could be related, but I'm not able to find where exactly this missing target dependency is generated. Has anyone else stumbled upon this error?
Are you building on M1? If not, it may be pulling in the host arch somewhere.
You can check what arches it's configuring by examining the CMake output: look for the part that says Architectures:
. It should only list arm64, otherwise it didn't filter others out here or it's getting pulled in by mistake elsewhere in the CMake config.
I'm building on the DTK, although I hope there should be no difference between the DTK and M1 when it comes to toolchain builds.
The Architectures:
output seems to be what one would expect
-- OS X SDK:
-- Object File Format: MACHO
-- Swift Standard Library Path: macosx
-- Version: 11.0
-- Build number: 20A2408
-- Deployment version: 10.9
-- Version min name: macosx
-- Triple name: macosx
-- Simulator: FALSE
-- Architectures: arm64
-- arm64 triple: arm64-apple-macosx
-- Module triple: arm64-apple-macos
-- arm64 Path: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk
I think I found it: try changing this default stdlib arch to arm64
. It is later used to set the stdlib dependency here , wrongly if the primary SDK arch is set wrongly.
3 Likes
Lovely, that helps indeed. Thank you so much!
I created https://github.com/apple/swift/pull/34998 to resolve this, keeping it as a draft as I'm not sure this is the best approach yet...
2 Likes
v.gorlov
(Vlad Gorlov)
February 3, 2021, 5:33pm
12
augusto2112
(Augusto Noronha)
February 24, 2021, 8:23pm
13
Hi Joe. I'm hitting the same error as @gregtitus . How do I disable building the arm64e slice?
augusto2112
(Augusto Noronha)
February 24, 2021, 9:04pm
14
Never mind, I didn't add swift-darwin-supported-archs
initially. It's working now!