summaryrefslogtreecommitdiffstats
path: root/osdep/mac/meson.build
diff options
context:
space:
mode:
Diffstat (limited to 'osdep/mac/meson.build')
-rw-r--r--osdep/mac/meson.build63
1 files changed, 63 insertions, 0 deletions
diff --git a/osdep/mac/meson.build b/osdep/mac/meson.build
new file mode 100644
index 0000000000..8ddbdbaddf
--- /dev/null
+++ b/osdep/mac/meson.build
@@ -0,0 +1,63 @@
+# custom swift targets
+bridge = join_paths(source_root, 'osdep/mac/app_bridge_objc.h')
+header = join_paths(build_root, 'osdep/mac/swift.h')
+module = join_paths(build_root, 'osdep/mac/swift.swiftmodule')
+target = join_paths(build_root, 'osdep/mac/swift.o')
+
+swift_flags = ['-frontend', '-c', '-sdk', macos_sdk_path,
+ '-enable-objc-interop', '-emit-objc-header', '-parse-as-library']
+
+if swift_ver.version_compare('>=6.0')
+ swift_flags += ['-swift-version', '5']
+endif
+
+if get_option('debug')
+ swift_flags += '-g'
+endif
+
+if get_option('optimization') != '0'
+ swift_flags += '-O'
+endif
+
+if macos_cocoa_cb.allowed()
+ swift_flags += ['-D', 'HAVE_MACOS_COCOA_CB']
+endif
+
+if macos_touchbar.allowed()
+ swift_flags += ['-D', 'HAVE_MACOS_TOUCHBAR']
+endif
+
+if macos_media_player.allowed()
+ swift_flags += ['-D', 'HAVE_MACOS_MEDIA_PLAYER']
+endif
+
+extra_flags = get_option('swift-flags').split()
+swift_flags += extra_flags
+
+swift_compile = [swift_prog, swift_flags, '-module-name', 'swift',
+ '-emit-module-path', '@OUTPUT0@', '-import-objc-header', bridge,
+ '-emit-objc-header-path', '@OUTPUT1@', '-o', '@OUTPUT2@',
+ '@INPUT@', '-I.', '-I' + source_root,
+ '-I' + libplacebo.get_variable('includedir',
+ default_value: source_root / 'subprojects' / 'libplacebo' / 'src' / 'include')]
+
+swift_targets = custom_target('swift_targets',
+ input: swift_sources,
+ output: ['swift.swiftmodule', 'swift.h', 'swift.o'],
+ command: swift_compile,
+)
+sources += swift_targets
+
+swift_lib_dir_py = find_program(join_paths(tools_directory, 'macos-swift-lib-directory.py'))
+swift_lib_dir = run_command(swift_lib_dir_py, swift_prog.full_path(), check: true).stdout()
+message('Detected Swift library directory: ' + swift_lib_dir)
+
+# linker flags
+swift_link_flags = ['-L' + swift_lib_dir, '-Xlinker', '-rpath',
+ '-Xlinker', swift_lib_dir, '-rdynamic', '-Xlinker',
+ '-add_ast_path', '-Xlinker', module]
+if swift_ver.version_compare('>=5.0')
+ swift_link_flags += ['-Xlinker', '-rpath', '-Xlinker',
+ '/usr/lib/swift', '-L/usr/lib/swift']
+endif
+add_project_link_arguments(swift_link_flags, language: ['c', 'objc'])