diff --git a/packages/next-swc/crates/napi/build.rs b/packages/next-swc/crates/napi/build.rs index 9fc236788932b3..1e4cb4e66355eb 100644 --- a/packages/next-swc/crates/napi/build.rs +++ b/packages/next-swc/crates/napi/build.rs @@ -1,5 +1,23 @@ +use std::{ + env, + fs::File, + io::{BufWriter, Write}, + path::Path, +}; + extern crate napi_build; fn main() { + let out_dir = env::var("OUT_DIR").expect("Outdir should exist"); + let dest_path = Path::new(&out_dir).join("triple.txt"); + let mut f = + BufWriter::new(File::create(&dest_path).expect("Failed to create target triple text")); + write!( + f, + "{}", + env::var("TARGET").expect("Target should be specified") + ) + .expect("Failed to write target triple text"); + napi_build::setup(); } diff --git a/packages/next-swc/crates/napi/src/lib.rs b/packages/next-swc/crates/napi/src/lib.rs index de6f93fe222cb6..87955d3768ba32 100644 --- a/packages/next-swc/crates/napi/src/lib.rs +++ b/packages/next-swc/crates/napi/src/lib.rs @@ -71,6 +71,8 @@ fn init(mut exports: JsObject) -> napi::Result<()> { exports.create_named_method("parse", parse::parse)?; + exports.create_named_method("getTargetTriple", util::get_target_triple)?; + Ok(()) } diff --git a/packages/next-swc/crates/napi/src/util.rs b/packages/next-swc/crates/napi/src/util.rs index 775916055b1c4f..868079445413cf 100644 --- a/packages/next-swc/crates/napi/src/util.rs +++ b/packages/next-swc/crates/napi/src/util.rs @@ -27,10 +27,17 @@ DEALINGS IN THE SOFTWARE. */ use anyhow::{Context, Error}; -use napi::{CallContext, JsBuffer, Status}; +use napi::{CallContext, Env, JsBuffer, JsString, Status}; use serde::de::DeserializeOwned; use std::any::type_name; +static TARGET_TRIPLE: &str = include_str!(concat!(env!("OUT_DIR"), "/triple.txt")); + +#[contextless_function] +pub fn get_target_triple(env: Env) -> napi::ContextlessResult { + env.create_string(TARGET_TRIPLE).map(Some) +} + pub trait MapErr: Into> { fn convert_err(self) -> napi::Result { self.into() diff --git a/packages/next/build/swc/index.js b/packages/next/build/swc/index.js index 29a32086c32787..29483f14fff349 100644 --- a/packages/next/build/swc/index.js +++ b/packages/next/build/swc/index.js @@ -233,3 +233,10 @@ export async function parse(src, options) { let parserOptions = getParserOptions(options) return bindings.parse(src, parserOptions).then((astStr) => JSON.parse(astStr)) } + +export function getBinaryMetadata() { + let bindings = loadBindingsSync() + return { + target: bindings.getTargetTriple(), + } +}