Skip to content

Commit 03c8f49

Browse files
committed
Merge branch 'emscripten'
2 parents c0cce79 + a7bc012 commit 03c8f49

File tree

1 file changed

+41
-9
lines changed

1 file changed

+41
-9
lines changed

src/lib.rs

Lines changed: 41 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -512,10 +512,7 @@ impl Config {
512512
let cmake_prefix_path = env::join_paths(&cmake_prefix_path).unwrap();
513513

514514
// Build up the first cmake command to build the build system.
515-
let executable = self
516-
.getenv_target_os("CMAKE")
517-
.unwrap_or_else(|| OsString::from("cmake"));
518-
let mut cmd = Command::new(&executable);
515+
let mut cmd = self.cmake_configure_command(&target);
519516

520517
if self.verbose_cmake {
521518
cmd.arg("-Wdev");
@@ -775,11 +772,7 @@ impl Config {
775772
}
776773

777774
// And build!
778-
let target = self
779-
.cmake_target
780-
.clone()
781-
.unwrap_or_else(|| "install".to_string());
782-
let mut cmd = Command::new(&executable);
775+
let mut cmd = self.cmake_build_command(&target);
783776
cmd.current_dir(&build);
784777

785778
for &(ref k, ref v) in c_compiler.env().iter().chain(&self.env) {
@@ -810,6 +803,10 @@ impl Config {
810803
cmd.arg("--build").arg(".");
811804

812805
if !self.no_build_target {
806+
let target = self
807+
.cmake_target
808+
.clone()
809+
.unwrap_or_else(|| "install".to_string());
813810
cmd.arg("--target").arg(target);
814811
}
815812

@@ -830,6 +827,41 @@ impl Config {
830827
dst
831828
}
832829

830+
fn cmake_executable(&mut self) -> OsString {
831+
self.getenv_target_os("CMAKE")
832+
.unwrap_or_else(|| OsString::from("cmake"))
833+
}
834+
835+
// If we are building for Emscripten, wrap the calls to CMake
836+
// as "emcmake cmake ..." and "emmake cmake --build ...".
837+
// https://emscripten.org/docs/compiling/Building-Projects.html
838+
839+
fn cmake_configure_command(&mut self, target: &str) -> Command {
840+
if target.contains("emscripten") {
841+
let emcmake = self
842+
.getenv_target_os("EMCMAKE")
843+
.unwrap_or_else(|| OsString::from("emcmake"));
844+
let mut cmd = Command::new(emcmake);
845+
cmd.arg(self.cmake_executable());
846+
cmd
847+
} else {
848+
Command::new(self.cmake_executable())
849+
}
850+
}
851+
852+
fn cmake_build_command(&mut self, target: &str) -> Command {
853+
if target.contains("emscripten") {
854+
let emmake = self
855+
.getenv_target_os("EMMAKE")
856+
.unwrap_or_else(|| OsString::from("emmake"));
857+
let mut cmd = Command::new(emmake);
858+
cmd.arg(self.cmake_executable());
859+
cmd
860+
} else {
861+
Command::new(self.cmake_executable())
862+
}
863+
}
864+
833865
fn getenv_os(&mut self, v: &str) -> Option<OsString> {
834866
if let Some(val) = self.env_cache.get(v) {
835867
return val.clone();

0 commit comments

Comments
 (0)