|
@@ -14,6 +14,15 @@ pub struct Options {
|
|
|
/// Value of `SDKROOT` env var
|
|
|
#[clap(long)]
|
|
|
sdk_root: PathBuf,
|
|
|
+ /// Value of `FRAMEWORK_SEARCH_PATHS` env var
|
|
|
+ #[clap(long)]
|
|
|
+ framework_search_paths: String,
|
|
|
+ /// Value of `GCC_PREPROCESSOR_DEFINITIONS` env var
|
|
|
+ #[clap(long)]
|
|
|
+ gcc_preprocessor_definitions: String,
|
|
|
+ /// Value of `HEADER_SEARCH_PATHS` env var
|
|
|
+ #[clap(long)]
|
|
|
+ header_search_paths: String,
|
|
|
/// Value of `CONFIGURATION` env var
|
|
|
#[clap(long)]
|
|
|
configuration: String,
|
|
@@ -38,6 +47,17 @@ pub fn command(options: Options) -> Result<()> {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // `xcode-script` is ran from the `gen/apple` folder.
|
|
|
+ std::env::set_current_dir(
|
|
|
+ std::env::current_dir()
|
|
|
+ .unwrap()
|
|
|
+ .parent()
|
|
|
+ .unwrap()
|
|
|
+ .parent()
|
|
|
+ .unwrap(),
|
|
|
+ )
|
|
|
+ .unwrap();
|
|
|
+
|
|
|
let profile = profile_from_configuration(&options.configuration);
|
|
|
let macos = macos_from_platform(&options.platform);
|
|
|
|
|
@@ -46,7 +66,9 @@ pub fn command(options: Options) -> Result<()> {
|
|
|
// The `PATH` env var Xcode gives us is missing any additions
|
|
|
// made by the user's profile, so we'll manually add cargo's
|
|
|
// `PATH`.
|
|
|
- let env = env.prepend_to_path(util::home_dir()?.join(".cargo/bin"));
|
|
|
+ let env = env
|
|
|
+ .explicit_env_vars(cli_options.vars)
|
|
|
+ .prepend_to_path(util::home_dir()?.join(".cargo/bin"));
|
|
|
|
|
|
if !options.sdk_root.is_dir() {
|
|
|
return Err(anyhow::anyhow!(
|
|
@@ -62,10 +84,42 @@ pub fn command(options: Options) -> Result<()> {
|
|
|
));
|
|
|
}
|
|
|
|
|
|
+ // Host flags that are used by build scripts
|
|
|
+ let macos_isysroot = {
|
|
|
+ let macos_sdk_root = options
|
|
|
+ .sdk_root
|
|
|
+ .join("../../../../MacOSX.platform/Developer/SDKs/MacOSX.sdk");
|
|
|
+ if !macos_sdk_root.is_dir() {
|
|
|
+ return Err(anyhow::anyhow!(
|
|
|
+ "Invalid SDK root {}",
|
|
|
+ macos_sdk_root.display()
|
|
|
+ ));
|
|
|
+ }
|
|
|
+ format!("-isysroot {}", macos_sdk_root.display())
|
|
|
+ };
|
|
|
+
|
|
|
let mut host_env = HashMap::<&str, &OsStr>::new();
|
|
|
|
|
|
host_env.insert("RUST_BACKTRACE", "1".as_ref());
|
|
|
|
|
|
+ host_env.insert("CFLAGS_x86_64_apple_darwin", macos_isysroot.as_ref());
|
|
|
+ host_env.insert("CXXFLAGS_x86_64_apple_darwin", macos_isysroot.as_ref());
|
|
|
+
|
|
|
+ host_env.insert(
|
|
|
+ "OBJC_INCLUDE_PATH_x86_64_apple_darwin",
|
|
|
+ include_dir.as_os_str(),
|
|
|
+ );
|
|
|
+
|
|
|
+ host_env.insert(
|
|
|
+ "FRAMEWORK_SEARCH_PATHS",
|
|
|
+ options.framework_search_paths.as_ref(),
|
|
|
+ );
|
|
|
+ host_env.insert(
|
|
|
+ "GCC_PREPROCESSOR_DEFINITIONS",
|
|
|
+ options.gcc_preprocessor_definitions.as_ref(),
|
|
|
+ );
|
|
|
+ host_env.insert("HEADER_SEARCH_PATHS", options.header_search_paths.as_ref());
|
|
|
+
|
|
|
let macos_target = Target::macos();
|
|
|
|
|
|
let isysroot = format!("-isysroot {}", options.sdk_root.display());
|
|
@@ -76,6 +130,7 @@ pub fn command(options: Options) -> Result<()> {
|
|
|
"arm64" => "aarch64_apple_ios",
|
|
|
"arm64-sim" => "aarch64_apple_ios_sim",
|
|
|
"x86_64" => "x86_64_apple_ios",
|
|
|
+ "Simulator" => continue,
|
|
|
_ => {
|
|
|
return Err(anyhow::anyhow!(
|
|
|
"Arch specified by Xcode was invalid. {} isn't a known arch",
|