Support C++ files in tree-sitter parsers

ida_star
Wilfred Hughes 2021-08-16 21:48:00 +07:00
parent 49d7750285
commit 28e824ca6c
1 changed files with 26 additions and 6 deletions

@ -1,16 +1,36 @@
use std::path::PathBuf;
fn build(package_name: &str, package_dir: &str, extra_c_files: &[&str]) {
fn build(package_name: &str, package_dir: &str, extra_files: &[&str]) {
let dir = PathBuf::from(package_dir);
let mut build = cc::Build::new();
build.include(&dir).warnings(false); // ignore unused parameter warnings
let mut c_files = vec!["parser.c"];
let mut cpp_files = vec![];
for file in extra_files {
if file.ends_with(".c") {
c_files.push(file);
} else {
cpp_files.push(file);
}
}
build.file(dir.join("parser.c"));
for c_file in extra_c_files {
build.file(dir.join(c_file));
dbg!(&c_files);
dbg!(&cpp_files);
if !cpp_files.is_empty() {
let mut cpp_build = cc::Build::new();
cpp_build.include(&dir).cpp(true);
for file in cpp_files {
cpp_build.file(dir.join(file));
}
cpp_build.compile(package_name);
}
let mut build = cc::Build::new();
build.include(&dir).warnings(false); // ignore unused parameter warnings
for file in c_files {
build.file(dir.join(file));
}
build.compile(package_name);
}