diff options
Diffstat (limited to 'mesonbuild/compilers')
| -rw-r--r-- | mesonbuild/compilers/c.py | 19 | ||||
| -rw-r--r-- | mesonbuild/compilers/compilers.py | 16 | ||||
| -rw-r--r-- | mesonbuild/compilers/detect.py | 30 | ||||
| -rw-r--r-- | mesonbuild/compilers/mixins/apple.py | 4 | ||||
| -rw-r--r-- | mesonbuild/compilers/mixins/elbrus.py | 4 | ||||
| -rw-r--r-- | mesonbuild/compilers/mixins/gnu.py | 4 | ||||
| -rw-r--r-- | mesonbuild/compilers/mixins/tasking.py | 20 |
7 files changed, 34 insertions, 63 deletions
diff --git a/mesonbuild/compilers/c.py b/mesonbuild/compilers/c.py index b72c5b5d2..c75120fee 100644 --- a/mesonbuild/compilers/c.py +++ b/mesonbuild/compilers/c.py @@ -832,7 +832,9 @@ class MetrowerksCCompilerEmbeddedPowerPC(MetrowerksCompiler, CCompiler): args.append('-lang ' + std) return args -class _TaskingCCompiler(TaskingCompiler, CCompiler): +class TaskingCCompiler(TaskingCompiler, CCompiler): + id = 'tasking' + def __init__(self, ccache: T.List[str], exelist: T.List[str], version: str, for_machine: MachineChoice, is_cross: bool, info: 'MachineInfo', linker: T.Optional['DynamicLinker'] = None, @@ -840,18 +842,3 @@ class _TaskingCCompiler(TaskingCompiler, CCompiler): CCompiler.__init__(self, ccache, exelist, version, for_machine, is_cross, info, linker=linker, full_version=full_version) TaskingCompiler.__init__(self) - -class TaskingTricoreCCompiler(_TaskingCCompiler): - id = 'cctc' - -class TaskingArmCCompiler(_TaskingCCompiler): - id = 'ccarm' - -class Tasking8051CCompiler(_TaskingCCompiler): - id = 'cc51' - -class TaskingMCSCCompiler(_TaskingCCompiler): - id = 'ccmcs' - -class TaskingPCPCCompiler(_TaskingCCompiler): - id = 'ccpcp' diff --git a/mesonbuild/compilers/compilers.py b/mesonbuild/compilers/compilers.py index f8d4ac439..3dfa0ff27 100644 --- a/mesonbuild/compilers/compilers.py +++ b/mesonbuild/compilers/compilers.py @@ -251,7 +251,6 @@ BASE_OPTIONS: T.Mapping[OptionKey, BaseOption] = { OptionKey('b_bitcode'): BaseOption(options.UserBooleanOption, 'Generate and embed bitcode (only macOS/iOS/tvOS)', False), OptionKey('b_vscrt'): BaseOption(options.UserComboOption, 'VS run-time library type to use.', 'from_buildtype', choices=MSCRT_VALS + ['from_buildtype', 'static_from_buildtype']), - OptionKey('b_tasking_mil_link'): BaseOption(options.UserBooleanOption, 'Use TASKING compiler families MIL linking feature', False), } base_options = {key: base_opt.init_option(key) for key, base_opt in BASE_OPTIONS.items()} @@ -433,8 +432,8 @@ class CompileResult(HoldableObject): output_name: T.Optional[str] = field(default=None, init=False) cached: bool = field(default=False, init=False) - class Compiler(HoldableObject, metaclass=abc.ABCMeta): + # Libraries to ignore in find_library() since they are provided by the # compiler or the C library. Currently only used for MSVC. ignore_libs: T.List[str] = [] @@ -1328,9 +1327,13 @@ class Compiler(HoldableObject, metaclass=abc.ABCMeta): # TODO: using a TypeDict here would improve this raise EnvironmentException(f'{self.id} does not implement get_feature_args') - def get_prelink_args(self, prelink_name: str, obj_list: T.List[str]) -> T.List[str]: + def get_prelink_args(self, prelink_name: str, obj_list: T.List[str]) -> T.Tuple[T.List[str], T.List[str]]: raise EnvironmentException(f'{self.id} does not know how to do prelinking.') + def get_prelink_append_compile_args(self) -> bool: + """Controls whether compile args have to be used for prelinking or not""" + return False + def rsp_file_syntax(self) -> 'RSPFileSyntax': """The format of the RSP file that this compiler supports. @@ -1354,13 +1357,6 @@ class Compiler(HoldableObject, metaclass=abc.ABCMeta): def form_compileropt_key(self, basename: str) -> OptionKey: return OptionKey(f'{self.language}_{basename}', machine=self.for_machine) - def get_tasking_mil_link_args(self, option_enabled: bool) -> T.List[str]: - """ - Argument for enabling TASKING's MIL link feature, - for most compilers, this will return nothing. - """ - return [] - def get_global_options(lang: str, comp: T.Type[Compiler], for_machine: MachineChoice, diff --git a/mesonbuild/compilers/detect.py b/mesonbuild/compilers/detect.py index a528acbf3..5bc14350e 100644 --- a/mesonbuild/compilers/detect.py +++ b/mesonbuild/compilers/detect.py @@ -241,16 +241,7 @@ def detect_static_linker(env: 'Environment', compiler: Compiler) -> StaticLinker else: return linkers.MetrowerksStaticLinkerEmbeddedPowerPC(linker) if 'TASKING VX-toolset' in err: - if 'TriCore' in err: - return linkers.TaskingTricoreStaticLinker(linker) - if 'ARM' in err: - return linkers.TaskingARMStaticLinker(linker) - if '8051' in err: - return linkers.Tasking8051StaticLinker(linker) - if 'PCP' in err: - return linkers.TaskingPCPStaticLinker(linker) - else: - return linkers.TaskingMCSStaticLinker(linker) + return linkers.TaskingStaticLinker(linker) if p.returncode == 0: return linkers.ArLinker(compiler.for_machine, linker) if p.returncode == 1 and err.startswith('usage'): # OSX @@ -617,23 +608,8 @@ def _detect_c_or_cpp_compiler(env: 'Environment', lang: str, for_machine: Machin ccache, compiler, compiler_version, for_machine, is_cross, info, full_version=full_version, linker=linker) if 'TASKING VX-toolset' in err: - if 'TriCore' in err or 'AURIX Development Studio' in err: - cls = c.TaskingTricoreCCompiler - lnk = linkers.TaskingTricoreLinker - elif 'ARM' in err: - cls = c.TaskingArmCCompiler - lnk = linkers.TaskingARMLinker - elif '8051' in err: - cls = c.Tasking8051CCompiler - lnk = linkers.Tasking8051Linker - elif 'PCP' in err: - cls = c.TaskingPCPCCompiler - lnk = linkers.TaskingPCPLinker - elif 'MCS' in err: - cls = c.TaskingMCSCCompiler - lnk = linkers.TaskingMCSLinker - else: - raise EnvironmentException('Failed to detect linker for TASKING VX-toolset compiler. Please update your cross file(s).') + cls = c.TaskingCCompiler + lnk = linkers.TaskingLinker tasking_ver_match = re.search(r'v([0-9]+)\.([0-9]+)r([0-9]+) Build ([0-9]+)', err) assert tasking_ver_match is not None, 'for mypy' diff --git a/mesonbuild/compilers/mixins/apple.py b/mesonbuild/compilers/mixins/apple.py index fc93d38a5..6ec923952 100644 --- a/mesonbuild/compilers/mixins/apple.py +++ b/mesonbuild/compilers/mixins/apple.py @@ -56,6 +56,6 @@ class AppleCompilerMixin(Compiler): raise MesonException("Couldn't find libomp") return self.__BASE_OMP_FLAGS + link - def get_prelink_args(self, prelink_name: str, obj_list: T.List[str]) -> T.List[str]: + def get_prelink_args(self, prelink_name: str, obj_list: T.List[str]) -> T.Tuple[T.List[str], T.List[str]]: # The objects are prelinked through the compiler, which injects -lSystem - return ['-nostdlib', '-r', '-o', prelink_name] + obj_list + return [prelink_name], ['-nostdlib', '-r', '-o', prelink_name] + obj_list diff --git a/mesonbuild/compilers/mixins/elbrus.py b/mesonbuild/compilers/mixins/elbrus.py index 66f419cf0..5818d8dee 100644 --- a/mesonbuild/compilers/mixins/elbrus.py +++ b/mesonbuild/compilers/mixins/elbrus.py @@ -76,8 +76,8 @@ class ElbrusCompiler(GnuLikeCompiler): def get_optimization_args(self, optimization_level: str) -> T.List[str]: return gnu_optimization_args[optimization_level] - def get_prelink_args(self, prelink_name: str, obj_list: T.List[str]) -> T.List[str]: - return ['-r', '-nodefaultlibs', '-nostartfiles', '-o', prelink_name] + obj_list + def get_prelink_args(self, prelink_name: str, obj_list: T.List[str]) -> T.Tuple[T.List[str], T.List[str]]: + return [prelink_name], ['-r', '-nodefaultlibs', '-nostartfiles', '-o', prelink_name] + obj_list def get_pch_suffix(self) -> str: # Actually it's not supported for now, but probably will be supported in future diff --git a/mesonbuild/compilers/mixins/gnu.py b/mesonbuild/compilers/mixins/gnu.py index 976fa7871..66b01ef51 100644 --- a/mesonbuild/compilers/mixins/gnu.py +++ b/mesonbuild/compilers/mixins/gnu.py @@ -609,8 +609,8 @@ class GnuCompiler(GnuLikeCompiler): # error. return ['-Werror=attributes'] - def get_prelink_args(self, prelink_name: str, obj_list: T.List[str]) -> T.List[str]: - return ['-r', '-o', prelink_name] + obj_list + def get_prelink_args(self, prelink_name: str, obj_list: T.List[str]) -> T.Tuple[T.List[str], T.List[str]]: + return [prelink_name], ['-r', '-o', prelink_name] + obj_list def get_lto_compile_args(self, *, threads: int = 0, mode: str = 'default') -> T.List[str]: if threads == 0: diff --git a/mesonbuild/compilers/mixins/tasking.py b/mesonbuild/compilers/mixins/tasking.py index 7675dbc75..082cff073 100644 --- a/mesonbuild/compilers/mixins/tasking.py +++ b/mesonbuild/compilers/mixins/tasking.py @@ -56,7 +56,7 @@ class TaskingCompiler(Compiler): self.base_options = { OptionKey(o) for o in [ - 'b_tasking_mil_link', + 'b_lto', 'b_staticpic', 'b_ndebug' ] @@ -112,6 +112,21 @@ class TaskingCompiler(Compiler): def get_no_optimization_args(self) -> T.List[str]: return ['-O0'] + def get_prelink_args(self, prelink_name: str, obj_list: T.List[str]) -> T.Tuple[T.List[str], T.List[str]]: + mil_link_list = [] + obj_file_list = [] + for obj in obj_list: + if obj.endswith('.mil'): + mil_link_list.append(obj) + else: + obj_file_list.append(obj) + obj_file_list.append(prelink_name) + + return obj_file_list, ['--mil-link', '-o', prelink_name, '-c'] + mil_link_list + + def get_prelink_append_compile_args(self) -> bool: + return True + def compute_parameters_with_absolute_paths(self, parameter_list: T.List[str], build_dir: str) -> T.List[str]: for idx, i in enumerate(parameter_list): if i[:2] == '-I' or i[:2] == '-L': @@ -119,8 +134,5 @@ class TaskingCompiler(Compiler): return parameter_list - def get_tasking_mil_link_args(self, option_enabled: bool) -> T.List[str]: - return ['--mil-link'] if option_enabled else [] - def get_preprocess_only_args(self) -> T.List[str]: return ['-E'] |
