mirror of
https://github.com/denoland/deno.git
synced 2024-11-21 15:04:11 -05:00
fix: android support (#19437)
<!-- Before submitting a PR, please read https://deno.com/manual/contributing 1. Give the PR a descriptive title. Examples of good title: - fix(std/http): Fix race condition in server - docs(console): Update docstrings - feat(doc): Handle nested reexports Examples of bad title: - fix #7123 - update docs - fix bugs 2. Ensure there is a related issue and it is referenced in the PR text. 3. Ensure there are tests that cover the changes. 4. Ensure `cargo test` passes. 5. Ensure `./tools/format.js` passes without changing files. 6. Ensure `./tools/lint.js` passes. 7. Open as a draft PR if your work is still in progress. The CI won't run all steps, but you can add '[ci]' to a commit message to force it to. 8. If you would like to run the benchmarks on the CI, add the 'ci-bench' label. --> --------- Signed-off-by: Matt Mastracci <matthew@mastracci.com> Co-authored-by: Matt Mastracci <matthew@mastracci.com>
This commit is contained in:
parent
1bafde9cd0
commit
881a62869d
14 changed files with 69 additions and 24 deletions
23
cli/build.rs
23
cli/build.rs
|
@ -374,13 +374,16 @@ fn main() {
|
|||
panic!("Cross compiling with snapshot is not supported.");
|
||||
}
|
||||
|
||||
let symbols_path = std::path::Path::new("napi").join(
|
||||
format!("generated_symbol_exports_list_{}.def", env::consts::OS).as_str(),
|
||||
)
|
||||
.canonicalize()
|
||||
.expect(
|
||||
"Missing symbols list! Generate using tools/napi/generate_symbols_lists.js",
|
||||
);
|
||||
let symbols_file_name = match env::consts::OS {
|
||||
"android" => "generated_symbol_exports_list_linux.def".to_string(),
|
||||
os => format!("generated_symbol_exports_list_{}.def", os),
|
||||
};
|
||||
let symbols_path = std::path::Path::new("napi")
|
||||
.join(symbols_file_name)
|
||||
.canonicalize()
|
||||
.expect(
|
||||
"Missing symbols list! Generate using tools/napi/generate_symbols_lists.js",
|
||||
);
|
||||
|
||||
#[cfg(target_os = "windows")]
|
||||
println!(
|
||||
|
@ -413,6 +416,12 @@ fn main() {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(target_os = "android")]
|
||||
println!(
|
||||
"cargo:rustc-link-arg-bin=deno=-Wl,--export-dynamic-symbol-list={}",
|
||||
symbols_path.display()
|
||||
);
|
||||
|
||||
// To debug snapshot issues uncomment:
|
||||
// op_fetch_asset::trace_serializer();
|
||||
|
||||
|
|
|
@ -5933,7 +5933,7 @@ fn lsp_completions() {
|
|||
json!({
|
||||
"label": "build",
|
||||
"kind": 6,
|
||||
"detail": "const Deno.build: {\n target: string;\n arch: \"x86_64\" | \"aarch64\";\n os: \"darwin\" | \"linux\" | \"windows\" | \"freebsd\" | \"netbsd\" | \"aix\" | \"solaris\" | \"illumos\";\n vendor: string;\n env?: string | undefined;\n}",
|
||||
"detail": "const Deno.build: {\n target: string;\n arch: \"x86_64\" | \"aarch64\";\n os: \"darwin\" | \"linux\" | \"android\" | \"windows\" | \"freebsd\" | \"netbsd\" | \"aix\" | \"solaris\" | \"illumos\";\n vendor: string;\n env?: string | undefined;\n}",
|
||||
"documentation": {
|
||||
"kind": "markdown",
|
||||
"value": "Information related to the build of the current Deno runtime.\n\nUsers are discouraged from code branching based on this information, as\nassumptions about what is available in what build environment might change\nover time. Developers should specifically sniff out the features they\nintend to use.\n\nThe intended use for the information is for logging and debugging purposes.\n\n*@category* - Runtime Environment"
|
||||
|
|
1
cli/tsc/dts/lib.deno.ns.d.ts
vendored
1
cli/tsc/dts/lib.deno.ns.d.ts
vendored
|
@ -4958,6 +4958,7 @@ declare namespace Deno {
|
|||
os:
|
||||
| "darwin"
|
||||
| "linux"
|
||||
| "android"
|
||||
| "windows"
|
||||
| "freebsd"
|
||||
| "netbsd"
|
||||
|
|
|
@ -260,7 +260,7 @@ function createByteStruct(types) {
|
|||
// types can be "date", "bool" or "u64".
|
||||
let offset = 0;
|
||||
let str =
|
||||
'const unix = Deno.build.os === "darwin" || Deno.build.os === "linux" || Deno.build.os === "openbsd" || Deno.build.os === "freebsd"; return {';
|
||||
'const unix = Deno.build.os === "darwin" || Deno.build.os === "linux" || Deno.build.os === "android" || Deno.build.os === "openbsd" || Deno.build.os === "freebsd"; return {';
|
||||
const typeEntries = ObjectEntries(types);
|
||||
for (let i = 0; i < typeEntries.length; ++i) {
|
||||
let { 0: name, 1: type } = typeEntries[i];
|
||||
|
@ -325,8 +325,11 @@ const { 0: statStruct, 1: statBuf } = createByteStruct({
|
|||
});
|
||||
|
||||
function parseFileInfo(response) {
|
||||
const unix = core.build.os === "darwin" || core.build.os === "linux" ||
|
||||
core.build.os === "freebsd" || core.build.os === "openbsd";
|
||||
const unix = core.build.os === "darwin" ||
|
||||
core.build.os === "linux" ||
|
||||
core.build.os === "android" ||
|
||||
core.build.os === "freebsd" ||
|
||||
core.build.os === "openbsd";
|
||||
return {
|
||||
isFile: response.isFile,
|
||||
isDirectory: response.isDirectory,
|
||||
|
|
|
@ -62,7 +62,7 @@ impl FileSystem for RealFs {
|
|||
let _ = umask(prev);
|
||||
prev
|
||||
};
|
||||
#[cfg(target_os = "linux")]
|
||||
#[cfg(any(target_os = "android", target_os = "linux"))]
|
||||
{
|
||||
Ok(r.bits())
|
||||
}
|
||||
|
|
|
@ -378,7 +378,7 @@ where
|
|||
#[cfg(not(windows))]
|
||||
socket.set_reuse_address(true)?;
|
||||
if reuse_port {
|
||||
#[cfg(target_os = "linux")]
|
||||
#[cfg(any(target_os = "android", target_os = "linux"))]
|
||||
socket.set_reuse_port(true)?;
|
||||
}
|
||||
let socket_addr = socket2::SockAddr::from(addr);
|
||||
|
@ -429,7 +429,11 @@ where
|
|||
// are different from the BSDs: it _shares_ the port rather than steal it
|
||||
// from the current listener. While useful, it's not something we can
|
||||
// emulate on other platforms so we don't enable it.
|
||||
#[cfg(any(target_os = "windows", target_os = "linux"))]
|
||||
#[cfg(any(
|
||||
target_os = "windows",
|
||||
target_os = "android",
|
||||
target_os = "linux"
|
||||
))]
|
||||
socket_tmp.set_reuse_address(true)?;
|
||||
#[cfg(all(unix, not(target_os = "linux")))]
|
||||
socket_tmp.set_reuse_port(true)?;
|
||||
|
|
|
@ -471,7 +471,7 @@ where
|
|||
#[cfg(not(windows))]
|
||||
socket.set_reuse_address(true)?;
|
||||
if args.reuse_port {
|
||||
#[cfg(target_os = "linux")]
|
||||
#[cfg(any(target_os = "android", target_os = "linux"))]
|
||||
socket.set_reuse_port(true)?;
|
||||
}
|
||||
let socket_addr = socket2::SockAddr::from(bind_addr);
|
||||
|
|
|
@ -236,7 +236,7 @@ pub fn cpu_info() -> Option<Vec<CpuInfo>> {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(target_os = "linux")]
|
||||
#[cfg(any(target_os = "android", target_os = "linux"))]
|
||||
pub fn cpu_info() -> Option<Vec<CpuInfo>> {
|
||||
use std::io::BufRead;
|
||||
|
||||
|
|
|
@ -3,9 +3,15 @@
|
|||
import { core } from "ext:core/mod.js";
|
||||
const ops = core.ops;
|
||||
|
||||
export type OSType = "windows" | "linux" | "darwin" | "freebsd" | "openbsd";
|
||||
export type OSType =
|
||||
| "windows"
|
||||
| "linux"
|
||||
| "android"
|
||||
| "darwin"
|
||||
| "freebsd"
|
||||
| "openbsd";
|
||||
|
||||
export const osType: OSType = ops.op_node_build_os();
|
||||
|
||||
export const isWindows = osType === "windows";
|
||||
export const isLinux = osType === "linux";
|
||||
export const isLinux = osType === "linux" || osType === "android";
|
||||
|
|
|
@ -330,7 +330,7 @@ if (buildOs === "darwin") {
|
|||
PRIORITY_HIGHEST: -20,
|
||||
},
|
||||
};
|
||||
} else if (buildOs === "linux") {
|
||||
} else if (buildOs === "linux" || buildOs === "android") {
|
||||
os = {
|
||||
UV_UDP_REUSEADDR: 4,
|
||||
dlopen: {
|
||||
|
|
|
@ -494,6 +494,8 @@ export const errorMap = new Map<number, [string, string]>(
|
|||
? codeToErrorDarwin
|
||||
: osType === "linux"
|
||||
? codeToErrorLinux
|
||||
: osType === "android"
|
||||
? codeToErrorLinux
|
||||
: osType === "freebsd"
|
||||
? codeToErrorFreebsd
|
||||
: osType === "openbsd"
|
||||
|
@ -508,6 +510,8 @@ export const codeMap = new Map<string, number>(
|
|||
? errorToCodeDarwin
|
||||
: osType === "linux"
|
||||
? errorToCodeLinux
|
||||
: osType === "android"
|
||||
? errorToCodeLinux
|
||||
: osType === "freebsd"
|
||||
? errorToCodeFreebsd
|
||||
: osType === "openbsd"
|
||||
|
|
|
@ -151,7 +151,7 @@ export function endianness(): "BE" | "LE" {
|
|||
|
||||
/** Return free memory amount */
|
||||
export function freemem(): number {
|
||||
if (Deno.build.os === "linux") {
|
||||
if (Deno.build.os === "linux" || Deno.build.os == "android") {
|
||||
// On linux, use 'available' memory
|
||||
// https://github.com/libuv/libuv/blob/a5c01d4de3695e9d9da34cfd643b5ff0ba582ea7/src/unix/linux.c#L2064
|
||||
return Deno.systemMemoryInfo().available;
|
||||
|
@ -176,6 +176,7 @@ export function homedir(): string | null {
|
|||
case "windows":
|
||||
return Deno.env.get("USERPROFILE") || null;
|
||||
case "linux":
|
||||
case "android":
|
||||
case "darwin":
|
||||
case "freebsd":
|
||||
case "openbsd":
|
||||
|
@ -310,6 +311,7 @@ export function type(): string {
|
|||
case "windows":
|
||||
return "Windows_NT";
|
||||
case "linux":
|
||||
case "android":
|
||||
return "Linux";
|
||||
case "darwin":
|
||||
return "Darwin";
|
||||
|
|
|
@ -320,7 +320,7 @@ fn op_runtime_memory_usage(scope: &mut v8::HandleScope) -> MemoryUsage {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(target_os = "linux")]
|
||||
#[cfg(any(target_os = "android", target_os = "linux"))]
|
||||
fn rss() -> usize {
|
||||
// Inspired by https://github.com/Arc-blroth/memory-stats/blob/5364d0d09143de2a470d33161b2330914228fde9/src/linux.rs
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ type LoadAvg = (f64, f64, f64);
|
|||
const DEFAULT_LOADAVG: LoadAvg = (0.0, 0.0, 0.0);
|
||||
|
||||
pub fn loadavg() -> LoadAvg {
|
||||
#[cfg(target_os = "linux")]
|
||||
#[cfg(any(target_os = "android", target_os = "linux"))]
|
||||
{
|
||||
use libc::SI_LOAD_SHIFT;
|
||||
|
||||
|
@ -57,6 +57,22 @@ pub fn os_release() -> String {
|
|||
_ => String::from(""),
|
||||
}
|
||||
}
|
||||
#[cfg(target_os = "android")]
|
||||
{
|
||||
let mut info = std::mem::MaybeUninit::uninit();
|
||||
// SAFETY: `info` is a valid pointer to a `libc::utsname` struct.
|
||||
let res = unsafe { libc::uname(info.as_mut_ptr()) };
|
||||
if res != 0 {
|
||||
return String::from("");
|
||||
}
|
||||
// SAFETY: `uname` returns 0 on success, and `info` is initialized.
|
||||
let mut info = unsafe { info.assume_init() };
|
||||
let len = info.release.len();
|
||||
info.release[len - 1] = 0;
|
||||
// SAFETY: `info.release` is a valid pointer and NUL-terminated.
|
||||
let c_str = unsafe { std::ffi::CStr::from_ptr(info.release.as_ptr()) };
|
||||
c_str.to_string_lossy().into_owned()
|
||||
}
|
||||
#[cfg(any(
|
||||
target_vendor = "apple",
|
||||
target_os = "freebsd",
|
||||
|
@ -198,7 +214,7 @@ pub fn mem_info() -> Option<MemInfo> {
|
|||
swap_total: 0,
|
||||
swap_free: 0,
|
||||
};
|
||||
#[cfg(target_os = "linux")]
|
||||
#[cfg(any(target_os = "android", target_os = "linux"))]
|
||||
{
|
||||
let mut info = std::mem::MaybeUninit::uninit();
|
||||
// SAFETY: `info` is a valid pointer to a `libc::sysinfo` struct.
|
||||
|
@ -343,7 +359,7 @@ pub fn mem_info() -> Option<MemInfo> {
|
|||
pub fn os_uptime() -> u64 {
|
||||
let uptime: u64;
|
||||
|
||||
#[cfg(target_os = "linux")]
|
||||
#[cfg(any(target_os = "android", target_os = "linux"))]
|
||||
{
|
||||
let mut info = std::mem::MaybeUninit::uninit();
|
||||
// SAFETY: `info` is a valid pointer to a `libc::sysinfo` struct.
|
||||
|
|
Loading…
Reference in a new issue