Browse Source

Merge pull request #23279 from marcelofg55/osx_server

Server platform works on OS X too
Rémi Verschelde 6 years ago
parent
commit
4d9b8a98ba

+ 4 - 1
SConstruct

@@ -349,7 +349,10 @@ if selected_platform in platform_list:
         else: # always enable those errors
             env.Append(CCFLAGS=['-Werror=return-type'])
 
-    suffix = "." + selected_platform
+    if (hasattr(detect, 'get_program_suffix')):
+        suffix = "." + detect.get_program_suffix()
+    else:
+        suffix = "." + selected_platform
 
     if (env["target"] == "release"):
         if env["tools"]:

+ 1 - 1
drivers/unix/net_socket_posix.cpp

@@ -55,7 +55,7 @@
 
 #include <netinet/tcp.h>
 
-#if defined(OSX_ENABLED) || defined(IPHONE_ENABLED)
+#if defined(__APPLE__)
 #define MSG_NOSIGNAL SO_NOSIGPIPE
 #endif
 

+ 4 - 0
platform/osx/os_osx.h

@@ -74,8 +74,12 @@ public:
 
 	IP_Unix *ip_unix;
 
+#ifdef COREAUDIO_ENABLED
 	AudioDriverCoreAudio audio_driver;
+#endif
+#ifdef COREMIDI_ENABLED
 	MIDIDriverCoreMidi midi_driver;
+#endif
 
 	InputDefault *input;
 	JoypadOSX *joypad_osx;

+ 4 - 0
platform/osx/os_osx.mm

@@ -1408,7 +1408,9 @@ Error OS_OSX::initialize(const VideoMode &p_desired, int p_video_driver, int p_a
 
 void OS_OSX::finalize() {
 
+#ifdef COREMIDI_ENABLED
 	midi_driver.close();
+#endif
 
 	CFNotificationCenterRemoveObserver(CFNotificationCenterGetDistributedCenter(), NULL, kTISNotifySelectedKeyboardInputSourceChanged, NULL);
 	CGDisplayRemoveReconfigurationCallback(displays_arrangement_changed, NULL);
@@ -2725,7 +2727,9 @@ OS_OSX::OS_OSX() {
 		[NSApp sendEvent:event];
 	}
 
+#ifdef COREAUDIO_ENABLED
 	AudioDriverManager::add_driver(&audio_driver);
+#endif
 }
 
 bool OS_OSX::_check_internal_feature_support(const String &p_feature) {

+ 13 - 2
platform/server/SCsub

@@ -1,10 +1,21 @@
 #!/usr/bin/env python
 
+import os
+import platform
+import sys
+
 Import('env')
 
 common_server = [\
     "os_server.cpp",\
-    "#platform/x11/crash_handler_x11.cpp",
-    "#platform/x11/power_x11.cpp",
 ]
+
+if sys.platform == "darwin":
+	common_server.append("#platform/osx/crash_handler_osx.mm")
+	common_server.append("#platform/osx/power_osx.cpp")
+	common_server.append("#platform/osx/sem_osx.cpp")
+else:
+	common_server.append("#platform/x11/crash_handler_x11.cpp")
+	common_server.append("#platform/x11/power_x11.cpp")
+
 prog = env.add_program('#bin/godot_server', ['godot_server.cpp'] + common_server)

+ 11 - 1
platform/server/detect.py

@@ -11,9 +11,15 @@ def get_name():
     return "Server"
 
 
+def get_program_suffix():
+    if (sys.platform == "darwin"):
+        return "osx"
+    return "x11"
+
+
 def can_build():
 
-    if (os.name != "posix" or sys.platform == "darwin"):
+    if (os.name != "posix" or sys.platform != "darwin"):
         return False
 
     return True
@@ -147,6 +153,10 @@ def configure(env):
 
     env.Append(CPPPATH=['#platform/server'])
     env.Append(CPPFLAGS=['-DSERVER_ENABLED', '-DUNIX_ENABLED'])
+
+    if (platform.system() == "Darwin"):
+        env.Append(LINKFLAGS=['-framework', 'Cocoa', '-framework', 'Carbon', '-lz', '-framework', 'IOKit'])
+
     env.Append(LIBS=['pthread'])
 
     if (platform.system() == "Linux"):

+ 8 - 0
platform/server/os_server.cpp

@@ -68,6 +68,10 @@ void OS_Server::initialize_core() {
 	crash_handler.initialize();
 
 	OS_Unix::initialize_core();
+
+#ifdef __APPLE__
+	SemaphoreOSX::make_default();
+#endif
 }
 
 Error OS_Server::initialize(const VideoMode &p_desired, int p_video_driver, int p_audio_driver) {
@@ -87,7 +91,11 @@ Error OS_Server::initialize(const VideoMode &p_desired, int p_video_driver, int
 
 	input = memnew(InputDefault);
 
+#ifdef __APPLE__
+	power_manager = memnew(power_osx);
+#else
 	power_manager = memnew(PowerX11);
+#endif
 
 	_ensure_user_data_dir();
 

+ 10 - 0
platform/server/os_server.h

@@ -34,8 +34,14 @@
 #include "drivers/rtaudio/audio_driver_rtaudio.h"
 #include "drivers/unix/os_unix.h"
 #include "main/input_default.h"
+#ifdef __APPLE__
+#include "platform/osx/crash_handler_osx.h"
+#include "platform/osx/power_osx.h"
+#include "platform/osx/sem_osx.h"
+#else
 #include "platform/x11/crash_handler_x11.h"
 #include "platform/x11/power_x11.h"
+#endif
 #include "servers/audio_server.h"
 #include "servers/visual/rasterizer.h"
 #include "servers/visual_server.h"
@@ -61,7 +67,11 @@ class OS_Server : public OS_Unix {
 
 	InputDefault *input;
 
+#ifdef __APPLE__
+	power_osx *power_manager;
+#else
 	PowerX11 *power_manager;
+#endif
 
 	CrashHandler crash_handler;
 

+ 4 - 1
platform/server/platform_config.h

@@ -28,10 +28,13 @@
 /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                */
 /*************************************************************************/
 
-#ifdef __linux__
+#if defined(__linux__) || defined(__APPLE__)
 #include <alloca.h>
 #endif
 #if defined(__FreeBSD__) || defined(__OpenBSD__)
 #include <stdlib.h>
 #define PTHREAD_BSD_SET_NAME
 #endif
+#ifdef __APPLE__
+#define PTHREAD_RENAME_SELF
+#endif

+ 1 - 1
thirdparty/libwebsockets/lws_config.h

@@ -174,7 +174,7 @@
 #define LWS_HAVE_MALLOC_H
 #endif
 
-#if !defined(IPHONE_ENABLED) && !defined(OSX_ENABLED) && !defined(__HAIKU__)
+#if !defined(__APPLE__) && !defined(__HAIKU__)
 #define LWS_HAVE_PIPE2
 #endif
 

+ 1 - 1
thirdparty/libwebsockets/lws_config_private.h

@@ -81,7 +81,7 @@
 
 /* Define to 1 if you have the <sys/prctl.h> header file. */
 #define LWS_HAVE_SYS_PRCTL_H
-#if defined(OSX_ENABLED) || defined(IPHONE_ENABLED) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__HAIKU__)
+#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__HAIKU__)
 #undef LWS_HAVE_SYS_PRCTL_H
 #endif