aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbackends.py9
-rw-r--r--test cases/common/6 linkshared/libfile.c13
-rw-r--r--test cases/common/6 linkshared/main.c8
3 files changed, 25 insertions, 5 deletions
diff --git a/backends.py b/backends.py
index ec2ebd1..df7a2cb 100755
--- a/backends.py
+++ b/backends.py
@@ -199,14 +199,17 @@ class Backend():
return commands
- def build_target_link_arguments(self, deps):
+ def build_target_link_arguments(self, compiler, deps):
args = []
for d in deps:
if not isinstance(d, interpreter.StaticLibrary) and\
not isinstance(d, interpreter.SharedLibrary):
raise RuntimeError('Tried to link with a non-library target "%s".' % d.get_basename())
fname = self.get_target_filename(d)
- fname = './' + fname # Hack to make ldd find the library.
+ if compiler.id == 'msvc':
+ if fname.endswith('dll'):
+ fname = fname[:-3] + 'lib'
+ fname = os.path.join('.', fname) # Hack to make ldd find the library.
args.append(fname)
return args
@@ -671,7 +674,7 @@ class NinjaBackend(Backend):
for dep in target.get_external_deps():
commands += dep.get_link_flags()
dependencies = target.get_dependencies()
- commands += self.build_target_link_arguments(dependencies)
+ commands += self.build_target_link_arguments(linker, dependencies)
if self.environment.coredata.coverage:
commands += linker.get_coverage_link_flags()
dep_targets = [self.get_dependency_filename(t) for t in dependencies]
diff --git a/test cases/common/6 linkshared/libfile.c b/test cases/common/6 linkshared/libfile.c
index 6f1c172..44f7667 100644
--- a/test cases/common/6 linkshared/libfile.c
+++ b/test cases/common/6 linkshared/libfile.c
@@ -1,3 +1,14 @@
-int func() {
+#if defined _WIN32 || defined __CYGWIN__
+ #define DLL_PUBLIC __declspec(dllexport)
+#else
+ #if defined __GNUC__
+ #define DLL_PUBLIC __attribute__ ((visibility("default")))
+ #else
+ #pragma message ("Compiler does not support symbol visibility.")
+ #define DLL_PUBLIC
+ #endif
+#endif
+
+int DLL_PUBLIC func() {
return 0;
}
diff --git a/test cases/common/6 linkshared/main.c b/test cases/common/6 linkshared/main.c
index 8aadb0c..12f9c98 100644
--- a/test cases/common/6 linkshared/main.c
+++ b/test cases/common/6 linkshared/main.c
@@ -1,4 +1,10 @@
-int func();
+#if defined _WIN32 || defined __CYGWIN__
+ #define DLL_IMPORT __declspec(dllimport)
+#else
+ #define DLL_IMPORT
+#endif
+
+int DLL_IMPORT func();
int main(int argc, char **arg) {
return func();