aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2020-11-12 20:40:49 +0200
committerGitHub <noreply@github.com>2020-11-12 20:40:49 +0200
commit06de675df2172b6c6f9908686540ebf57b20db4a (patch)
treea6ac31a0767fcbff1dc3a761242187555448cb75 /mesonbuild
parent41a79a0757eadf74ea6c3d8985400c56083b68cb (diff)
parentce46070b4ee69fe573ff4105d06b970445fea0aa (diff)
downloadmeson-06de675df2172b6c6f9908686540ebf57b20db4a.zip
meson-06de675df2172b6c6f9908686540ebf57b20db4a.tar.gz
meson-06de675df2172b6c6f9908686540ebf57b20db4a.tar.bz2
Merge pull request #7961 from dcbaker/submit/rust-color-output
Add color output support to rust
Diffstat (limited to 'mesonbuild')
-rw-r--r--mesonbuild/backend/ninjabackend.py7
-rw-r--r--mesonbuild/compilers/rust.py14
2 files changed, 18 insertions, 3 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py
index 09f06da..daada12 100644
--- a/mesonbuild/backend/ninjabackend.py
+++ b/mesonbuild/backend/ninjabackend.py
@@ -1494,6 +1494,10 @@ int dummy;
# Rust compiler takes only the main file as input and
# figures out what other files are needed via import
# statements and magic.
+ base_proxy = self.get_base_options_for_target(target)
+ args = rustc.compiler_args()
+ # Compiler args for compiling this target
+ args += compilers.get_base_compile_args(base_proxy, rustc)
main_rust_file = None
for i in target.get_sources():
if not rustc.can_compile(i):
@@ -1503,7 +1507,6 @@ int dummy;
if main_rust_file is None:
raise RuntimeError('A Rust target has no Rust sources. This is weird. Also a bug. Please report')
target_name = os.path.join(target.subdir, target.get_filename())
- args = ['--crate-type']
if isinstance(target, build.Executable):
cratetype = 'bin'
elif hasattr(target, 'rust_crate_type'):
@@ -1514,7 +1517,7 @@ int dummy;
cratetype = 'rlib'
else:
raise InvalidArguments('Unknown target type for rustc.')
- args.append(cratetype)
+ args.extend(['--crate-type', cratetype])
# If we're dynamically linking, add those arguments
#
diff --git a/mesonbuild/compilers/rust.py b/mesonbuild/compilers/rust.py
index 469859b..1be0cd8 100644
--- a/mesonbuild/compilers/rust.py
+++ b/mesonbuild/compilers/rust.py
@@ -17,7 +17,7 @@ import textwrap
import typing as T
from .. import coredata
-from ..mesonlib import EnvironmentException, MachineChoice, Popen_safe
+from ..mesonlib import EnvironmentException, MachineChoice, MesonException, Popen_safe
from .compilers import Compiler, rust_buildtype_args, clike_debug_args
if T.TYPE_CHECKING:
@@ -52,6 +52,9 @@ class RustCompiler(Compiler):
linker=linker)
self.exe_wrapper = exe_wrapper
self.id = 'rustc'
+ self.base_options.append('b_colorout')
+ if 'link' in self.linker.id:
+ self.base_options.append('b_vscrt')
def needs_static_linker(self) -> bool:
return False
@@ -141,3 +144,12 @@ class RustCompiler(Compiler):
if std.value != 'none':
args.append('--edition=' + std.value)
return args
+
+ def get_crt_compile_args(self, crt_val: str, buildtype: str) -> T.List[str]:
+ # Rust handles this for us, we don't need to do anything
+ return []
+
+ def get_colorout_args(self, colortype: str) -> T.List[str]:
+ if colortype in {'always', 'never', 'auto'}:
+ return [f'--color={colortype}']
+ raise MesonException(f'Invalid color type for rust {colortype}')