aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/markdown/Reference-tables.md33
-rw-r--r--docs/markdown/snippets/linearasm_features.md3
-rw-r--r--mesonbuild/compilers/asm.py29
-rw-r--r--mesonbuild/compilers/compilers.py1
-rw-r--r--mesonbuild/compilers/detect.py21
5 files changed, 71 insertions, 16 deletions
diff --git a/docs/markdown/Reference-tables.md b/docs/markdown/Reference-tables.md
index 5b27e3d..1c5f9a3 100644
--- a/docs/markdown/Reference-tables.md
+++ b/docs/markdown/Reference-tables.md
@@ -216,22 +216,23 @@ Meson natively.
These are the parameter names for passing language specific arguments
to your build target.
-| Language | compiler name | linker name |
-| ------------- | ------------- | ----------------- |
-| C | c_args | c_link_args |
-| C++ | cpp_args | cpp_link_args |
-| C# | cs_args | cs_link_args |
-| CUDA | cuda_args | cuda_link_args |
-| D | d_args | d_link_args |
-| Fortran | fortran_args | fortran_link_args |
-| Java | java_args | java_link_args |
-| Objective C | objc_args | objc_link_args |
-| Objective C++ | objcpp_args | objcpp_link_args |
-| Rust | rust_args | rust_link_args |
-| Vala | vala_args | vala_link_args |
-| Cython | cython_args | cython_link_args |
-| NASM | nasm_args | N/A |
-| MASM | masm_args | N/A |
+| Language | compiler name | linker name |
+| ------------- | -------------- | ----------------- |
+| C | c_args | c_link_args |
+| C++ | cpp_args | cpp_link_args |
+| C# | cs_args | cs_link_args |
+| CUDA | cuda_args | cuda_link_args |
+| D | d_args | d_link_args |
+| Fortran | fortran_args | fortran_link_args |
+| Java | java_args | java_link_args |
+| Objective C | objc_args | objc_link_args |
+| Objective C++ | objcpp_args | objcpp_link_args |
+| Rust | rust_args | rust_link_args |
+| Vala | vala_args | vala_link_args |
+| Cython | cython_args | cython_link_args |
+| NASM | nasm_args | N/A |
+| MASM | masm_args | N/A |
+| Linear ASM | linearasm_args | N/A |
All these `<lang>_*` options are specified per machine. See in
[specifying options per
diff --git a/docs/markdown/snippets/linearasm_features.md b/docs/markdown/snippets/linearasm_features.md
new file mode 100644
index 0000000..5714086
--- /dev/null
+++ b/docs/markdown/snippets/linearasm_features.md
@@ -0,0 +1,3 @@
+## Add new language Linear Asm
+
+TI C6000 compiler supports a dialect of TI asm, so we add a new language for it.
diff --git a/mesonbuild/compilers/asm.py b/mesonbuild/compilers/asm.py
index 8cd5e28..d358ca9 100644
--- a/mesonbuild/compilers/asm.py
+++ b/mesonbuild/compilers/asm.py
@@ -7,6 +7,7 @@ from ..mesonlib import EnvironmentException, get_meson_command
from ..options import OptionKey
from .compilers import Compiler
from .mixins.metrowerks import MetrowerksCompiler, mwasmarm_instruction_set_args, mwasmeppc_instruction_set_args
+from .mixins.ti import TICompiler
if T.TYPE_CHECKING:
from ..environment import Environment
@@ -259,6 +260,34 @@ class MasmARMCompiler(Compiler):
return None
+# https://downloads.ti.com/docs/esd/SPRUI04/
+class TILinearAsmCompiler(TICompiler, Compiler):
+ language = 'linearasm'
+
+ def __init__(self, ccache: T.List[str], exelist: T.List[str], version: str,
+ for_machine: MachineChoice, info: MachineInfo,
+ linker: T.Optional[DynamicLinker] = None,
+ full_version: T.Optional[str] = None, is_cross: bool = False):
+ Compiler.__init__(self, ccache, exelist, version, for_machine, info, linker, full_version, is_cross)
+ TICompiler.__init__(self)
+
+ def needs_static_linker(self) -> bool:
+ return True
+
+ def get_always_args(self) -> T.List[str]:
+ return []
+
+ def get_crt_compile_args(self, crt_val: str, buildtype: str) -> T.List[str]:
+ return []
+
+ def sanity_check(self, work_dir: str, environment: Environment) -> None:
+ if self.info.cpu_family not in {'c6000'}:
+ raise EnvironmentException(f'TI Linear ASM compiler {self.id!r} does not support {self.info.cpu_family} CPU family')
+
+ def get_depfile_suffix(self) -> str:
+ return 'd'
+
+
class MetrowerksAsmCompiler(MetrowerksCompiler, Compiler):
language = 'nasm'
diff --git a/mesonbuild/compilers/compilers.py b/mesonbuild/compilers/compilers.py
index 3dfa0ff..424bcc1 100644
--- a/mesonbuild/compilers/compilers.py
+++ b/mesonbuild/compilers/compilers.py
@@ -69,6 +69,7 @@ lang_suffixes: T.Mapping[str, T.Tuple[str, ...]] = {
'cython': ('pyx', ),
'nasm': ('asm', 'nasm',),
'masm': ('masm',),
+ 'linearasm': ('sa',),
}
all_languages = lang_suffixes.keys()
c_cpp_suffixes = {'h'}
diff --git a/mesonbuild/compilers/detect.py b/mesonbuild/compilers/detect.py
index 5bc1435..7bd48d1 100644
--- a/mesonbuild/compilers/detect.py
+++ b/mesonbuild/compilers/detect.py
@@ -98,6 +98,7 @@ def compiler_from_language(env: 'Environment', lang: str, for_machine: MachineCh
'cython': detect_cython_compiler,
'nasm': detect_nasm_compiler,
'masm': detect_masm_compiler,
+ 'linearasm': detect_linearasm_compiler,
}
return lang_map[lang](env, for_machine) if lang in lang_map else None
@@ -1376,6 +1377,26 @@ def detect_masm_compiler(env: 'Environment', for_machine: MachineChoice) -> Comp
_handle_exceptions(popen_exceptions, [comp])
raise EnvironmentException('Unreachable code (exception to make mypy happy)')
+def detect_linearasm_compiler(env: Environment, for_machine: MachineChoice) -> Compiler:
+ from .asm import TILinearAsmCompiler
+ comp = ['cl6x']
+ comp_class: T.Type[Compiler] = TILinearAsmCompiler
+ arg = '-h'
+ info = env.machines[for_machine]
+ cc = detect_c_compiler(env, for_machine)
+ is_cross = env.is_cross_build(for_machine)
+
+ popen_exceptions: T.Dict[str, Exception] = {}
+ try:
+ output = Popen_safe(comp + [arg])[2]
+ version = search_version(output)
+ env.coredata.add_lang_args(comp_class.language, comp_class, for_machine, env)
+ return comp_class([], comp, version, for_machine, info, cc.linker, is_cross=is_cross)
+ except OSError as e:
+ popen_exceptions[' '.join(comp + [arg])] = e
+ _handle_exceptions(popen_exceptions, [comp])
+ raise EnvironmentException('Unreachable code (exception to make mypy happy)')
+
# GNU/Clang defines and version
# =============================