aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/build.py
diff options
context:
space:
mode:
authorNirbheek Chauhan <nirbheek@centricular.com>2016-10-05 15:58:45 +0530
committerNirbheek Chauhan <nirbheek@centricular.com>2016-10-08 01:02:13 +0530
commitee8b3b12a067c52efcfb7c05c638023fbe0495c8 (patch)
tree85deebaf86566e3ba393611c194af70a5188189d /mesonbuild/build.py
parent71eddecdc7e82b16c5e454137d641f2a5f7c9c94 (diff)
downloadmeson-ee8b3b12a067c52efcfb7c05c638023fbe0495c8.zip
meson-ee8b3b12a067c52efcfb7c05c638023fbe0495c8.tar.gz
meson-ee8b3b12a067c52efcfb7c05c638023fbe0495c8.tar.bz2
Add cross-platform PIC support for static libraries
With C/C++, on Windows you don't need to pass any arguments for a static library to be PIC. On UNIX platforms you need to pass -fPIC. Other languages such as D have compiler-specific PIC arguments required for PIC support in static libraries on UNIX platforms. This kwarg allows people to specify which static libraries should be built with PIC support. This is usually used for static libraries that will be linked into shared libraries.
Diffstat (limited to 'mesonbuild/build.py')
-rw-r--r--mesonbuild/build.py28
1 files changed, 21 insertions, 7 deletions
diff --git a/mesonbuild/build.py b/mesonbuild/build.py
index 1ef183b..a532509 100644
--- a/mesonbuild/build.py
+++ b/mesonbuild/build.py
@@ -44,12 +44,19 @@ known_basic_kwargs = {'install' : True,
'native' : True,
}
-known_shlib_kwargs = known_basic_kwargs.copy()
-known_shlib_kwargs.update({'version' : True,
- 'soversion' : True,
- 'name_prefix' : True,
- 'name_suffix' : True,
- 'vs_module_defs' : True})
+# These contain kwargs supported by both static and shared libraries. These are
+# combined here because a library() call might be shared_library() or
+# static_library() at runtime based on the configuration.
+# FIXME: Find a way to pass that info down here so we can have proper target
+# kwargs checking when specifically using shared_library() or static_library().
+known_lib_kwargs = known_basic_kwargs.copy()
+known_lib_kwargs.update({'version' : True, # Only for shared libs
+ 'soversion' : True, # Only for shared libs
+ 'name_prefix' : True,
+ 'name_suffix' : True,
+ 'vs_module_defs' : True, # Only for shared libs
+ 'pic' : True, # Only for static libs
+ })
def compilers_are_msvc(compilers):
"""
@@ -516,6 +523,10 @@ class BuildTarget():
if not isinstance(name_suffix, str):
raise InvalidArguments('Name suffix must be a string.')
self.suffix = name_suffix
+ if isinstance(self, StaticLibrary):
+ self.pic = kwargs.get('pic', False)
+ if not isinstance(self.pic, bool):
+ raise InvalidArguments('Argument pic must be boolean')
def get_subdir(self):
return self.subdir
@@ -831,6 +842,9 @@ class StaticLibrary(BuildTarget):
def type_suffix(self):
return "@sta"
+ def check_unknown_kwargs(self, kwargs):
+ self.check_unknown_kwargs_int(kwargs, known_lib_kwargs)
+
class SharedLibrary(BuildTarget):
def __init__(self, name, subdir, subproject, is_cross, sources, objects, environment, kwargs):
self.soversion = None
@@ -988,7 +1002,7 @@ class SharedLibrary(BuildTarget):
self.link_depends.append(path)
def check_unknown_kwargs(self, kwargs):
- self.check_unknown_kwargs_int(kwargs, known_shlib_kwargs)
+ self.check_unknown_kwargs_int(kwargs, known_lib_kwargs)
def get_import_filename(self):
"""