feat(modulo): implement building process on macOS
This commit is contained in:
parent
074eae309c
commit
ed60ae46cf
|
@ -88,7 +88,9 @@ fn build_native() {
|
|||
])
|
||||
.spawn()
|
||||
.expect("failed to execute nmake");
|
||||
handle.wait().expect("unable to wait for nmake command");
|
||||
if !handle.wait().expect("unable to wait for nmake command").success() {
|
||||
panic!("nmake returned non-zero exit code!");
|
||||
}
|
||||
}
|
||||
|
||||
// Make sure wxWidgets is compiled
|
||||
|
@ -128,50 +130,90 @@ fn build_native() {
|
|||
);
|
||||
}
|
||||
|
||||
// TODO: add documentation for macos
|
||||
// Install LLVM:
|
||||
// brew install llvm
|
||||
// Compile wxWidgets:
|
||||
// mkdir build-cocoa
|
||||
// cd build-cocoa
|
||||
// ../configure --disable-shared --enable-macosx_arch=x86_64
|
||||
// make -j6
|
||||
//
|
||||
// Run
|
||||
// WXMAC=/Users/freddy/wxWidgets cargo run
|
||||
#[cfg(target_os = "macos")]
|
||||
fn build_native() {
|
||||
let wx_location = std::env::var("WXMAC").expect(
|
||||
"unable to find wxWidgets directory, please add a WXMAC env variable with the absolute path",
|
||||
);
|
||||
let wx_path = PathBuf::from(&wx_location);
|
||||
println!("{}", wx_location);
|
||||
if !wx_path.is_dir() {
|
||||
panic!("The given WXMAC directory is not valid");
|
||||
use std::process::Command;
|
||||
|
||||
let project_dir =
|
||||
PathBuf::from(std::env::var("CARGO_MANIFEST_DIR").expect("missing CARGO_MANIFEST_DIR"));
|
||||
let wx_archive = project_dir.join("vendor").join(WX_WIDGETS_ARCHIVE_NAME);
|
||||
if !wx_archive.is_file() {
|
||||
panic!("could not find wxWidgets archive!");
|
||||
}
|
||||
|
||||
let out_dir = PathBuf::from(std::env::var("OUT_DIR").expect("missing OUT_DIR"));
|
||||
let out_wx_dir = out_dir.join("wx");
|
||||
|
||||
if !out_wx_dir.is_dir() {
|
||||
// Extract the wxWidgets archive
|
||||
let wx_archive =
|
||||
std::fs::File::open(&wx_archive).expect("unable to open wxWidgets source archive");
|
||||
let mut archive = zip::ZipArchive::new(wx_archive).expect("unable to read wxWidgets archive");
|
||||
archive
|
||||
.extract(&out_wx_dir)
|
||||
.expect("unable to extract wxWidgets source dir");
|
||||
|
||||
// Compile wxWidgets
|
||||
let build_dir = out_wx_dir.join("build-cocoa");
|
||||
std::fs::create_dir_all(&build_dir).expect("unable to create build-cocoa directory");
|
||||
|
||||
let target_arch = match std::env::var("CARGO_CFG_TARGET_ARCH").expect("unable to read target arch").as_str() {
|
||||
"x86_64" => "x86_64",
|
||||
"aarch64" => "arm64",
|
||||
arch => panic!("unsupported arch {}", arch),
|
||||
};
|
||||
|
||||
let mut handle = Command::new(out_wx_dir.join("configure"))
|
||||
.current_dir(
|
||||
build_dir.to_string_lossy().to_string()
|
||||
)
|
||||
.args(&[
|
||||
"--disable-shared",
|
||||
"--without-libtiff",
|
||||
&format!("--enable-macosx_arch={}", target_arch),
|
||||
])
|
||||
.spawn()
|
||||
.expect("failed to execute configure");
|
||||
if !handle.wait().expect("unable to wait for configure command").success() {
|
||||
panic!("configure returned non-zero exit code!");
|
||||
}
|
||||
|
||||
let mut handle = Command::new("make")
|
||||
.current_dir(
|
||||
build_dir.to_string_lossy().to_string()
|
||||
)
|
||||
.args(&[
|
||||
"-j8",
|
||||
])
|
||||
.spawn()
|
||||
.expect("failed to execute make");
|
||||
if !handle.wait().expect("unable to wait for make command").success() {
|
||||
panic!("make returned non-zero exit code!");
|
||||
}
|
||||
}
|
||||
|
||||
// Make sure wxWidgets is compiled
|
||||
if !wx_path.join("build-cocoa").is_dir() {
|
||||
if !out_wx_dir.join("build-cocoa").is_dir() {
|
||||
panic!("wxWidgets is not compiled correctly, missing 'build-cocoa/' directory")
|
||||
}
|
||||
|
||||
let config_path = wx_path.join("build-cocoa").join("wx-config");
|
||||
let config_path = out_wx_dir.join("build-cocoa").join("wx-config");
|
||||
let cpp_flags = get_cpp_flags(&config_path);
|
||||
|
||||
let mut build = cc::Build::new();
|
||||
build
|
||||
.cpp(true)
|
||||
.file("native/form.cpp")
|
||||
.file("native/common.cpp")
|
||||
.file("native/search.cpp")
|
||||
.file("native/mac.mm");
|
||||
.file("src/sys/form/form.cpp")
|
||||
.file("src/sys/common/common.cpp")
|
||||
.file("src/sys/search/search.cpp")
|
||||
.file("src/sys/common/mac.mm");
|
||||
build.flag("-std=c++17");
|
||||
|
||||
for flag in cpp_flags {
|
||||
build.flag(&flag);
|
||||
}
|
||||
|
||||
build.compile("modulosys");
|
||||
build.compile("espansomodulosys");
|
||||
|
||||
// Render linker flags
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user