aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGoncalo Carvalho <glslang@gmail.com>2017-06-25 21:36:11 +0100
committerJussi Pakkanen <jpakkane@gmail.com>2017-06-29 11:04:57 -0400
commitbcb2556c69eddd3e34fbe89f36a23ae8821c682d (patch)
tree45267cfa29542173e82bb9bb7320f1d101701d7d
parentf12ece4547f7882027e7ebd916a5e5de13129ce8 (diff)
downloadmeson-bcb2556c69eddd3e34fbe89f36a23ae8821c682d.zip
meson-bcb2556c69eddd3e34fbe89f36a23ae8821c682d.tar.gz
meson-bcb2556c69eddd3e34fbe89f36a23ae8821c682d.tar.bz2
add project/global args and include_dirs (useful for module maps) to swift targets
-rw-r--r--mesonbuild/backend/ninjabackend.py19
-rw-r--r--test cases/swift/6 modulemap/main.swift5
-rw-r--r--test cases/swift/6 modulemap/meson.build8
-rw-r--r--test cases/swift/6 modulemap/module.modulemap5
-rw-r--r--test cases/swift/6 modulemap/mylib.c5
-rw-r--r--test cases/swift/6 modulemap/mylib.h3
-rw-r--r--test cases/swift/7 modulemap subdir/main.swift5
-rw-r--r--test cases/swift/7 modulemap subdir/meson.build6
-rw-r--r--test cases/swift/7 modulemap subdir/mylib/meson.build4
-rw-r--r--test cases/swift/7 modulemap subdir/mylib/module.modulemap5
-rw-r--r--test cases/swift/7 modulemap subdir/mylib/mylib.c5
-rw-r--r--test cases/swift/7 modulemap subdir/mylib/mylib.h3
12 files changed, 73 insertions, 0 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py
index 61b5f18..7f974ee 100644
--- a/mesonbuild/backend/ninjabackend.py
+++ b/mesonbuild/backend/ninjabackend.py
@@ -1290,7 +1290,21 @@ int dummy;
os.makedirs(self.get_target_private_dir_abs(target), exist_ok=True)
compile_args = swiftc.get_compile_only_args()
compile_args += swiftc.get_module_args(module_name)
+ compile_args += self.build.get_project_args(swiftc, target.subproject)
+ compile_args += self.build.get_global_args(swiftc)
+ for i in reversed(target.get_include_dirs()):
+ basedir = i.get_curdir()
+ for d in i.get_incdirs():
+ if d not in ('', '.'):
+ expdir = os.path.join(basedir, d)
+ else:
+ expdir = basedir
+ srctreedir = os.path.normpath(os.path.join(self.environment.get_build_dir(), self.build_to_src, expdir))
+ sargs = swiftc.get_include_args(srctreedir)
+ compile_args += sargs
link_args = swiftc.get_output_args(os.path.join(self.environment.get_build_dir(), self.get_target_filename(target)))
+ link_args += self.build.get_project_link_args(swiftc, target.subproject)
+ link_args += self.build.get_global_link_args(swiftc)
rundir = self.get_target_private_dir(target)
out_module_name = self.swift_module_file_name(target)
in_module_files = self.determine_swift_dep_modules(target)
@@ -1300,6 +1314,11 @@ int dummy;
module_includes += swiftc.get_include_args(x)
link_deps = self.get_swift_link_deps(target)
abs_link_deps = [os.path.join(self.environment.get_build_dir(), x) for x in link_deps]
+ for d in target.link_targets:
+ reldir = self.get_target_dir(d)
+ if reldir == '':
+ reldir = '.'
+ link_args += ['-L', os.path.normpath(os.path.join(self.environment.get_build_dir(), reldir))]
(rel_generated, _) = self.split_swift_generated_sources(target)
abs_generated = [os.path.join(self.environment.get_build_dir(), x) for x in rel_generated]
# We need absolute paths because swiftc needs to be invoked in a subdir
diff --git a/test cases/swift/6 modulemap/main.swift b/test cases/swift/6 modulemap/main.swift
new file mode 100644
index 0000000..1a38c25
--- /dev/null
+++ b/test cases/swift/6 modulemap/main.swift
@@ -0,0 +1,5 @@
+import mylib
+
+let num = getNumber()
+
+print("The number returned from C code is: \(num).")
diff --git a/test cases/swift/6 modulemap/meson.build b/test cases/swift/6 modulemap/meson.build
new file mode 100644
index 0000000..f1c90db
--- /dev/null
+++ b/test cases/swift/6 modulemap/meson.build
@@ -0,0 +1,8 @@
+project('mixed', 'c', 'swift')
+
+i = include_directories('.')
+lib = static_library('mylib', 'mylib.c')
+exe = executable('prog', 'main.swift',
+ include_directories : [i],
+ link_with : lib)
+test('c module', exe)
diff --git a/test cases/swift/6 modulemap/module.modulemap b/test cases/swift/6 modulemap/module.modulemap
new file mode 100644
index 0000000..5aab62e
--- /dev/null
+++ b/test cases/swift/6 modulemap/module.modulemap
@@ -0,0 +1,5 @@
+module mylib [extern_c] {
+ header "mylib.h"
+ link "mylib"
+ export *
+}
diff --git a/test cases/swift/6 modulemap/mylib.c b/test cases/swift/6 modulemap/mylib.c
new file mode 100644
index 0000000..e091836
--- /dev/null
+++ b/test cases/swift/6 modulemap/mylib.c
@@ -0,0 +1,5 @@
+#include"mylib.h"
+
+int getNumber() {
+ return 42;
+}
diff --git a/test cases/swift/6 modulemap/mylib.h b/test cases/swift/6 modulemap/mylib.h
new file mode 100644
index 0000000..21bd9eb
--- /dev/null
+++ b/test cases/swift/6 modulemap/mylib.h
@@ -0,0 +1,3 @@
+#pragma once
+
+int getNumber();
diff --git a/test cases/swift/7 modulemap subdir/main.swift b/test cases/swift/7 modulemap subdir/main.swift
new file mode 100644
index 0000000..1a38c25
--- /dev/null
+++ b/test cases/swift/7 modulemap subdir/main.swift
@@ -0,0 +1,5 @@
+import mylib
+
+let num = getNumber()
+
+print("The number returned from C code is: \(num).")
diff --git a/test cases/swift/7 modulemap subdir/meson.build b/test cases/swift/7 modulemap subdir/meson.build
new file mode 100644
index 0000000..cd769eb
--- /dev/null
+++ b/test cases/swift/7 modulemap subdir/meson.build
@@ -0,0 +1,6 @@
+project('mixed', 'c', 'swift')
+add_project_arguments('-embed-bitcode', language : 'swift')
+subdir('mylib')
+exe = executable('prog', 'main.swift',
+ dependencies : dep)
+test('c module', exe)
diff --git a/test cases/swift/7 modulemap subdir/mylib/meson.build b/test cases/swift/7 modulemap subdir/mylib/meson.build
new file mode 100644
index 0000000..2549e2b
--- /dev/null
+++ b/test cases/swift/7 modulemap subdir/mylib/meson.build
@@ -0,0 +1,4 @@
+
+i = include_directories('.')
+lib = static_library('mylib', 'mylib.c')
+dep = declare_dependency(include_directories : i, link_with : lib)
diff --git a/test cases/swift/7 modulemap subdir/mylib/module.modulemap b/test cases/swift/7 modulemap subdir/mylib/module.modulemap
new file mode 100644
index 0000000..5aab62e
--- /dev/null
+++ b/test cases/swift/7 modulemap subdir/mylib/module.modulemap
@@ -0,0 +1,5 @@
+module mylib [extern_c] {
+ header "mylib.h"
+ link "mylib"
+ export *
+}
diff --git a/test cases/swift/7 modulemap subdir/mylib/mylib.c b/test cases/swift/7 modulemap subdir/mylib/mylib.c
new file mode 100644
index 0000000..e091836
--- /dev/null
+++ b/test cases/swift/7 modulemap subdir/mylib/mylib.c
@@ -0,0 +1,5 @@
+#include"mylib.h"
+
+int getNumber() {
+ return 42;
+}
diff --git a/test cases/swift/7 modulemap subdir/mylib/mylib.h b/test cases/swift/7 modulemap subdir/mylib/mylib.h
new file mode 100644
index 0000000..21bd9eb
--- /dev/null
+++ b/test cases/swift/7 modulemap subdir/mylib/mylib.h
@@ -0,0 +1,3 @@
+#pragma once
+
+int getNumber();