Skip to content

Commit

Permalink
Support for Type Library Headers for MSVC
Browse files Browse the repository at this point in the history
  • Loading branch information
Alexei-Barnes committed May 23, 2023
1 parent 9f95d22 commit 055a3a7
Showing 1 changed file with 88 additions and 0 deletions.
88 changes: 88 additions & 0 deletions src/compiler/msvc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -807,6 +807,28 @@ pub fn parse_arguments(
}
}
}
if language == Language::Cxx {
if let Some(obj) = outputs.get("obj") {
let tlh = obj.path.with_extension("tlh");
let tli = obj.path.with_extension("tli");

outputs.insert(
"tlh",
ArtifactDescriptor {
path: tlh,
optional: true,
},
);

outputs.insert(
"tli",
ArtifactDescriptor {
path: tli,
optional: true,
},
);
}
}
// -Fd is not taken into account unless -Zi or -ZI are given
// Clang is currently unable to generate PDB files
if debug_info && !is_clang {
Expand Down Expand Up @@ -1393,6 +1415,72 @@ mod test {
assert!(!msvc_show_includes);
}

#[test]
fn test_cpp_parse_arguments_collects_type_library_headers() {
let args = ovec!["-c", "foo.cpp", "-Fofoo.obj"];
let ParsedArguments {
input,
language,
outputs,
..
} = match parse_arguments(args) {
CompilerArguments::Ok(args) => args,
o => panic!("Got unexpected parse result: {:?}", o),
};
assert_eq!(Some("foo.cpp"), input.to_str());
assert_eq!(Language::Cxx, language);
assert_map_contains!(
outputs,
(
"obj",
ArtifactDescriptor {
path: PathBuf::from("foo.obj"),
optional: false
}
),
(
"tlh",
ArtifactDescriptor {
path: PathBuf::from("foo.tlh"),
optional: true
}
),
(
"tli",
ArtifactDescriptor {
path: PathBuf::from("foo.tli"),
optional: true
}
)
);
}

#[test]
fn test_c_parse_arguments_does_not_collect_type_library_headers() {
let args = ovec!["-c", "foo.c", "-Fofoo.obj"];
let ParsedArguments {
input,
language,
outputs,
..
} = match parse_arguments(args) {
CompilerArguments::Ok(args) => args,
o => panic!("Got unexpected parse result: {:?}", o),
};
assert_eq!(Some("foo.c"), input.to_str());
assert_eq!(Language::C, language);
assert_map_contains!(
outputs,
(
"obj",
ArtifactDescriptor {
path: PathBuf::from("foo.obj"),
optional: false
}
)
);
}

#[test]
fn test_parse_compile_flag() {
let args = ovec!["/c", "foo.c", "-Fofoo.obj"];
Expand Down

0 comments on commit 055a3a7

Please sign in to comment.