[macOS, 3.2] Add support for the Apple Silicon (ARM64) build target.
This commit is contained in:
parent
94eaeb5e84
commit
43888ebfaf
7 changed files with 58 additions and 18 deletions
10
misc/dist/osx_template.app/Contents/Info.plist
vendored
10
misc/dist/osx_template.app/Contents/Info.plist
vendored
|
@ -30,12 +30,18 @@
|
||||||
<string>$camera_usage_description</string>
|
<string>$camera_usage_description</string>
|
||||||
<key>NSHumanReadableCopyright</key>
|
<key>NSHumanReadableCopyright</key>
|
||||||
<string>$copyright</string>
|
<string>$copyright</string>
|
||||||
|
<key>CFBundleSupportedPlatforms</key>
|
||||||
|
<array>
|
||||||
|
<string>MacOSX</string>
|
||||||
|
</array>
|
||||||
|
<key>NSPrincipalClass</key>
|
||||||
|
<string>NSApplication</string>
|
||||||
<key>LSMinimumSystemVersion</key>
|
<key>LSMinimumSystemVersion</key>
|
||||||
<string>10.9.0</string>
|
<string>10.9</string>
|
||||||
<key>LSMinimumSystemVersionByArchitecture</key>
|
<key>LSMinimumSystemVersionByArchitecture</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>x86_64</key>
|
<key>x86_64</key>
|
||||||
<string>10.9.0</string>
|
<string>10.9</string>
|
||||||
</dict>
|
</dict>
|
||||||
<key>NSHighResolutionCapable</key>
|
<key>NSHighResolutionCapable</key>
|
||||||
$highres
|
$highres
|
||||||
|
|
12
misc/dist/osx_tools.app/Contents/Info.plist
vendored
12
misc/dist/osx_tools.app/Contents/Info.plist
vendored
|
@ -29,15 +29,21 @@
|
||||||
<key>NSCameraUsageDescription</key>
|
<key>NSCameraUsageDescription</key>
|
||||||
<string>Camera access is required to capture video.</string>
|
<string>Camera access is required to capture video.</string>
|
||||||
<key>NSRequiresAquaSystemAppearance</key>
|
<key>NSRequiresAquaSystemAppearance</key>
|
||||||
<false />
|
<false />
|
||||||
<key>NSHumanReadableCopyright</key>
|
<key>NSHumanReadableCopyright</key>
|
||||||
<string>© 2007-2020 Juan Linietsky, Ariel Manzur & Godot Engine contributors</string>
|
<string>© 2007-2020 Juan Linietsky, Ariel Manzur & Godot Engine contributors</string>
|
||||||
|
<key>CFBundleSupportedPlatforms</key>
|
||||||
|
<array>
|
||||||
|
<string>MacOSX</string>
|
||||||
|
</array>
|
||||||
|
<key>NSPrincipalClass</key>
|
||||||
|
<string>NSApplication</string>
|
||||||
<key>LSMinimumSystemVersion</key>
|
<key>LSMinimumSystemVersion</key>
|
||||||
<string>10.9.0</string>
|
<string>10.9</string>
|
||||||
<key>LSMinimumSystemVersionByArchitecture</key>
|
<key>LSMinimumSystemVersionByArchitecture</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>x86_64</key>
|
<key>x86_64</key>
|
||||||
<string>10.9.0</string>
|
<string>10.9</string>
|
||||||
</dict>
|
</dict>
|
||||||
<key>NSHighResolutionCapable</key>
|
<key>NSHighResolutionCapable</key>
|
||||||
<true/>
|
<true/>
|
||||||
|
|
|
@ -313,7 +313,12 @@ MyDeviceNotifications *device_notifications = nil;
|
||||||
// CameraOSX - Subclass for our camera server on OSX
|
// CameraOSX - Subclass for our camera server on OSX
|
||||||
|
|
||||||
void CameraOSX::update_feeds() {
|
void CameraOSX::update_feeds() {
|
||||||
|
#if MAC_OS_X_VERSION_MIN_REQUIRED >= 101500
|
||||||
|
AVCaptureDeviceDiscoverySession *session = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:[NSArray arrayWithObjects:AVCaptureDeviceTypeExternalUnknown, AVCaptureDeviceTypeBuiltInWideAngleCamera, nil] mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionUnspecified];
|
||||||
|
NSArray *devices = session.devices;
|
||||||
|
#else
|
||||||
NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
|
NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
|
||||||
|
#endif
|
||||||
|
|
||||||
// remove devices that are gone..
|
// remove devices that are gone..
|
||||||
for (int i = feeds.size() - 1; i >= 0; i--) {
|
for (int i = feeds.size() - 1; i >= 0; i--) {
|
||||||
|
|
|
@ -227,6 +227,9 @@ if env["builtin_opus"]:
|
||||||
env_opus.Append(CPPDEFINES=["OPUS_ARM_OPT"])
|
env_opus.Append(CPPDEFINES=["OPUS_ARM_OPT"])
|
||||||
elif "arch" in env and env["arch"] == "arm64":
|
elif "arch" in env and env["arch"] == "arm64":
|
||||||
env_opus.Append(CPPDEFINES=["OPUS_ARM64_OPT"])
|
env_opus.Append(CPPDEFINES=["OPUS_ARM64_OPT"])
|
||||||
|
elif env["platform"] == "osx":
|
||||||
|
if "arch" in env and env["arch"] == "arm64":
|
||||||
|
env_opus.Append(CPPDEFINES=["OPUS_ARM64_OPT"])
|
||||||
|
|
||||||
env_thirdparty = env_opus.Clone()
|
env_thirdparty = env_opus.Clone()
|
||||||
env_thirdparty.disable_warnings()
|
env_thirdparty.disable_warnings()
|
||||||
|
|
|
@ -230,6 +230,7 @@ else:
|
||||||
is_x11_or_server_arm = (env["platform"] == "x11" or env["platform"] == "server") and (
|
is_x11_or_server_arm = (env["platform"] == "x11" or env["platform"] == "server") and (
|
||||||
platform.machine().startswith("arm") or platform.machine().startswith("aarch")
|
platform.machine().startswith("arm") or platform.machine().startswith("aarch")
|
||||||
)
|
)
|
||||||
|
is_macos_x86 = env["platform"] == "osx" and ("arch" in env and (env["arch"] != "arm64"))
|
||||||
is_ios_x86 = env["platform"] == "iphone" and ("arch" in env and env["arch"].startswith("x86"))
|
is_ios_x86 = env["platform"] == "iphone" and ("arch" in env and env["arch"].startswith("x86"))
|
||||||
is_android_x86 = env["platform"] == "android" and env["android_arch"].startswith("x86")
|
is_android_x86 = env["platform"] == "android" and env["android_arch"].startswith("x86")
|
||||||
if is_android_x86:
|
if is_android_x86:
|
||||||
|
@ -240,14 +241,15 @@ else:
|
||||||
and (
|
and (
|
||||||
env["platform"] == "windows"
|
env["platform"] == "windows"
|
||||||
or env["platform"] == "x11"
|
or env["platform"] == "x11"
|
||||||
or env["platform"] == "osx"
|
|
||||||
or env["platform"] == "haiku"
|
or env["platform"] == "haiku"
|
||||||
|
or is_macos_x86
|
||||||
or is_android_x86
|
or is_android_x86
|
||||||
or is_ios_x86
|
or is_ios_x86
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
webm_cpu_arm = (
|
webm_cpu_arm = (
|
||||||
is_x11_or_server_arm
|
is_x11_or_server_arm
|
||||||
|
or (not is_macos_x86 and env["platform"] == "osx")
|
||||||
or (not is_ios_x86 and env["platform"] == "iphone")
|
or (not is_ios_x86 and env["platform"] == "iphone")
|
||||||
or (not is_android_x86 and env["platform"] == "android")
|
or (not is_android_x86 and env["platform"] == "android")
|
||||||
)
|
)
|
||||||
|
|
|
@ -81,8 +81,15 @@ def configure(env):
|
||||||
env["osxcross"] = True
|
env["osxcross"] = True
|
||||||
|
|
||||||
if not "osxcross" in env: # regular native build
|
if not "osxcross" in env: # regular native build
|
||||||
env.Append(CCFLAGS=["-arch", "x86_64"])
|
if env["arch"] == "arm64":
|
||||||
env.Append(LINKFLAGS=["-arch", "x86_64"])
|
print("Building for macOS 10.15+, platform arm64.")
|
||||||
|
env.Append(CCFLAGS=["-arch", "arm64", "-mmacosx-version-min=10.15", "-target", "arm64-apple-macos10.15"])
|
||||||
|
env.Append(LINKFLAGS=["-arch", "arm64", "-mmacosx-version-min=10.15", "-target", "arm64-apple-macos10.15"])
|
||||||
|
else:
|
||||||
|
print("Building for macOS 10.9+, platform x86-64.")
|
||||||
|
env.Append(CCFLAGS=["-arch", "x86_64", "-mmacosx-version-min=10.9"])
|
||||||
|
env.Append(LINKFLAGS=["-arch", "x86_64", "-mmacosx-version-min=10.9"])
|
||||||
|
|
||||||
if env["macports_clang"] != "no":
|
if env["macports_clang"] != "no":
|
||||||
mpprefix = os.environ.get("MACPORTS_PREFIX", "/opt/local")
|
mpprefix = os.environ.get("MACPORTS_PREFIX", "/opt/local")
|
||||||
mpclangver = env["macports_clang"]
|
mpclangver = env["macports_clang"]
|
||||||
|
@ -142,7 +149,8 @@ def configure(env):
|
||||||
## Dependencies
|
## Dependencies
|
||||||
|
|
||||||
if env["builtin_libtheora"]:
|
if env["builtin_libtheora"]:
|
||||||
env["x86_libtheora_opt_gcc"] = True
|
if env["arch"] != "arm64":
|
||||||
|
env["x86_libtheora_opt_gcc"] = True
|
||||||
|
|
||||||
## Flags
|
## Flags
|
||||||
|
|
||||||
|
@ -155,6 +163,7 @@ def configure(env):
|
||||||
"APPLE_STYLE_KEYS",
|
"APPLE_STYLE_KEYS",
|
||||||
"COREAUDIO_ENABLED",
|
"COREAUDIO_ENABLED",
|
||||||
"COREMIDI_ENABLED",
|
"COREMIDI_ENABLED",
|
||||||
|
"GL_SILENCE_DEPRECATION",
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
env.Append(
|
env.Append(
|
||||||
|
@ -187,6 +196,3 @@ def configure(env):
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
env.Append(LIBS=["pthread"])
|
env.Append(LIBS=["pthread"])
|
||||||
|
|
||||||
env.Append(CCFLAGS=["-mmacosx-version-min=10.9"])
|
|
||||||
env.Append(LINKFLAGS=["-mmacosx-version-min=10.9"])
|
|
||||||
|
|
|
@ -444,7 +444,7 @@ static NSCursor *cursorFromSelector(SEL selector, SEL fallback = nil) {
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface GodotContentView : NSView <NSTextInputClient> {
|
@interface GodotContentView : NSOpenGLView <NSTextInputClient> {
|
||||||
NSTrackingArea *trackingArea;
|
NSTrackingArea *trackingArea;
|
||||||
NSMutableAttributedString *markedText;
|
NSMutableAttributedString *markedText;
|
||||||
bool imeInputEventInProgress;
|
bool imeInputEventInProgress;
|
||||||
|
@ -475,7 +475,11 @@ static NSCursor *cursorFromSelector(SEL selector, SEL fallback = nil) {
|
||||||
trackingArea = nil;
|
trackingArea = nil;
|
||||||
imeInputEventInProgress = false;
|
imeInputEventInProgress = false;
|
||||||
[self updateTrackingAreas];
|
[self updateTrackingAreas];
|
||||||
|
#if MAC_OS_X_VERSION_MIN_REQUIRED >= 101400
|
||||||
|
[self registerForDraggedTypes:[NSArray arrayWithObject:NSPasteboardTypeFileURL]];
|
||||||
|
#else
|
||||||
[self registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]];
|
[self registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]];
|
||||||
|
#endif
|
||||||
markedText = [[NSMutableAttributedString alloc] init];
|
markedText = [[NSMutableAttributedString alloc] init];
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
@ -619,11 +623,19 @@ static const NSRange kEmptyRange = { NSNotFound, 0 };
|
||||||
- (BOOL)performDragOperation:(id<NSDraggingInfo>)sender {
|
- (BOOL)performDragOperation:(id<NSDraggingInfo>)sender {
|
||||||
|
|
||||||
NSPasteboard *pboard = [sender draggingPasteboard];
|
NSPasteboard *pboard = [sender draggingPasteboard];
|
||||||
|
#if MAC_OS_X_VERSION_MIN_REQUIRED >= 101400
|
||||||
|
NSArray<NSURL *> *filenames = [pboard propertyListForType:NSPasteboardTypeFileURL];
|
||||||
|
#else
|
||||||
NSArray *filenames = [pboard propertyListForType:NSFilenamesPboardType];
|
NSArray *filenames = [pboard propertyListForType:NSFilenamesPboardType];
|
||||||
|
#endif
|
||||||
|
|
||||||
Vector<String> files;
|
Vector<String> files;
|
||||||
for (NSUInteger i = 0; i < filenames.count; i++) {
|
for (NSUInteger i = 0; i < filenames.count; i++) {
|
||||||
|
#if MAC_OS_X_VERSION_MIN_REQUIRED >= 101400
|
||||||
|
NSString *ns = [[filenames objectAtIndex:i] path];
|
||||||
|
#else
|
||||||
NSString *ns = [filenames objectAtIndex:i];
|
NSString *ns = [filenames objectAtIndex:i];
|
||||||
|
#endif
|
||||||
char *utfs = strdup([ns UTF8String]);
|
char *utfs = strdup([ns UTF8String]);
|
||||||
String ret;
|
String ret;
|
||||||
ret.parse_utf8(utfs);
|
ret.parse_utf8(utfs);
|
||||||
|
@ -712,7 +724,7 @@ static void _mouseDownEvent(NSEvent *event, int index, int mask, bool pressed) {
|
||||||
const Vector2 pos = get_mouse_pos([event locationInWindow], backingScaleFactor);
|
const Vector2 pos = get_mouse_pos([event locationInWindow], backingScaleFactor);
|
||||||
mm->set_position(pos);
|
mm->set_position(pos);
|
||||||
mm->set_pressure([event pressure]);
|
mm->set_pressure([event pressure]);
|
||||||
if ([event subtype] == NSTabletPointEventSubtype) {
|
if ([event subtype] == NSEventSubtypeTabletPoint) {
|
||||||
const NSPoint p = [event tilt];
|
const NSPoint p = [event tilt];
|
||||||
mm->set_tilt(Vector2(p.x, p.y));
|
mm->set_tilt(Vector2(p.x, p.y));
|
||||||
}
|
}
|
||||||
|
@ -1600,7 +1612,7 @@ Error OS_OSX::initialize(const VideoMode &p_desired, int p_video_driver, int p_a
|
||||||
|
|
||||||
ERR_FAIL_COND_V(context == nil, ERR_UNAVAILABLE);
|
ERR_FAIL_COND_V(context == nil, ERR_UNAVAILABLE);
|
||||||
|
|
||||||
[context setView:window_view];
|
[window_view setOpenGLContext:context];
|
||||||
|
|
||||||
[context makeCurrentContext];
|
[context makeCurrentContext];
|
||||||
|
|
||||||
|
@ -1800,7 +1812,7 @@ void OS_OSX::alert(const String &p_alert, const String &p_title) {
|
||||||
[window addButtonWithTitle:@"OK"];
|
[window addButtonWithTitle:@"OK"];
|
||||||
[window setMessageText:ns_title];
|
[window setMessageText:ns_title];
|
||||||
[window setInformativeText:ns_alert];
|
[window setInformativeText:ns_alert];
|
||||||
[window setAlertStyle:NSWarningAlertStyle];
|
[window setAlertStyle:NSAlertStyleWarning];
|
||||||
|
|
||||||
// Display it, then release
|
// Display it, then release
|
||||||
[window runModal];
|
[window runModal];
|
||||||
|
@ -2686,14 +2698,14 @@ void OS_OSX::set_window_per_pixel_transparency_enabled(bool p_enabled) {
|
||||||
[window_object setBackgroundColor:[NSColor clearColor]];
|
[window_object setBackgroundColor:[NSColor clearColor]];
|
||||||
[window_object setOpaque:NO];
|
[window_object setOpaque:NO];
|
||||||
[window_object setHasShadow:NO];
|
[window_object setHasShadow:NO];
|
||||||
[context setValues:&opacity forParameter:NSOpenGLCPSurfaceOpacity];
|
[context setValues:&opacity forParameter:NSOpenGLContextParameterSurfaceOpacity];
|
||||||
layered_window = true;
|
layered_window = true;
|
||||||
} else {
|
} else {
|
||||||
GLint opacity = 1;
|
GLint opacity = 1;
|
||||||
[window_object setBackgroundColor:[NSColor colorWithCalibratedWhite:1 alpha:1]];
|
[window_object setBackgroundColor:[NSColor colorWithCalibratedWhite:1 alpha:1]];
|
||||||
[window_object setOpaque:YES];
|
[window_object setOpaque:YES];
|
||||||
[window_object setHasShadow:YES];
|
[window_object setHasShadow:YES];
|
||||||
[context setValues:&opacity forParameter:NSOpenGLCPSurfaceOpacity];
|
[context setValues:&opacity forParameter:NSOpenGLContextParameterSurfaceOpacity];
|
||||||
layered_window = false;
|
layered_window = false;
|
||||||
}
|
}
|
||||||
[context update];
|
[context update];
|
||||||
|
|
Loading…
Reference in a new issue