From 9c971648618f5b447b02ad3de6047857a3c7218b Mon Sep 17 00:00:00 2001 From: Toshiki Teramura Date: Mon, 7 Jan 2019 09:14:38 +0900 Subject: [PATCH 01/11] Code generation crate (cuda-bindgen) --- cuda-bindgen/Cargo.toml | 10 +++ cuda-bindgen/src/main.rs | 129 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 139 insertions(+) create mode 100644 cuda-bindgen/Cargo.toml create mode 100644 cuda-bindgen/src/main.rs diff --git a/cuda-bindgen/Cargo.toml b/cuda-bindgen/Cargo.toml new file mode 100644 index 0000000..13ef09b --- /dev/null +++ b/cuda-bindgen/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "cuda-bindgen" +version = "0.1.0" +authors = ["Toshiki Teramura "] +edition = "2018" + +[dependencies] +bindgen = "*" +structopt = "*" +env_logger = "*" diff --git a/cuda-bindgen/src/main.rs b/cuda-bindgen/src/main.rs new file mode 100644 index 0000000..50250bf --- /dev/null +++ b/cuda-bindgen/src/main.rs @@ -0,0 +1,129 @@ +use env_logger; +use std::{fs, path::PathBuf}; +use structopt::StructOpt; + +#[derive(StructOpt)] +#[structopt( + name = "cuda-bindgen", + about = "Generate CUDA binding to Rust", + raw(setting = "structopt::clap::AppSettings::ColoredHelp") +)] +struct CudaBindgen { + #[structopt(name = "output", help = "Output Directory")] + output: PathBuf, + #[structopt(name = "cuda_path", help = "Path where the CUDA is Installed")] + cuda_path: PathBuf, + + /// Build CUDA Driver API + #[structopt(long = "driver")] + driver: bool, + + /// Build CUDA Runtime API + #[structopt(long = "runtime")] + runtime: bool, + + /// Build cuBLAS API + #[structopt(long = "cublas")] + cublas: bool, +} + +fn main() { + env_logger::init(); + let opt = CudaBindgen::from_args(); + + let out_path = opt.output; + let cuda_inc_path = opt.cuda_path.join("include"); + + fs::create_dir_all(&out_path).expect("Unable to create output directory"); + + if opt.driver { + bindgen::builder() + .header(format!("{}/cuda.h", cuda_inc_path.display())) + .whitelist_recursively(false) + .whitelist_type("^CU.*") + .whitelist_type("^cuuint(32|64)_t") + .whitelist_type("^cudaError_enum") + .whitelist_type("^cudaMem.*") + .whitelist_var("^CU.*") + .whitelist_function("^CU.*") + .whitelist_function("^cu.*") + .default_enum_style(bindgen::EnumVariation::Rust) + .generate() + .expect("Unable to generate CUDA bindings") + .write_to_file(out_path.join("cuda_bindings.rs")) + .expect("Unable to write CUDA bindings"); + + bindgen::builder() + .header("wrapper/cucomplex.h") + .clang_arg(format!("-I{}/include", cuda_inc_path.display())) + .whitelist_recursively(false) + .whitelist_type("^cu.*Complex$") + .default_enum_style(bindgen::EnumVariation::Rust) + .generate() + .expect("Unable to generate CUComplex bindings") + .write_to_file(out_path.join("cucomplex_bindings.rs")) + .expect("Unable to write CUComplex bindings"); + bindgen::builder() + .header("wrapper/library_types.h") + .clang_arg(format!("-I{}/include", cuda_inc_path.display())) + .whitelist_recursively(false) + .whitelist_type("^cuda.*") + .whitelist_type("^libraryPropertyType.*") + .default_enum_style(bindgen::EnumVariation::Rust) + .generate() + .expect("Unable to generate library types bindings") + .write_to_file(out_path.join("library_types_bindings.rs")) + .expect("Unable to write library types bindings"); + + bindgen::builder() + .header("wrapper/vector_types.h") + .clang_arg(format!("-I{}/include", cuda_inc_path.display())) + // .whitelist_recursively(false) + .whitelist_type("^u?char[0-9]$") + .whitelist_type("^dim[0-9]$") + .whitelist_type("^double[0-9]$") + .whitelist_type("^float[0-9]$") + .whitelist_type("^u?int[0-9]$") + .whitelist_type("^u?long[0-9]$") + .whitelist_type("^u?longlong[0-9]$") + .whitelist_type("^u?short[0-9]$") + .default_enum_style(bindgen::EnumVariation::Rust) + .derive_copy(true) + .generate() + .expect("Unable to generate vector types bindings") + .write_to_file(out_path.join("vector_types_bindings.rs")) + .expect("Unable to write vector types bindings"); + } + + if opt.runtime { + bindgen::builder() + .header("wrapper/cudart.h") + .clang_arg(format!("-I{}/include", cuda_inc_path.display())) + .whitelist_recursively(false) + .whitelist_type("^cuda.*") + .whitelist_type("^surfaceReference") + .whitelist_type("^textureReference") + .whitelist_var("^cuda.*") + .whitelist_function("^cuda.*") + .default_enum_style(bindgen::EnumVariation::Rust) + .generate() + .expect("Unable to generate CUDA RT bindings") + .write_to_file(out_path.join("cudart_bindings.rs")) + .expect("Unable to write CUDA RT bindings"); + } + + if opt.cublas { + bindgen::builder() + .header("wrapper/cublas.h") + .clang_arg(format!("-I{}/include", cuda_inc_path.display())) + .whitelist_recursively(false) + .whitelist_type("^cublas.*") + .whitelist_var("^cublas.*") + .whitelist_function("^cublas.*") + .default_enum_style(bindgen::EnumVariation::Rust) + .generate() + .expect("Unable to generate CUBLAS bindings") + .write_to_file(out_path.join("cublas_bindings.rs")) + .expect("Unable to write CUBLAS bindings"); + } +} From 87eba8d2b99aac7c9e1e8187dbaff236cd79ebd0 Mon Sep 17 00:00:00 2001 From: Toshiki Teramura Date: Mon, 7 Jan 2019 11:09:44 +0900 Subject: [PATCH 02/11] Rename output rust code --- cuda-bindgen/src/main.rs | 59 ++++++++++++++++++++++++---------------- 1 file changed, 36 insertions(+), 23 deletions(-) diff --git a/cuda-bindgen/src/main.rs b/cuda-bindgen/src/main.rs index 50250bf..a72163c 100644 --- a/cuda-bindgen/src/main.rs +++ b/cuda-bindgen/src/main.rs @@ -9,9 +9,12 @@ use structopt::StructOpt; raw(setting = "structopt::clap::AppSettings::ColoredHelp") )] struct CudaBindgen { - #[structopt(name = "output", help = "Output Directory")] + /// Output directory + #[structopt(name = "output")] output: PathBuf, - #[structopt(name = "cuda_path", help = "Path where the CUDA is Installed")] + + /// Path where the CUDA is Installed + #[structopt(name = "cuda_path")] cuda_path: PathBuf, /// Build CUDA Driver API @@ -25,20 +28,30 @@ struct CudaBindgen { /// Build cuBLAS API #[structopt(long = "cublas")] cublas: bool, + + /// Build all APIs + #[structopt(long = "all", short = "a")] + all: bool, } fn main() { env_logger::init(); let opt = CudaBindgen::from_args(); - let out_path = opt.output; + // check CUDA + if !opt.cuda_path.is_dir() { + panic!("CUDA does not exist at {:?}", opt.cuda_path); + } let cuda_inc_path = opt.cuda_path.join("include"); + // ready output directory + let out_path = opt.output; fs::create_dir_all(&out_path).expect("Unable to create output directory"); - if opt.driver { + if opt.driver || opt.all { bindgen::builder() .header(format!("{}/cuda.h", cuda_inc_path.display())) + .clang_arg(format!("-I{}", cuda_inc_path.display())) .whitelist_recursively(false) .whitelist_type("^CU.*") .whitelist_type("^cuuint(32|64)_t") @@ -50,35 +63,35 @@ fn main() { .default_enum_style(bindgen::EnumVariation::Rust) .generate() .expect("Unable to generate CUDA bindings") - .write_to_file(out_path.join("cuda_bindings.rs")) + .write_to_file(out_path.join("cuda.rs")) .expect("Unable to write CUDA bindings"); bindgen::builder() - .header("wrapper/cucomplex.h") - .clang_arg(format!("-I{}/include", cuda_inc_path.display())) + .header(format!("{}/cuComplex.h", cuda_inc_path.display())) + .clang_arg(format!("-I{}", cuda_inc_path.display())) .whitelist_recursively(false) .whitelist_type("^cu.*Complex$") .default_enum_style(bindgen::EnumVariation::Rust) .generate() .expect("Unable to generate CUComplex bindings") - .write_to_file(out_path.join("cucomplex_bindings.rs")) + .write_to_file(out_path.join("cucomplex.rs")) .expect("Unable to write CUComplex bindings"); + bindgen::builder() - .header("wrapper/library_types.h") - .clang_arg(format!("-I{}/include", cuda_inc_path.display())) + .header(format!("{}/library_types.h", cuda_inc_path.display())) + .clang_arg(format!("-I{}", cuda_inc_path.display())) .whitelist_recursively(false) .whitelist_type("^cuda.*") .whitelist_type("^libraryPropertyType.*") .default_enum_style(bindgen::EnumVariation::Rust) .generate() .expect("Unable to generate library types bindings") - .write_to_file(out_path.join("library_types_bindings.rs")) + .write_to_file(out_path.join("library_types.rs")) .expect("Unable to write library types bindings"); bindgen::builder() - .header("wrapper/vector_types.h") - .clang_arg(format!("-I{}/include", cuda_inc_path.display())) - // .whitelist_recursively(false) + .header(format!("{}/vector_types.h", cuda_inc_path.display())) + .clang_arg(format!("-I{}", cuda_inc_path.display())) .whitelist_type("^u?char[0-9]$") .whitelist_type("^dim[0-9]$") .whitelist_type("^double[0-9]$") @@ -91,14 +104,14 @@ fn main() { .derive_copy(true) .generate() .expect("Unable to generate vector types bindings") - .write_to_file(out_path.join("vector_types_bindings.rs")) + .write_to_file(out_path.join("vector_types.rs")) .expect("Unable to write vector types bindings"); } - if opt.runtime { + if opt.runtime || opt.all { bindgen::builder() - .header("wrapper/cudart.h") - .clang_arg(format!("-I{}/include", cuda_inc_path.display())) + .header(format!("{}/cuda_runtime.h", cuda_inc_path.display())) + .clang_arg(format!("-I{}", cuda_inc_path.display())) .whitelist_recursively(false) .whitelist_type("^cuda.*") .whitelist_type("^surfaceReference") @@ -108,14 +121,14 @@ fn main() { .default_enum_style(bindgen::EnumVariation::Rust) .generate() .expect("Unable to generate CUDA RT bindings") - .write_to_file(out_path.join("cudart_bindings.rs")) + .write_to_file(out_path.join("cudart.rs")) .expect("Unable to write CUDA RT bindings"); } - if opt.cublas { + if opt.cublas || opt.all { bindgen::builder() - .header("wrapper/cublas.h") - .clang_arg(format!("-I{}/include", cuda_inc_path.display())) + .header(format!("{}/cublas.h", cuda_inc_path.display())) + .clang_arg(format!("-I{}", cuda_inc_path.display())) .whitelist_recursively(false) .whitelist_type("^cublas.*") .whitelist_var("^cublas.*") @@ -123,7 +136,7 @@ fn main() { .default_enum_style(bindgen::EnumVariation::Rust) .generate() .expect("Unable to generate CUBLAS bindings") - .write_to_file(out_path.join("cublas_bindings.rs")) + .write_to_file(out_path.join("cublas.rs")) .expect("Unable to write CUBLAS bindings"); } } From f6c5ea483a9024f082fb4e5b7dbbd666d4821c3a Mon Sep 17 00:00:00 2001 From: Toshiki Teramura Date: Mon, 7 Jan 2019 11:45:07 +0900 Subject: [PATCH 03/11] Rename output cuda_runtime.rs --- cuda-bindgen/src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cuda-bindgen/src/main.rs b/cuda-bindgen/src/main.rs index a72163c..cf84952 100644 --- a/cuda-bindgen/src/main.rs +++ b/cuda-bindgen/src/main.rs @@ -121,7 +121,7 @@ fn main() { .default_enum_style(bindgen::EnumVariation::Rust) .generate() .expect("Unable to generate CUDA RT bindings") - .write_to_file(out_path.join("cudart.rs")) + .write_to_file(out_path.join("cuda_runtime.rs")) .expect("Unable to write CUDA RT bindings"); } From 1770174138a4461862e65da061443ab524939130 Mon Sep 17 00:00:00 2001 From: Toshiki Teramura Date: Wed, 9 Jan 2019 23:34:17 +0900 Subject: [PATCH 04/11] Explit version --- cuda-bindgen/Cargo.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cuda-bindgen/Cargo.toml b/cuda-bindgen/Cargo.toml index 13ef09b..6c46005 100644 --- a/cuda-bindgen/Cargo.toml +++ b/cuda-bindgen/Cargo.toml @@ -5,6 +5,6 @@ authors = ["Toshiki Teramura "] edition = "2018" [dependencies] -bindgen = "*" -structopt = "*" -env_logger = "*" +bindgen = "0.46" +structopt = "0.2" +env_logger = "0.6" From 850db086479b690b9c789d80c2c0be5dd3c44e00 Mon Sep 17 00:00:00 2001 From: Toshiki Teramura Date: Thu, 24 Jan 2019 02:45:45 +0900 Subject: [PATCH 05/11] Drop unused whitelist --- cuda-bindgen/src/main.rs | 3 --- 1 file changed, 3 deletions(-) diff --git a/cuda-bindgen/src/main.rs b/cuda-bindgen/src/main.rs index cf84952..6480ae8 100644 --- a/cuda-bindgen/src/main.rs +++ b/cuda-bindgen/src/main.rs @@ -56,9 +56,7 @@ fn main() { .whitelist_type("^CU.*") .whitelist_type("^cuuint(32|64)_t") .whitelist_type("^cudaError_enum") - .whitelist_type("^cudaMem.*") .whitelist_var("^CU.*") - .whitelist_function("^CU.*") .whitelist_function("^cu.*") .default_enum_style(bindgen::EnumVariation::Rust) .generate() @@ -131,7 +129,6 @@ fn main() { .clang_arg(format!("-I{}", cuda_inc_path.display())) .whitelist_recursively(false) .whitelist_type("^cublas.*") - .whitelist_var("^cublas.*") .whitelist_function("^cublas.*") .default_enum_style(bindgen::EnumVariation::Rust) .generate() From 1ec84c2ef6fd23dd987d626e5bf45d9c7c4529a1 Mon Sep 17 00:00:00 2001 From: Toshiki Teramura Date: Thu, 24 Jan 2019 02:56:00 +0900 Subject: [PATCH 06/11] Add cuda bindgen test --- .circleci/config.yml | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 26e7a35..a3ef1ac 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -6,6 +6,14 @@ version: 2 export PATH=/root/.cargo/bin:$PATH cargo build -v +.cuda_bindgen: &cuda_bindgen + name: Test cuda bindgen + command: | + export PATH=/root/.cargo/bin:$PATH + rustup component add rustfmt + cd cuda-bindgen + cargo run -- -a test_binding /usr/local/cuda + .job_apt_template: &job_apt steps: - checkout @@ -13,10 +21,12 @@ version: 2 name: Install Rust command: | apt update - apt install -y curl + apt install -y curl clang curl https://sh.rustup.rs -sSf | sh -s -- -y - run: <<: *cargo + - run: + <<: *cuda_bindgen .job_yum_template: &job_yum steps: @@ -28,6 +38,8 @@ version: 2 curl https://sh.rustup.rs -sSf | sh -s -- -y - run: <<: *cargo + - run: + <<: *cuda_bindgen jobs: latest: From 472c03d9dd656b7818474e36b1bd618a1632071d Mon Sep 17 00:00:00 2001 From: Toshiki Teramura Date: Thu, 24 Jan 2019 03:21:57 +0900 Subject: [PATCH 07/11] Add clang for CentOS CI --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index a3ef1ac..4f1d20a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -34,7 +34,7 @@ version: 2 - run: name: Install Rust command: | - yum install -y curl + yum install -y curl clang curl https://sh.rustup.rs -sSf | sh -s -- -y - run: <<: *cargo From 4bcd9443e617317a0303ebe57e6e379608fe8cf6 Mon Sep 17 00:00:00 2001 From: Toshiki Teramura Date: Thu, 24 Jan 2019 04:02:15 +0900 Subject: [PATCH 08/11] library_types be optional --- cuda-bindgen/src/main.rs | 66 +++++++++++++++++++++++----------------- 1 file changed, 38 insertions(+), 28 deletions(-) diff --git a/cuda-bindgen/src/main.rs b/cuda-bindgen/src/main.rs index 6480ae8..1b4bb83 100644 --- a/cuda-bindgen/src/main.rs +++ b/cuda-bindgen/src/main.rs @@ -1,5 +1,8 @@ use env_logger; -use std::{fs, path::PathBuf}; +use std::{ + fs, + path::{Path, PathBuf}, +}; use structopt::StructOpt; #[derive(StructOpt)] @@ -34,6 +37,18 @@ struct CudaBindgen { all: bool, } +fn builder(cuda_path: &Path, header_name: &str) -> Option { + let header = cuda_path.join(header_name); + if !header.exists() { + return None; + } + Some( + bindgen::builder() + .header(header.to_str().unwrap()) + .clang_arg(format!("-I{}", cuda_path.display())), + ) +} + fn main() { env_logger::init(); let opt = CudaBindgen::from_args(); @@ -49,9 +64,8 @@ fn main() { fs::create_dir_all(&out_path).expect("Unable to create output directory"); if opt.driver || opt.all { - bindgen::builder() - .header(format!("{}/cuda.h", cuda_inc_path.display())) - .clang_arg(format!("-I{}", cuda_inc_path.display())) + builder(&cuda_inc_path, "cuda.h") + .expect("cuda.h does not exist") .whitelist_recursively(false) .whitelist_type("^CU.*") .whitelist_type("^cuuint(32|64)_t") @@ -64,9 +78,8 @@ fn main() { .write_to_file(out_path.join("cuda.rs")) .expect("Unable to write CUDA bindings"); - bindgen::builder() - .header(format!("{}/cuComplex.h", cuda_inc_path.display())) - .clang_arg(format!("-I{}", cuda_inc_path.display())) + builder(&cuda_inc_path, "cuComplex.h") + .expect("cuComplex.h does not exist") .whitelist_recursively(false) .whitelist_type("^cu.*Complex$") .default_enum_style(bindgen::EnumVariation::Rust) @@ -75,21 +88,8 @@ fn main() { .write_to_file(out_path.join("cucomplex.rs")) .expect("Unable to write CUComplex bindings"); - bindgen::builder() - .header(format!("{}/library_types.h", cuda_inc_path.display())) - .clang_arg(format!("-I{}", cuda_inc_path.display())) - .whitelist_recursively(false) - .whitelist_type("^cuda.*") - .whitelist_type("^libraryPropertyType.*") - .default_enum_style(bindgen::EnumVariation::Rust) - .generate() - .expect("Unable to generate library types bindings") - .write_to_file(out_path.join("library_types.rs")) - .expect("Unable to write library types bindings"); - - bindgen::builder() - .header(format!("{}/vector_types.h", cuda_inc_path.display())) - .clang_arg(format!("-I{}", cuda_inc_path.display())) + builder(&cuda_inc_path, "vector_types.h") + .expect("vector_types.h does not exist") .whitelist_type("^u?char[0-9]$") .whitelist_type("^dim[0-9]$") .whitelist_type("^double[0-9]$") @@ -104,12 +104,23 @@ fn main() { .expect("Unable to generate vector types bindings") .write_to_file(out_path.join("vector_types.rs")) .expect("Unable to write vector types bindings"); + + if let Some(builder) = builder(&cuda_inc_path, "library_types.h") { + builder + .whitelist_recursively(false) + .whitelist_type("^cuda.*") + .whitelist_type("^libraryPropertyType.*") + .default_enum_style(bindgen::EnumVariation::Rust) + .generate() + .expect("Unable to generate library types bindings") + .write_to_file(out_path.join("library_types.rs")) + .expect("Unable to write library types bindings"); + } } if opt.runtime || opt.all { - bindgen::builder() - .header(format!("{}/cuda_runtime.h", cuda_inc_path.display())) - .clang_arg(format!("-I{}", cuda_inc_path.display())) + builder(&cuda_inc_path, "cuda_runtime.h") + .expect("cuda_runtime.h does not exist") .whitelist_recursively(false) .whitelist_type("^cuda.*") .whitelist_type("^surfaceReference") @@ -124,9 +135,8 @@ fn main() { } if opt.cublas || opt.all { - bindgen::builder() - .header(format!("{}/cublas.h", cuda_inc_path.display())) - .clang_arg(format!("-I{}", cuda_inc_path.display())) + builder(&cuda_inc_path, "cublas.h") + .expect("cublas.h does not exist") .whitelist_recursively(false) .whitelist_type("^cublas.*") .whitelist_function("^cublas.*") From 4a8a219f7ba1e28f7b655b7b0679827098d4312a Mon Sep 17 00:00:00 2001 From: Toshiki Teramura Date: Thu, 24 Jan 2019 04:13:45 +0900 Subject: [PATCH 09/11] Add libclang-devel --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 4f1d20a..e1b27d7 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -34,7 +34,7 @@ version: 2 - run: name: Install Rust command: | - yum install -y curl clang + yum install -y curl clang libclang-devel curl https://sh.rustup.rs -sSf | sh -s -- -y - run: <<: *cargo From 63d91d0141b3ba766549f73616981f1366557507 Mon Sep 17 00:00:00 2001 From: Toshiki Teramura Date: Thu, 24 Jan 2019 04:24:17 +0900 Subject: [PATCH 10/11] Drop clang-devel --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index e1b27d7..4f1d20a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -34,7 +34,7 @@ version: 2 - run: name: Install Rust command: | - yum install -y curl clang libclang-devel + yum install -y curl clang curl https://sh.rustup.rs -sSf | sh -s -- -y - run: <<: *cargo From 6f26381a9251f3a2e94900e3ca769c59f0644b50 Mon Sep 17 00:00:00 2001 From: Toshiki Teramura Date: Thu, 24 Jan 2019 08:30:45 +0900 Subject: [PATCH 11/11] Drop CentOS6 support --- .circleci/config.yml | 30 ------------------------------ 1 file changed, 30 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 4f1d20a..11bb19b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -114,30 +114,6 @@ jobs: <<: *job_yum docker: - image: nvidia/cuda:7.0-devel-centos7 - 10.0-devel-centos6: - <<: *job_yum - docker: - - image: nvidia/cuda:10.0-devel-centos6 - 9.2-devel-centos6: - <<: *job_yum - docker: - - image: nvidia/cuda:9.2-devel-centos6 - 9.1-devel-centos6: - <<: *job_yum - docker: - - image: nvidia/cuda:9.1-devel-centos6 - 9.0-devel-centos6: - <<: *job_yum - docker: - - image: nvidia/cuda:9.0-devel-centos6 - 8.0-devel-centos6: - <<: *job_yum - docker: - - image: nvidia/cuda:8.0-devel-centos6 - 7.5-devel-centos6: - <<: *job_yum - docker: - - image: nvidia/cuda:7.5-devel-centos6 workflows: version: 2 @@ -161,9 +137,3 @@ workflows: - 8.0-devel-centos7 - 7.5-devel-centos7 - 7.0-devel-centos7 - - 10.0-devel-centos6 - - 9.2-devel-centos6 - - 9.1-devel-centos6 - - 9.0-devel-centos6 - - 8.0-devel-centos6 - - 7.5-devel-centos6