aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/compilers.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2016-03-16 21:55:03 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2016-03-16 21:55:03 +0200
commit19046fd8543c2c1c7b8cfc1aa6fef11741f3fc51 (patch)
treebbeb0676bbfabfb208b0ad2438c62b5cfcb0d3b0 /mesonbuild/compilers.py
parenta3004652eaa8eef877ccf009e7a6ec8e32ad3475 (diff)
downloadmeson-19046fd8543c2c1c7b8cfc1aa6fef11741f3fc51.zip
meson-19046fd8543c2c1c7b8cfc1aa6fef11741f3fc51.tar.gz
meson-19046fd8543c2c1c7b8cfc1aa6fef11741f3fc51.tar.bz2
Added new base options and some sample opts for gcc.
Diffstat (limited to 'mesonbuild/compilers.py')
-rw-r--r--mesonbuild/compilers.py81
1 files changed, 81 insertions, 0 deletions
diff --git a/mesonbuild/compilers.py b/mesonbuild/compilers.py
index f3ddf8d..4dcc256 100644
--- a/mesonbuild/compilers.py
+++ b/mesonbuild/compilers.py
@@ -66,6 +66,7 @@ msvc_buildtype_args = {'plain' : [],
gnulike_buildtype_linker_args = {}
+
if mesonlib.is_osx():
gnulike_buildtype_linker_args.update({'plain' : [],
'debug' : [],
@@ -111,6 +112,81 @@ msvc_winlibs = ['kernel32.lib', 'user32.lib', 'gdi32.lib',
'winspool.lib', 'shell32.lib', 'ole32.lib', 'oleaut32.lib',
'uuid.lib', 'comdlg32.lib', 'advapi32.lib']
+
+base_options = {'b_lto': coredata.UserBooleanOption('b_lto', 'Use link time optimization', False),
+ 'b_sanitize': coredata.UserComboOption('b_sanitize',
+ 'Code sanitizer to use',
+ ['none', 'address', 'thread', 'undefined', 'memory'],
+ 'none'),
+ 'b_lundef': coredata.UserBooleanOption('b_lundef', 'Use -Wl,--no-undefined when linking', True),
+ 'b_pgo': coredata.UserComboOption('b_pgo', 'Use profile guide optimization',
+ ['off', 'generate', 'use'],
+ 'off')
+ }
+
+def sanitizer_compile_args(value):
+ if value == 'none':
+ return []
+ args = ['-fsanitize=' + value]
+ if value == 'address':
+ args.append('-fno-omit-frame-pointer')
+ return args
+
+def sanitizer_link_args(value):
+ if value == 'none':
+ return []
+ args = ['-fsanitize=' + value]
+ return args
+
+def get_base_compile_args(options):
+ args = []
+ # FIXME, gcc/clang specific.
+ try:
+ if options['b_lto'].value:
+ args.append('-flto')
+ except KeyError:
+ pass
+ try:
+ args += sanitizer_compile_args(options['b_sanitize'].value)
+ except KeyError:
+ pass
+ try:
+ pgo_val = options['b_pgo'].value
+ if pgo_val == 'generate':
+ args.append('-fprofile-generate')
+ elif pgo_val == 'use':
+ args.append('-fprofile-use')
+ except KeyError:
+ pass
+ return args
+
+def get_base_link_args(options):
+ args = []
+ # FIXME, gcc/clang specific.
+ try:
+ if options['b_lto'].value:
+ args.append('-flto')
+ except KeyError:
+ pass
+ try:
+ args += sanitizer_link_args(options['b_sanitize'].value)
+ except KeyError:
+ pass
+ try:
+ pgo_val = options['b_pgo'].value
+ if pgo_val == 'generate':
+ args.append('-fprofile-generate')
+ elif pgo_val == 'use':
+ args.append('-fprofile-use')
+ except KeyError:
+ pass
+ try:
+ if options['b_lundef'].value:
+ args.append('-Wl,--no-undefined')
+ except KeyError:
+ pass
+ return args
+
def build_unix_rpath_args(build_dir, rpath_paths, install_rpath):
if len(rpath_paths) == 0 and len(install_rpath) == 0:
return []
@@ -147,6 +223,7 @@ class Compiler():
else:
raise TypeError('Unknown argument to Compiler')
self.version = version
+ self.base_options = []
def get_always_args(self):
return []
@@ -1293,6 +1370,7 @@ class GnuCCompiler(CCompiler):
self.warn_args = {'1': ['-Wall', '-Winvalid-pch'],
'2': ['-Wall', '-Wextra', '-Winvalid-pch'],
'3' : ['-Wall', '-Wpedantic', '-Wextra', '-Winvalid-pch']}
+ self.base_options = ['b_lto', 'b_pgo', 'b_sanitize', 'b_lundef']
def get_pic_args(self):
if self.gcc_type == GCC_MINGW:
@@ -1355,6 +1433,7 @@ class GnuObjCCompiler(ObjCCompiler):
self.warn_args = {'1': ['-Wall', '-Winvalid-pch'],
'2': ['-Wall', '-Wextra', '-Winvalid-pch'],
'3' : ['-Wall', '-Wpedantic', '-Wextra', '-Winvalid-pch']}
+ self.base_options = ['b_lto', 'b_pgo', 'b_sanitize', 'b_lundef']
def get_buildtype_args(self, buildtype):
return gnulike_buildtype_args[buildtype]
@@ -1380,6 +1459,7 @@ class GnuObjCPPCompiler(ObjCPPCompiler):
self.warn_args = {'1': ['-Wall', '-Winvalid-pch', '-Wnon-virtual-dtor'],
'2': ['-Wall', '-Wextra', '-Winvalid-pch', '-Wnon-virtual-dtor'],
'3' : ['-Wall', '-Wpedantic', '-Wextra', '-Winvalid-pch', '-Wnon-virtual-dtor']}
+ self.base_options = ['b_lto', 'b_pgo', 'b_sanitize', 'b_lundef']
def get_buildtype_args(self, buildtype):
return gnulike_buildtype_args[buildtype]
@@ -1455,6 +1535,7 @@ class GnuCPPCompiler(CPPCompiler):
self.warn_args = {'1': ['-Wall', '-Winvalid-pch', '-Wnon-virtual-dtor'],
'2': ['-Wall', '-Wextra', '-Winvalid-pch', '-Wnon-virtual-dtor'],
'3': ['-Wall', '-Wpedantic', '-Wextra', '-Winvalid-pch', '-Wnon-virtual-dtor']}
+ self.base_options = ['b_lto', 'b_pgo', 'b_sanitize', 'b_lundef']
def get_always_args(self):
return ['-pipe']