From 881a62869db13199eff30231d4299d36faf143df Mon Sep 17 00:00:00 2001 From: cions Date: Wed, 10 Jan 2024 22:04:14 +0900 Subject: fix: android support (#19437) --------- Signed-off-by: Matt Mastracci Co-authored-by: Matt Mastracci --- ext/fs/30_fs.js | 9 ++++++--- ext/fs/std_fs.rs | 2 +- ext/net/ops.rs | 8 ++++++-- ext/net/ops_tls.rs | 2 +- ext/node/ops/os/cpus.rs | 2 +- ext/node/polyfills/_util/os.ts | 10 ++++++++-- ext/node/polyfills/internal_binding/constants.ts | 2 +- ext/node/polyfills/internal_binding/uv.ts | 4 ++++ ext/node/polyfills/os.ts | 4 +++- 9 files changed, 31 insertions(+), 12 deletions(-) (limited to 'ext') diff --git a/ext/fs/30_fs.js b/ext/fs/30_fs.js index b0d3beeda..3b4392006 100644 --- a/ext/fs/30_fs.js +++ b/ext/fs/30_fs.js @@ -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, diff --git a/ext/fs/std_fs.rs b/ext/fs/std_fs.rs index d52879394..bb8d114a0 100644 --- a/ext/fs/std_fs.rs +++ b/ext/fs/std_fs.rs @@ -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()) } diff --git a/ext/net/ops.rs b/ext/net/ops.rs index 728c42bf6..4b2452935 100644 --- a/ext/net/ops.rs +++ b/ext/net/ops.rs @@ -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)?; diff --git a/ext/net/ops_tls.rs b/ext/net/ops_tls.rs index c0043c895..a36443977 100644 --- a/ext/net/ops_tls.rs +++ b/ext/net/ops_tls.rs @@ -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); diff --git a/ext/node/ops/os/cpus.rs b/ext/node/ops/os/cpus.rs index 5db929961..6c852dce7 100644 --- a/ext/node/ops/os/cpus.rs +++ b/ext/node/ops/os/cpus.rs @@ -236,7 +236,7 @@ pub fn cpu_info() -> Option> { } } -#[cfg(target_os = "linux")] +#[cfg(any(target_os = "android", target_os = "linux"))] pub fn cpu_info() -> Option> { use std::io::BufRead; diff --git a/ext/node/polyfills/_util/os.ts b/ext/node/polyfills/_util/os.ts index 2c01d5c6e..239419d91 100644 --- a/ext/node/polyfills/_util/os.ts +++ b/ext/node/polyfills/_util/os.ts @@ -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"; diff --git a/ext/node/polyfills/internal_binding/constants.ts b/ext/node/polyfills/internal_binding/constants.ts index cb66ac5bd..69a2dffeb 100644 --- a/ext/node/polyfills/internal_binding/constants.ts +++ b/ext/node/polyfills/internal_binding/constants.ts @@ -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: { diff --git a/ext/node/polyfills/internal_binding/uv.ts b/ext/node/polyfills/internal_binding/uv.ts index 08315b094..aa468a0a5 100644 --- a/ext/node/polyfills/internal_binding/uv.ts +++ b/ext/node/polyfills/internal_binding/uv.ts @@ -494,6 +494,8 @@ export const errorMap = new Map( ? codeToErrorDarwin : osType === "linux" ? codeToErrorLinux + : osType === "android" + ? codeToErrorLinux : osType === "freebsd" ? codeToErrorFreebsd : osType === "openbsd" @@ -508,6 +510,8 @@ export const codeMap = new Map( ? errorToCodeDarwin : osType === "linux" ? errorToCodeLinux + : osType === "android" + ? errorToCodeLinux : osType === "freebsd" ? errorToCodeFreebsd : osType === "openbsd" diff --git a/ext/node/polyfills/os.ts b/ext/node/polyfills/os.ts index af3e69d64..5d354b38b 100644 --- a/ext/node/polyfills/os.ts +++ b/ext/node/polyfills/os.ts @@ -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"; -- cgit v1.2.3