summaryrefslogtreecommitdiff
path: root/mesonbuild/compilers
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild/compilers')
-rw-r--r--mesonbuild/compilers/c.py19
-rw-r--r--mesonbuild/compilers/compilers.py16
-rw-r--r--mesonbuild/compilers/detect.py30
-rw-r--r--mesonbuild/compilers/mixins/apple.py4
-rw-r--r--mesonbuild/compilers/mixins/elbrus.py4
-rw-r--r--mesonbuild/compilers/mixins/gnu.py4
-rw-r--r--mesonbuild/compilers/mixins/tasking.py20
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']