11const fs = require ( 'fs' )
22const path = require ( 'path' )
33const childProcess = require ( 'child_process' )
4+ const { getEffectiveArch } = require ( './lib/arch' )
45
56const exe = process . platform === 'win32' ? '.exe' : ''
6- const binDir = path . join ( __dirname , 'bin' , `${ process . platform } -${ process . arch } ` )
7+ const binDir = path . join ( __dirname , 'bin' , `${ process . platform } -${ getEffectiveArch ( ) } ` )
78
89const minidumpStackwalkDest = path . join ( binDir , 'minidump_stackwalk' ) + exe
910const minidumpDumpDest = path . join ( binDir , 'minidump_dump' ) + exe
@@ -26,16 +27,24 @@ function spawnSync (...args) {
2627 }
2728}
2829
29- const buildDir = path . join ( __dirname , 'build' )
30+ const buildDir = path . join ( __dirname , 'build' , getEffectiveArch ( ) )
3031if ( ! fs . existsSync ( buildDir ) ) {
3132 fs . mkdirSync ( buildDir , { recursive : true } )
3233}
3334
34- spawnSync ( path . join ( __dirname , 'deps' , 'breakpad' , 'configure' ) , [ ] , {
35+ let overrideArch = ''
36+ let crossCompileHost = ''
37+ if ( getEffectiveArch ( ) !== process . arch && process . platform === 'darwin' ) {
38+ overrideArch = getEffectiveArch ( ) === 'arm64' ? 'arm64' : 'x86_64'
39+ crossCompileHost = 'x86_64-apple-darwin20.6.0'
40+ }
41+
42+ spawnSync ( path . join ( __dirname , 'deps' , 'breakpad' , 'configure' ) , crossCompileHost ? [ `--host=${ crossCompileHost } ` ] : [ ] , {
3543 cwd : buildDir ,
3644 env : {
3745 ...process . env ,
38- CPPFLAGS : `-I${ path . relative ( buildDir , path . join ( __dirname , 'deps' ) ) } `
46+ CPPFLAGS : [ `-I${ path . relative ( buildDir , path . join ( __dirname , 'deps' ) ) } ` , ...( overrideArch ? [ `-arch ${ overrideArch } ` ] : [ ] ) ] . join ( ' ' ) ,
47+ LDFLAGS : overrideArch ? `-arch ${ overrideArch } ` : undefined
3948 } ,
4049 stdio : 'inherit'
4150} )
@@ -59,23 +68,33 @@ if (!fs.existsSync(binDir)) {
5968 fs . mkdirSync ( binDir , { recursive : true } )
6069}
6170
62- const minidumpStackwalk = path . resolve ( __dirname , 'build' , 'src' , 'processor' , 'minidump_stackwalk' ) + exe
71+ const minidumpStackwalk = path . resolve ( buildDir , 'src' , 'processor' , 'minidump_stackwalk' ) + exe
6372fs . copyFileSync ( minidumpStackwalk , minidumpStackwalkDest )
6473
65- const minidumpDump = path . resolve ( __dirname , 'build' , 'src' , 'processor' , 'minidump_dump' ) + exe
74+ const minidumpDump = path . resolve ( buildDir , 'src' , 'processor' , 'minidump_dump' ) + exe
6675fs . copyFileSync ( minidumpDump , minidumpDumpDest )
6776
6877const dumpSyms = ( ( ) => {
6978 if ( process . platform === 'darwin' ) {
7079 return path . resolve ( __dirname , 'deps' , 'breakpad' , 'src' , 'tools' , 'mac' , 'dump_syms' , 'build' , 'Release' , 'dump_syms' )
7180 } else if ( process . platform === 'linux' ) {
72- return path . resolve ( __dirname , 'build' , 'src' , 'tools' , 'linux' , 'dump_syms' , 'dump_syms' )
81+ return path . resolve ( buildDir , 'src' , 'tools' , 'linux' , 'dump_syms' , 'dump_syms' )
7382 }
7483} ) ( )
7584fs . copyFileSync ( dumpSyms , dumpSymsDest )
7685
77- fs . readdirSync ( binDir ) . forEach ( file => stripBin ( path . join ( binDir , file ) ) )
86+ fs . readdirSync ( binDir ) . forEach ( file => {
87+ const absFile = path . join ( binDir , file )
88+ stripBin ( absFile )
89+ maybeSignBin ( absFile )
90+ } )
7891
7992function stripBin ( file ) {
8093 return childProcess . execFileSync ( process . env . STRIP || 'strip' , [ file , process . platform === 'darwin' ? '-Sx' : '--strip-all' ] )
8194}
95+
96+ function maybeSignBin ( file ) {
97+ if ( process . platform !== 'darwin' ) return
98+
99+ return childProcess . execFileSync ( 'codesign' , [ '--sign' , '-' , '--force' , '--preserve-metadata=entitlements,requirements,flags,runtime' , file ] )
100+ }
0 commit comments