import { existsSync, mkdirSync, statSync, writeFileSync } from "node:fs"; import path from "node:path"; import { spawnSync } from "node:child_process"; import { fileURLToPath } from "node:url"; const rootDir = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); const srcFile = path.join(rootDir, "native/macos/window-effects.mm"); const outFile = path.join(rootDir, "src/bun/libMacWindowEffects.dylib"); function createPlaceholder() { mkdirSync(path.dirname(outFile), { recursive: true }); writeFileSync(outFile, ""); console.log(`build-macos-effects: created placeholder dylib at ${outFile}`); } if (process.platform !== "darwin") { createPlaceholder(); process.exit(0); } if (!existsSync(srcFile)) { console.error(`build-macos-effects: missing source file ${srcFile}`); process.exit(1); } mkdirSync(path.dirname(outFile), { recursive: true }); const result = spawnSync( "xcrun", [ "clang++", "-dynamiclib", "-fobjc-arc", "-framework", "Cocoa", srcFile, "-o", outFile, ], { cwd: rootDir, stdio: "inherit" }, ); if (result.status !== 0) { process.exit(result.status ?? 1); } const { size } = statSync(outFile); console.log(`build-macos-effects: built ${outFile} (${size} bytes)`);