|
| 1 | +use std::env; |
| 2 | +use std::path::PathBuf; |
1 | 3 | use std::process::Command;
|
2 | 4 |
|
3 | 5 | const INCLUDE_PATH: &str = "nng/include";
|
@@ -127,11 +129,54 @@ pub const NNG_FLAG_NONBLOCK: core::ffi::c_int = 2;
|
127 | 129 | #[cfg(not(feature = "build-bindgen"))]
|
128 | 130 | fn generate_lib() {}
|
129 | 131 |
|
| 132 | +fn get_android_vars() -> Option<(PathBuf, &'static str)> { |
| 133 | + if let Ok(android_ndk) = env::var("ANDROID_NDK_HOME") { |
| 134 | + let mut toolchain_file = PathBuf::new(); |
| 135 | + toolchain_file.push(android_ndk); |
| 136 | + toolchain_file.push("build"); |
| 137 | + toolchain_file.push("cmake"); |
| 138 | + toolchain_file.push("android.toolchain.cmake"); |
| 139 | + |
| 140 | + let target = env::var("TARGET").unwrap(); |
| 141 | + let abi = match target.as_str() { |
| 142 | + "armv7-linux-androideabi" => "armeabi-v7a", |
| 143 | + "aarch64-linux-android" => "arm64-v8a", |
| 144 | + "i686-linux-android" => "x86", |
| 145 | + "x86_64-linux-android" => "x86_64", |
| 146 | + _ => return None, |
| 147 | + }; |
| 148 | + |
| 149 | + Some((toolchain_file, abi)) |
| 150 | + } else { |
| 151 | + None |
| 152 | + } |
| 153 | +} |
| 154 | + |
| 155 | +fn set_cmake_define_if_present(config: &mut cmake::Config, name: &str) { |
| 156 | + if let Ok(value) = env::var(name) { |
| 157 | + config.define(name, value); |
| 158 | + } else if let Ok(value) = env::var(format!("CARGO_NDK_{}", name)) { |
| 159 | + config.define(name, value); |
| 160 | + } else { |
| 161 | + println!("cargo:warning=Unable to find Android env variable '{}'. Hope for good default...", name); |
| 162 | + } |
| 163 | +} |
| 164 | + |
130 | 165 | #[cfg(feature = "tls")]
|
131 | 166 | fn build_mbedtls(nng: &mut cmake::Config, is_ninja: bool) {
|
132 | 167 | const MBEDTLS: &str = "mbedtls-2.28.8";
|
133 | 168 | let mut config = cmake::Config::new(MBEDTLS);
|
134 | 169 |
|
| 170 | + if let Some((toolchain_file, abi)) = get_android_vars() { |
| 171 | + config.define("CMAKE_TOOLCHAIN_FILE", toolchain_file); |
| 172 | + config.define("ANDROID_ABI", abi); |
| 173 | + |
| 174 | + set_cmake_define_if_present(&mut config, "ANDROID_PLATFORM"); |
| 175 | + set_cmake_define_if_present(&mut config, "ANDROID_STL"); |
| 176 | + set_cmake_define_if_present(&mut config, "ANDROID_ARM_MODE"); |
| 177 | + set_cmake_define_if_present(&mut config, "ANDROID_ARM_NEON"); |
| 178 | + } |
| 179 | + |
135 | 180 | if is_ninja {
|
136 | 181 | config.generator("Ninja");
|
137 | 182 | }
|
@@ -161,23 +206,50 @@ fn build() {
|
161 | 206 |
|
162 | 207 | let mut config = cmake::Config::new("nng");
|
163 | 208 |
|
| 209 | + if let Some((toolchain_file, abi)) = get_android_vars() { |
| 210 | + config.define("CMAKE_TOOLCHAIN_FILE", toolchain_file); |
| 211 | + config.define("ANDROID_ABI", abi); |
| 212 | + |
| 213 | + set_cmake_define_if_present(&mut config, "ANDROID_PLATFORM"); |
| 214 | + set_cmake_define_if_present(&mut config, "ANDROID_STL"); |
| 215 | + set_cmake_define_if_present(&mut config, "ANDROID_ARM_MODE"); |
| 216 | + set_cmake_define_if_present(&mut config, "ANDROID_ARM_NEON"); |
| 217 | + } |
| 218 | + |
164 | 219 | //Use ninja if present on system
|
165 | 220 | if is_ninja {
|
166 | 221 | config.generator("Ninja");
|
167 | 222 | }
|
168 | 223 |
|
169 | 224 | config.define("NNG_TESTS", "OFF");
|
170 | 225 | config.define("NNG_ENABLE_COMPAT", "OFF");
|
171 |
| - config.define("NNG_TRANSPORT_WS", "OFF"); |
172 | 226 | //File descriptor is experimental transport so don't use it
|
173 | 227 | //idk why it is ON by default
|
174 | 228 | config.define("NNG_TRANSPORT_FDC", "OFF");
|
175 | 229 |
|
| 230 | + #[cfg(not(feature = "stats"))] |
| 231 | + config.define("NNG_ENABLE_STATS", "OFF"); |
| 232 | + #[cfg(feature = "stats")] |
| 233 | + config.define("NNG_ENABLE_STATS", "ON"); |
| 234 | + |
176 | 235 | #[cfg(not(feature = "http"))]
|
177 | 236 | config.define("NNG_ENABLE_HTTP", "OFF");
|
178 | 237 | #[cfg(feature = "http")]
|
179 | 238 | config.define("NNG_ENABLE_HTTP", "ON");
|
180 | 239 |
|
| 240 | + #[cfg(not(feature = "websocket"))] |
| 241 | + { |
| 242 | + config.define("NNG_TRANSPORT_WS", "OFF"); |
| 243 | + config.define("NNG_TRANSPORT_WSS", "OFF"); |
| 244 | + } |
| 245 | + |
| 246 | + #[cfg(feature = "websocket")] |
| 247 | + { |
| 248 | + config.define("NNG_TRANSPORT_WS", "ON"); |
| 249 | + #[cfg(feature = "tls")] |
| 250 | + config.define("NNG_TRANSPORT_WSS", "ON"); |
| 251 | + } |
| 252 | + |
181 | 253 | #[cfg(not(feature = "tls"))]
|
182 | 254 | {
|
183 | 255 | config.define("NNG_TRANSPORT_TLS", "OFF");
|
|
0 commit comments