[Interest] macOS Big Sur ARM Build

Tor Arne Vestbø Tor.arne.Vestbo at qt.io
Wed Jun 24 18:50:27 CEST 2020


On 24 Jun 2020, at 18:28, Thiago Macieira <thiago.macieira at intel.com<mailto:thiago.macieira at intel.com>> wrote:

On Wednesday, 24 June 2020 08:50:17 PDT David M. Cotter wrote:
Apple ... said that they are still supporting carbon ... on the ARM based
Macs
wait what?

reference please?

https://developer.apple.com/documentation/xcode/porting_your_macos_apps_to_apple_silicon?language=objc


carbon is 32bit. 32bit is dead on Catalina, right? and Big Sur is
post-catalina.  so... have i missed something?

I don't think Lars used the right term when he said Carbon. Carbon.framework
definitely is non-working in 64-bit mode:

$ objdump -f /System/Library/Frameworks/Carbon.framework/Carbon

/System/Library/Frameworks/Carbon.framework/Carbon:     file format Mach-O 64-
bit x86-64

Actually, Carbon is still around, and 64-bit:

❯ otool -h /System/Library/Frameworks/Carbon.framework/Carbon

Mach header
      magic cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
 0xfeedfacf 16777223          3  0x00           6    24       2080 0x02000085

And we link to it still, due to needing a few functions from it still:

❯ git grep -e "-framework Carbon"
src/plugins/platforms/cocoa/cocoa.pro:98:LIBS += -framework AppKit -framework CoreServices -framework Carbon -framework IOKit -framework QuartzCore -framework CoreVideo -framework Metal -framework IOSurface

Undefined symbols for architecture x86_64:
  "_GetCurrentKeyModifiers", referenced from:
      QCocoaKeyMapper::queryKeyboardModifiers() in qcocoakeymapper.mm.o
  "_LMGetKbdType", referenced from:
      QCocoaKeyMapper::updateKeyboard() in qcocoakeymapper.mm.o
  "_TISCopyCurrentKeyboardInputSource", referenced from:
      QCocoaInputContext::updateLocale() in qcocoainputcontext.mm.o
      QCocoaKeyMapper::updateKeyboard() in qcocoakeymapper.mm.o
  "_TISCopyInputMethodKeyboardLayoutOverride", referenced from:
      QCocoaKeyMapper::updateKeyboard() in qcocoakeymapper.mm.o
  "_TISGetInputSourceProperty", referenced from:
      QCocoaInputContext::updateLocale() in qcocoainputcontext.mm.o
      QCocoaKeyMapper::updateKeyboard() in qcocoakeymapper.mm.o
  "_kTISPropertyInputSourceLanguages", referenced from:
      QCocoaInputContext::updateLocale() in qcocoainputcontext.mm.o
  "_kTISPropertyUnicodeKeyLayoutData", referenced from:
      QCocoaKeyMapper::updateKeyboard() in qcocoakeymapper.mm.o

What he meant is that Qt uses a number of C APIs even in 64-bit mode that used
to be loosely called "Carbon" back in the day, opposing to the Objective C
APIs called "Cocoa". Example: CoreFoundation.

Carbon is an umbrella framework for these frameworks:

❯ ls /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks
CommonPanels.framework      ImageCapture.framework      Print.framework
HIToolbox.framework         Ink.framework               SecurityHI.framework
Help.framework              OpenScripting.framework     SpeechRecognition.framework

CoreFoundation and other CoreFoo frameworks are not part of Carbon. They will persist even when Carbon is removed.

Cheers,
Tor Arne
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20200624/db4cd623/attachment.html>


More information about the Interest mailing list