diff options
author | Phillip Cao <ftechz@gmail.com> | 2018-10-25 15:24:05 +1300 |
---|---|---|
committer | Phillip Cao <ftechz@gmail.com> | 2018-11-08 00:02:22 +1300 |
commit | 68c83cb213ab3f17593699020313535d5de1e92f (patch) | |
tree | a7d1e78ca6d0f8fe1b1ad0e19bbac5e1d10039ec /mesonbuild/compilers | |
parent | 996f07c546d6e82b0648a1d9f81d7474b1bec76e (diff) | |
download | meson-68c83cb213ab3f17593699020313535d5de1e92f.zip meson-68c83cb213ab3f17593699020313535d5de1e92f.tar.gz meson-68c83cb213ab3f17593699020313535d5de1e92f.tar.bz2 |
Add support for Renesas CC-RX toolchain
Diffstat (limited to 'mesonbuild/compilers')
-rw-r--r-- | mesonbuild/compilers/__init__.py | 6 | ||||
-rw-r--r-- | mesonbuild/compilers/c.py | 43 | ||||
-rw-r--r-- | mesonbuild/compilers/compilers.py | 122 | ||||
-rw-r--r-- | mesonbuild/compilers/cpp.py | 29 |
4 files changed, 199 insertions, 1 deletions
diff --git a/mesonbuild/compilers/__init__.py b/mesonbuild/compilers/__init__.py index 7050b0c..31b7b89 100644 --- a/mesonbuild/compilers/__init__.py +++ b/mesonbuild/compilers/__init__.py @@ -78,6 +78,9 @@ __all__ = [ 'PathScaleFortranCompiler', 'PGIFortranCompiler', 'RustCompiler', + 'CcrxCCompiler', + 'CcrxCompiler', + 'CcrxCPPCompiler', 'SunFortranCompiler', 'SwiftCompiler', 'ValaCompiler', @@ -110,6 +113,7 @@ from .compilers import ( CompilerArgs, GnuCompiler, IntelCompiler, + CcrxCompiler, ) from .c import ( CCompiler, @@ -120,6 +124,7 @@ from .c import ( GnuCCompiler, ElbrusCCompiler, IntelCCompiler, + CcrxCCompiler, VisualStudioCCompiler, ) from .cpp import ( @@ -131,6 +136,7 @@ from .cpp import ( GnuCPPCompiler, ElbrusCPPCompiler, IntelCPPCompiler, + CcrxCPPCompiler, VisualStudioCPPCompiler, ) from .cs import MonoCompiler, VisualStudioCsCompiler diff --git a/mesonbuild/compilers/c.py b/mesonbuild/compilers/c.py index 35c71df..b57001a 100644 --- a/mesonbuild/compilers/c.py +++ b/mesonbuild/compilers/c.py @@ -46,6 +46,7 @@ from .compilers import ( ElbrusCompiler, IntelCompiler, RunResult, + CcrxCompiler, ) gnu_compiler_internal_libs = ('m', 'c', 'pthread', 'dl', 'rt') @@ -1584,3 +1585,45 @@ class ArmCCompiler(ArmCompiler, CCompiler): if std.value != 'none': args.append('--' + std.value) return args + +class CcrxCCompiler(CcrxCompiler, CCompiler): + def __init__(self, exelist, version, compiler_type, is_cross, exe_wrapper=None, **kwargs): + CCompiler.__init__(self, exelist, version, is_cross, exe_wrapper, **kwargs) + CcrxCompiler.__init__(self, compiler_type) + + # Override CCompiler.get_always_args + def get_always_args(self): + return ['-nologo'] + + def get_options(self): + opts = CCompiler.get_options(self) + opts.update({'c_std': coredata.UserComboOption('c_std', 'C language standard to use', + ['none', 'c89', 'c99'], + 'none')}) + return opts + + def get_option_compile_args(self, options): + args = [] + std = options['c_std'] + if std.value == 'c89': + args.append('-lang=c') + elif std.value == 'c99': + args.append('-lang=c99') + return args + + def get_compile_only_args(self): + return [] + + def get_no_optimization_args(self): + return ['-optimize=0'] + + def get_output_args(self, target): + return ['-output=obj=%s' % target] + + def get_linker_output_args(self, outputname): + return ['-output=%s' % outputname] + + def get_include_args(self, path, is_system): + if path == '': + path = '.' + return ['-include=' + path] diff --git a/mesonbuild/compilers/compilers.py b/mesonbuild/compilers/compilers.py index a038abf..514aa38 100644 --- a/mesonbuild/compilers/compilers.py +++ b/mesonbuild/compilers/compilers.py @@ -147,6 +147,14 @@ 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"], @@ -179,6 +187,14 @@ arm_buildtype_linker_args = {'plain': [], 'custom': [], } +ccrx_buildtype_linker_args = {'plain': [], + 'debug': [], + 'debugoptimized': [], + 'release': [], + 'minsize': [], + 'custom': [], + } + msvc_buildtype_linker_args = {'plain': [], 'debug': [], 'debugoptimized': [], @@ -295,6 +311,14 @@ 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'], @@ -309,6 +333,9 @@ clike_debug_args = {False: [], msvc_debug_args = {False: [], True: []} # Fixme! +ccrx_debug_args = {False: [], + True: ['-debug']} + base_options = {'b_pch': coredata.UserBooleanOption('b_pch', 'Use precompiled headers', True), 'b_lto': coredata.UserBooleanOption('b_lto', 'Use link time optimization', False), 'b_sanitize': coredata.UserComboOption('b_sanitize', @@ -1244,6 +1271,8 @@ class CompilerType(enum.Enum): ARM_WIN = 30 + CCRX_WIN = 40 + @property def is_standard_compiler(self): return self.name in ('GCC_STANDARD', 'CLANG_STANDARD', 'ICC_STANDARD') @@ -1254,7 +1283,7 @@ class CompilerType(enum.Enum): @property def is_windows_compiler(self): - return self.name in ('GCC_MINGW', 'GCC_CYGWIN', 'CLANG_MINGW', 'ICC_WIN', 'ARM_WIN') + return self.name in ('GCC_MINGW', 'GCC_CYGWIN', 'CLANG_MINGW', 'ICC_WIN', 'ARM_WIN', 'CCRX_WIN') def get_macos_dylib_install_name(prefix, shlib_name, suffix, soversion): @@ -1804,3 +1833,94 @@ class ArmCompiler: def get_debug_args(self, is_debug): return clike_debug_args[is_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 = {'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_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 diff --git a/mesonbuild/compilers/cpp.py b/mesonbuild/compilers/cpp.py index 65a1033..e6f5803 100644 --- a/mesonbuild/compilers/cpp.py +++ b/mesonbuild/compilers/cpp.py @@ -30,6 +30,7 @@ from .compilers import ( IntelCompiler, ArmCompiler, ArmclangCompiler, + CcrxCompiler, ) from .c_function_attributes import CXX_FUNC_ATTRIBUTES @@ -412,3 +413,31 @@ class ArmCPPCompiler(ArmCompiler, CPPCompiler): def get_compiler_check_args(self): return [] + + +class CcrxCPPCompiler(CcrxCompiler, CPPCompiler): + def __init__(self, exelist, version, compiler_type, is_cross, exe_wrap=None, **kwargs): + CPPCompiler.__init__(self, exelist, version, is_cross, exe_wrap, **kwargs) + CcrxCompiler.__init__(self, compiler_type) + + # Override CCompiler.get_always_args + def get_always_args(self): + return ['-nologo', '-lang=cpp'] + + def get_option_compile_args(self, options): + return [] + + def get_compile_only_args(self): + return [] + + def get_output_args(self, target): + return ['-output=obj=%s' % target] + + def get_linker_output_args(self, outputname): + return ['-output=%s' % outputname] + + def get_option_link_args(self, options): + return [] + + def get_compiler_check_args(self): + return [] |