summaryrefslogtreecommitdiff
path: root/link_darwin.go
diff options
context:
space:
mode:
authorPietro Gagliardi <[email protected]>2015-12-13 02:24:43 -0500
committerPietro Gagliardi <[email protected]>2015-12-13 02:24:43 -0500
commit4760ad7c5a4f9a6db8c7adb5af8c10a27badb199 (patch)
tree56436a80eb0e9aa8c4151f8fa2555e3a76ea4d8c /link_darwin.go
parent4689c6c0ab0bfe1b8e0dec7d2d2072275022b55f (diff)
Added OS X building. Go 1.5 required because of https://github.com/golang/go/issues/9411 which affects this. Also set up proper multithreading on OS X. Currently crashes due to similar issue I've had with libui.
Diffstat (limited to 'link_darwin.go')
-rw-r--r--link_darwin.go22
1 files changed, 22 insertions, 0 deletions
diff --git a/link_darwin.go b/link_darwin.go
new file mode 100644
index 0000000..c1d1a20
--- /dev/null
+++ b/link_darwin.go
@@ -0,0 +1,22 @@
+// 13 december 2015
+
+package ui
+
+// #cgo LDFLAGS: -L${SRCDIR} -lui -framework CoreFoundation -lpthread
+// #include <CoreFoundation/CoreFoundation.h>
+// #include <pthread.h>
+// extern void _CFRunLoopSetCurrent(CFRunLoopRef);
+// extern pthread_t _CFMainPThread;
+import "C"
+
+// OS X cares very deeply if we don't run on the very first thread the OS creates
+// why? who knows. it's stupid and completely indefensible. let's use undocumented APIs to get around it.
+// apple uses them too: http://www.opensource.apple.com/source/kext_tools/kext_tools-19.2/kextd_main.c?txt
+// apple HAS SUGGESTED them too: http://lists.apple.com/archives/darwin-development/2002/Sep/msg00250.html
+// gstreamer uses them too: http://cgit.freedesktop.org/gstreamer/gst-plugins-good/tree/sys/osxvideo/osxvideosink.m
+func ensureMainThread() {
+ // TODO set to nil like the apple code?
+ C._CFRunLoopSetCurrent(C.CFRunLoopGetMain())
+ // TODO is this part necessary?
+ C._CFMainPThread = C.pthread_self()
+}