I have a C/C++ CMake based project, and this is my build configuration today
- Mac mini with x86_64 arch
- Big Sur 11.1
- SDK 10.14 installed
- 10.14 compiled libraries
So my project is built on this 11.1 targeting 10.14. To do it I added some specifics CMake commands like that
... set(CMAKE_OSX_DEPLOYMENT_TARGET "10.14" CACHE STRING "Minimum OS X deployment version" FORCE) set(CMAKE_OSX_SYSROOT "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk") set(CMAKE_FIND_ROOT_PATH "/path/to/x86_64/10.14/library1" "/path/to/x86_64/10.14/library2" ... ) ...
And run it with
cmake -G"Xcode" ....
And now, I’d like to do the same achievement on an ARM (Silicon) based Mac (with 11.2). I mean what I’d like to do first is building a project targeting x86_64 with 10.14 SDK. The second step is to build a Universal Binary running on a >=11.2 arm64 and on a >=10.14 x86_64 Mac.
It is possible? If yes, how?
My failures (trying the first step):
I tried to add these CMake commands with the previous ones
... set(CMAKE_SYSTEM_PROCESSOR "x86_64") set(CMAKE_OSX_ARCHITECTURES "x86_64") ...
But it fails with the CMake error
The C++ compiler [...] is not able to compile a simple test program.
So after removing my
CMAKE_OSX_SYSROOT it builds with
-target arm64-apple-macos10.14 instead of x86_64-apple-macos10.14. And then fails to link, necessarily. How to solve it?
Reading Apple’s documentation, it sounds like it’s possible to do to it by manually working on Makefiles like that:
x86_app: main.c $(CC) main.c -o x86_app -target x86_64-apple-macos10.12 arm_app: main.c $(CC) main.c -o arm_app -target arm64-apple-macos11 universal_app: x86_app arm_app lipo -create -output universal_app x86_app arm_app
But how can I tell CMake to do it?
Source: Windows Questions C++