aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2019-07-02 10:52:25 -0700
committerDylan Baker <dylan@pnwbakers.com>2019-07-15 10:59:22 -0700
commit4d5c745bdc402d7fe77026631237d9f5447e1a67 (patch)
tree857d442635fba67b166261ad2d3273809b34aaef /mesonbuild
parentd483da46a97216a15588c4413694c73e53ab9659 (diff)
downloadmeson-4d5c745bdc402d7fe77026631237d9f5447e1a67.zip
meson-4d5c745bdc402d7fe77026631237d9f5447e1a67.tar.gz
meson-4d5c745bdc402d7fe77026631237d9f5447e1a67.tar.bz2
compilers: move ccrx compiler abstraction into mixins
Diffstat (limited to 'mesonbuild')
-rw-r--r--mesonbuild/compilers/__init__.py2
-rw-r--r--mesonbuild/compilers/c.py3
-rw-r--r--mesonbuild/compilers/compilers.py130
-rw-r--r--mesonbuild/compilers/cpp.py3
-rw-r--r--mesonbuild/compilers/mixins/ccrx.py148
5 files changed, 152 insertions, 134 deletions
diff --git a/mesonbuild/compilers/__init__.py b/mesonbuild/compilers/__init__.py
index ea65c21..0f0db44 100644
--- a/mesonbuild/compilers/__init__.py
+++ b/mesonbuild/compilers/__init__.py
@@ -88,7 +88,6 @@ __all__ = [
'PGIFortranCompiler',
'RustCompiler',
'CcrxCCompiler',
- 'CcrxCompiler',
'CcrxCPPCompiler',
'SunFortranCompiler',
'SwiftCompiler',
@@ -124,7 +123,6 @@ from .compilers import (
CompilerArgs,
GnuCompiler,
IntelGnuLikeCompiler,
- CcrxCompiler,
VisualStudioLikeCompiler,
IntelVisualStudioLikeCompiler,
)
diff --git a/mesonbuild/compilers/c.py b/mesonbuild/compilers/c.py
index 6fe72fb..bfd4629 100644
--- a/mesonbuild/compilers/c.py
+++ b/mesonbuild/compilers/c.py
@@ -19,7 +19,7 @@ from .. import coredata
from ..mesonlib import MachineChoice, MesonException, mlog, version_compare
from .c_function_attributes import C_FUNC_ATTRIBUTES
from .mixins.clike import CLikeCompiler
-
+from .mixins.ccrx import CcrxCompiler
from .compilers import (
gnu_winlibs,
msvc_winlibs,
@@ -33,7 +33,6 @@ from .compilers import (
IntelGnuLikeCompiler,
IntelVisualStudioLikeCompiler,
PGICompiler,
- CcrxCompiler,
VisualStudioLikeCompiler,
)
diff --git a/mesonbuild/compilers/compilers.py b/mesonbuild/compilers/compilers.py
index 8800923..edff756 100644
--- a/mesonbuild/compilers/compilers.py
+++ b/mesonbuild/compilers/compilers.py
@@ -1,4 +1,4 @@
-# Copyright 2012-2017 The Meson development team
+# Copyright 2012-2019 The Meson development team
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -169,14 +169,6 @@ arm_buildtype_args = {'plain': [],
'custom': [],
}
-ccrx_buildtype_args = {'plain': [],
- 'debug': [],
- 'debugoptimized': [],
- 'release': [],
- 'minsize': [],
- 'custom': [],
- }
-
msvc_buildtype_args = {'plain': [],
'debug': ["/ZI", "/Ob0", "/Od", "/RTC1"],
'debugoptimized': ["/Zi", "/Ob1"],
@@ -216,13 +208,6 @@ arm_buildtype_linker_args = {'plain': [],
'custom': [],
}
-ccrx_buildtype_linker_args = {'plain': [],
- 'debug': [],
- 'debugoptimized': [],
- 'release': [],
- 'minsize': [],
- 'custom': [],
- }
pgi_buildtype_linker_args = {'plain': [],
'debug': [],
'debugoptimized': [],
@@ -347,14 +332,6 @@ gnu_optimization_args = {'0': [],
's': ['-Os'],
}
-ccrx_optimization_args = {'0': ['-optimize=0'],
- 'g': ['-optimize=0'],
- '1': ['-optimize=1'],
- '2': ['-optimize=2'],
- '3': ['-optimize=max'],
- 's': ['-optimize=2', '-size']
- }
-
msvc_optimization_args = {'0': [],
'g': ['/O0'],
'1': ['/O1'],
@@ -380,9 +357,6 @@ clike_debug_args = {False: [],
msvc_debug_args = {False: [],
True: []} # Fixme!
-ccrx_debug_args = {False: [],
- True: ['-debug']}
-
base_options = {'b_pch': coredata.UserBooleanOption('Use precompiled headers', True),
'b_lto': coredata.UserBooleanOption('Use link time optimization', False),
'b_sanitize': coredata.UserComboOption('Code sanitizer to use',
@@ -2536,105 +2510,3 @@ class ArmCompiler:
parameter_list[idx] = i[:2] + os.path.normpath(os.path.join(build_dir, i[2:]))
return parameter_list
-
-class CcrxCompiler:
- def __init__(self, compiler_type):
- if not self.is_cross:
- raise EnvironmentException('ccrx supports only cross-compilation.')
- # Check whether 'rlink.exe' is available in path
- self.linker_exe = 'rlink.exe'
- args = '--version'
- try:
- p, stdo, stderr = Popen_safe(self.linker_exe, args)
- except OSError as e:
- err_msg = 'Unknown linker\nRunning "{0}" gave \n"{1}"'.format(' '.join([self.linker_exe] + [args]), e)
- raise EnvironmentException(err_msg)
- self.id = 'ccrx'
- self.compiler_type = compiler_type
- # Assembly
- self.can_compile_suffixes.update('s')
- default_warn_args = []
- self.warn_args = {'0': [],
- '1': default_warn_args,
- '2': default_warn_args + [],
- '3': default_warn_args + []}
-
- def can_linker_accept_rsp(self):
- return False
-
- def get_pic_args(self):
- # PIC support is not enabled by default for CCRX,
- # if users want to use it, they need to add the required arguments explicitly
- return []
-
- def get_buildtype_args(self, buildtype):
- return ccrx_buildtype_args[buildtype]
-
- def get_buildtype_linker_args(self, buildtype):
- return ccrx_buildtype_linker_args[buildtype]
-
- # Override CCompiler.get_std_shared_lib_link_args
- def get_std_shared_lib_link_args(self):
- return []
-
- def get_pch_suffix(self):
- return 'pch'
-
- def get_pch_use_args(self, pch_dir, header):
- return []
-
- # Override CCompiler.get_dependency_gen_args
- def get_dependency_gen_args(self, outtarget, outfile):
- return []
-
- # Override CCompiler.build_rpath_args
- def build_rpath_args(self, build_dir, from_dir, rpath_paths, build_rpath, install_rpath):
- return []
-
- def thread_flags(self, env):
- return []
-
- def thread_link_flags(self, env):
- return []
-
- def get_linker_exelist(self):
- return [self.linker_exe]
-
- def get_linker_lib_prefix(self):
- return '-lib='
-
- def get_coverage_args(self):
- return []
-
- def get_coverage_link_args(self):
- return []
-
- def get_optimization_args(self, optimization_level):
- return ccrx_optimization_args[optimization_level]
-
- def get_debug_args(self, is_debug):
- return ccrx_debug_args[is_debug]
-
- @classmethod
- def unix_args_to_native(cls, args):
- result = []
- for i in args:
- if i.startswith('-D'):
- i = '-define=' + i[2:]
- if i.startswith('-I'):
- i = '-include=' + i[2:]
- if i.startswith('-Wl,-rpath='):
- continue
- elif i == '--print-search-dirs':
- continue
- elif i.startswith('-L'):
- continue
- result.append(i)
- return result
-
- def compute_parameters_with_absolute_paths(self, parameter_list, build_dir):
- for idx, i in enumerate(parameter_list):
- if i[:9] == '-include=':
- parameter_list[idx] = i[:9] + os.path.normpath(os.path.join(build_dir, i[9:]))
-
- return parameter_list
diff --git a/mesonbuild/compilers/cpp.py b/mesonbuild/compilers/cpp.py
index ed4fc54..3a40ff8 100644
--- a/mesonbuild/compilers/cpp.py
+++ b/mesonbuild/compilers/cpp.py
@@ -32,12 +32,13 @@ from .compilers import (
PGICompiler,
ArmCompiler,
ArmclangCompiler,
- CcrxCompiler,
Compiler,
VisualStudioLikeCompiler,
)
from .c_function_attributes import CXX_FUNC_ATTRIBUTES, C_FUNC_ATTRIBUTES
from .mixins.clike import CLikeCompiler
+from .mixins.ccrx import CcrxCompiler
+
def non_msvc_eh_options(eh, args):
if eh == 'none':
diff --git a/mesonbuild/compilers/mixins/ccrx.py b/mesonbuild/compilers/mixins/ccrx.py
new file mode 100644
index 0000000..3de0256
--- /dev/null
+++ b/mesonbuild/compilers/mixins/ccrx.py
@@ -0,0 +1,148 @@
+# Copyright 2012-2019 The Meson development team
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+
+# http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Representations specific to the Renesas CC-RX compiler family."""
+
+import os
+import typing
+
+from ...mesonlib import Popen_safe
+
+ccrx_buildtype_args = {'plain': [],
+ 'debug': [],
+ 'debugoptimized': [],
+ 'release': [],
+ 'minsize': [],
+ 'custom': [],
+ }
+
+ccrx_buildtype_linker_args = {'plain': [],
+ 'debug': [],
+ 'debugoptimized': [],
+ 'release': [],
+ 'minsize': [],
+ 'custom': [],
+ }
+ccrx_optimization_args = {'0': ['-optimize=0'],
+ 'g': ['-optimize=0'],
+ '1': ['-optimize=1'],
+ '2': ['-optimize=2'],
+ '3': ['-optimize=max'],
+ 's': ['-optimize=2', '-size']
+ }
+ccrx_debug_args = {False: [],
+ True: ['-debug']}
+
+
+class CcrxCompiler:
+ def __init__(self, compiler_type):
+ if not self.is_cross:
+ raise EnvironmentException('ccrx supports only cross-compilation.')
+ # Check whether 'rlink.exe' is available in path
+ self.linker_exe = 'rlink.exe'
+ args = '--version'
+ try:
+ p, stdo, stderr = Popen_safe(self.linker_exe, args)
+ except OSError as e:
+ err_msg = 'Unknown linker\nRunning "{0}" gave \n"{1}"'.format(' '.join([self.linker_exe] + [args]), e)
+ raise EnvironmentException(err_msg)
+ self.id = 'ccrx'
+ self.compiler_type = compiler_type
+ # Assembly
+ self.can_compile_suffixes.update('s')
+ default_warn_args = []
+ self.warn_args = {'0': [],
+ '1': default_warn_args,
+ '2': default_warn_args + [],
+ '3': default_warn_args + []}
+
+ def can_linker_accept_rsp(self):
+ return False
+
+ def get_pic_args(self):
+ # PIC support is not enabled by default for CCRX,
+ # if users want to use it, they need to add the required arguments explicitly
+ return []
+
+ def get_buildtype_args(self, buildtype):
+ return ccrx_buildtype_args[buildtype]
+
+ def get_buildtype_linker_args(self, buildtype):
+ return ccrx_buildtype_linker_args[buildtype]
+
+ # Override CCompiler.get_std_shared_lib_link_args
+ def get_std_shared_lib_link_args(self):
+ return []
+
+ def get_pch_suffix(self):
+ return 'pch'
+
+ def get_pch_use_args(self, pch_dir, header):
+ return []
+
+ # Override CCompiler.get_dependency_gen_args
+ def get_dependency_gen_args(self, outtarget, outfile):
+ return []
+
+ # Override CCompiler.build_rpath_args
+ def build_rpath_args(self, build_dir, from_dir, rpath_paths, build_rpath, install_rpath):
+ return []
+
+ def thread_flags(self, env):
+ return []
+
+ def thread_link_flags(self, env):
+ return []
+
+ def get_linker_exelist(self):
+ return [self.linker_exe]
+
+ def get_linker_lib_prefix(self):
+ return '-lib='
+
+ def get_coverage_args(self):
+ return []
+
+ def get_coverage_link_args(self):
+ return []
+
+ def get_optimization_args(self, optimization_level):
+ return ccrx_optimization_args[optimization_level]
+
+ def get_debug_args(self, is_debug):
+ return ccrx_debug_args[is_debug]
+
+ @classmethod
+ def unix_args_to_native(cls, args):
+ result = []
+ for i in args:
+ if i.startswith('-D'):
+ i = '-define=' + i[2:]
+ if i.startswith('-I'):
+ i = '-include=' + i[2:]
+ if i.startswith('-Wl,-rpath='):
+ continue
+ elif i == '--print-search-dirs':
+ continue
+ elif i.startswith('-L'):
+ continue
+ result.append(i)
+ return result
+
+ def compute_parameters_with_absolute_paths(self, parameter_list, build_dir):
+ for idx, i in enumerate(parameter_list):
+ if i[:9] == '-include=':
+ parameter_list[idx] = i[:9] + os.path.normpath(os.path.join(build_dir, i[9:]))
+
+ return parameter_list \ No newline at end of file