Skip to content

Commit e20c1e8

Browse files
committed
distributed compilation support for asm & preprocessed outputs
Fixes #2556
1 parent 31b993d commit e20c1e8

File tree

4 files changed

+58
-5
lines changed

4 files changed

+58
-5
lines changed

Cargo.lock

Lines changed: 21 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ rouille = { version = "3.6", optional = true, default-features = false, features
122122
] }
123123
syslog = { version = "6", optional = true }
124124
version-compare = { version = "0.1.1", optional = true }
125+
enum-iterator = "2.3.0"
125126

126127
[dev-dependencies]
127128
assert_cmd = "2.0.13"

src/compiler/compiler.rs

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ use crate::server;
3838
use crate::util::{fmt_duration_as_secs, run_input_output};
3939
use crate::{counted_array, dist};
4040
use async_trait::async_trait;
41+
use enum_iterator::Sequence;
4142
use filetime::FileTime;
4243
use fs::File;
4344
use fs_err as fs;
@@ -212,7 +213,7 @@ pub enum CompilerKind {
212213
Rust,
213214
}
214215

215-
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
216+
#[derive(Debug, PartialEq, Eq, Clone, Copy, Sequence)]
216217
pub enum Language {
217218
AssemblerToPreprocess,
218219
Assembler,
@@ -304,6 +305,17 @@ impl Language {
304305
)
305306
}
306307

308+
pub fn to_c_preprocessed_language(self) -> Option<Language> {
309+
match self {
310+
Language::AssemblerToPreprocess => Some(Language::Assembler),
311+
Language::C => Some(Language::CPreprocessed),
312+
Language::Cxx => Some(Language::CxxPreprocessed),
313+
Language::ObjectiveC => Some(Language::ObjectiveCPreprocessed),
314+
Language::ObjectiveCxx => Some(Language::ObjectiveCxxPreprocessed),
315+
_ => None,
316+
}
317+
}
318+
307319
/// Common implementation for GCC and Clang language argument mapping
308320
fn to_compiler_arg(self, cuda_arg: &'static str) -> Option<&'static str> {
309321
match self {
@@ -1856,13 +1868,29 @@ mod test {
18561868
use crate::mock_command::*;
18571869
use crate::test::mock_storage::MockStorage;
18581870
use crate::test::utils::*;
1871+
use enum_iterator::all;
18591872
use fs::File;
18601873
use std::io::{Cursor, Write};
18611874
use std::sync::Arc;
18621875
use std::time::Duration;
18631876
use test_case::test_case;
18641877
use tokio::runtime::Runtime;
18651878

1879+
#[test]
1880+
fn test_c_preprocessing_consistent() {
1881+
for lang in all::<Language>() {
1882+
let maybe_processed = lang.to_c_preprocessed_language();
1883+
1884+
if let Some(processed) = maybe_processed {
1885+
assert!(!processed.needs_c_preprocessing(), "{:?} should not need preprocessing - it is a reasult of {:?} processing", processed, lang);
1886+
}
1887+
1888+
if !lang.needs_c_preprocessing() {
1889+
assert!(maybe_processed.is_none(), "{:?} should not be processed, but it is produce the {:?} as a C preprocessing result", lang, maybe_processed.unwrap());
1890+
}
1891+
}
1892+
}
1893+
18661894
#[test]
18671895
fn test_detect_compiler_kind_gcc() {
18681896
let f = TestFixture::new();

src/compiler/gcc.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -909,10 +909,13 @@ where
909909
let mut language: Option<String> =
910910
language_to_arg(parsed_args.language).map(|lang| lang.into());
911911
if !rewrite_includes_only {
912-
match parsed_args.language {
913-
Language::C => language = Some("cpp-output".into()),
914-
Language::GenericHeader | Language::CHeader | Language::CxxHeader => {}
915-
_ => language.as_mut()?.push_str("-cpp-output"),
912+
if matches!(parsed_args.language, Language::GenericHeader | Language::CHeader | Language::CxxHeader) {
913+
// Nothing to do
914+
}
915+
else if let Some(processed_lang) = parsed_args.language.to_c_preprocessed_language() {
916+
language = Some(language_to_arg(processed_lang)?.into());
917+
} else if parsed_args.language.needs_c_preprocessing() {
918+
language.as_mut()?.push_str("-cpp-output");
916919
}
917920
}
918921

0 commit comments

Comments
 (0)