From 76d485b68a25d57cfe70d54a25f0569a6ef9b61e Mon Sep 17 00:00:00 2001 From: Rafael Caricio Date: Mon, 21 Sep 2020 20:01:31 +0200 Subject: [PATCH] Compile to WASM using emscripten --- lvgl-sys/build.rs | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/lvgl-sys/build.rs b/lvgl-sys/build.rs index 19c14ff..9bc0450 100644 --- a/lvgl-sys/build.rs +++ b/lvgl-sys/build.rs @@ -62,25 +62,48 @@ fn main() { .include(&lv_config_dir) .compile("lvgl"); - let cc_args = [ + let mut cc_args = vec![ "-DLV_CONF_INCLUDE_SIMPLE=1", "-I", lv_config_dir.to_str().unwrap(), "-I", vendor.to_str().unwrap(), + "-fvisibility=default", ]; + // Set correct target triple for bindgen when cross-compiling + let target = env::var("TARGET").expect("Cargo build scripts always have TARGET"); + let host = env::var("HOST").expect("Cargo build scripts always have HOST"); + if target != host { + cc_args.push("-target"); + cc_args.push(target.as_str()); + } + + let mut additional_args = Vec::new(); + if target.ends_with("emscripten") { + if let Ok(em_path) = env::var("EMSDK") { + additional_args.push("-I".to_string()); + additional_args.push(format!("{}/upstream/emscripten/system/include/libc", em_path)); + additional_args.push("-I".to_string()); + additional_args.push(format!("{}/upstream/emscripten/system/lib/libc/musl/arch/emscripten", em_path)); + additional_args.push("-I".to_string()); + additional_args.push(format!("{}/upstream/emscripten/system/include/SDL", em_path)); + } + } + let out_path = PathBuf::from(env::var("OUT_DIR").unwrap()); - bindgen::Builder::default() + let bindings = bindgen::Builder::default() .header(shims_dir.join("lvgl_sys.h").to_str().unwrap()) .layout_tests(false) .use_core() .rustfmt_bindings(true) .ctypes_prefix("cty") .clang_args(&cc_args) + .clang_args(&additional_args) .generate() - .expect("Unable to generate bindings") - .write_to_file(out_path.join("bindings.rs")) + .expect("Unable to generate bindings"); + + bindings.write_to_file(out_path.join("bindings.rs")) .expect("Can't write bindings!"); }