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,22 @@ 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+ if ( getEffectiveArch ( ) !== process . arch && process . platform === 'darwin' ) {
37+ overrideArch = getEffectiveArch ( ) === 'arm64' ? 'arm64' : 'x86_64' ;
38+ }
39+
40+ spawnSync ( path . join ( __dirname , 'deps' , 'breakpad' , 'configure' ) , [ '--host=x86_64-apple-darwin20.6.0' ] , {
3541 cwd : buildDir ,
3642 env : {
3743 ...process . env ,
38- CPPFLAGS : `-I${ path . relative ( buildDir , path . join ( __dirname , 'deps' ) ) } `
44+ CPPFLAGS : [ `-I${ path . relative ( buildDir , path . join ( __dirname , 'deps' ) ) } ` , ...( overrideArch ? [ `-arch ${ overrideArch } ` ] : [ ] ) ] . join ( ' ' ) ,
45+ LDFLAGS : overrideArch ? `-arch ${ overrideArch } ` : undefined ,
3946 } ,
4047 stdio : 'inherit'
4148} )
@@ -59,23 +66,33 @@ if (!fs.existsSync(binDir)) {
5966 fs . mkdirSync ( binDir , { recursive : true } )
6067}
6168
62- const minidumpStackwalk = path . resolve ( __dirname , 'build' , 'src' , 'processor' , 'minidump_stackwalk' ) + exe
69+ const minidumpStackwalk = path . resolve ( buildDir , 'src' , 'processor' , 'minidump_stackwalk' ) + exe
6370fs . copyFileSync ( minidumpStackwalk , minidumpStackwalkDest )
6471
65- const minidumpDump = path . resolve ( __dirname , 'build' , 'src' , 'processor' , 'minidump_dump' ) + exe
72+ const minidumpDump = path . resolve ( buildDir , 'src' , 'processor' , 'minidump_dump' ) + exe
6673fs . copyFileSync ( minidumpDump , minidumpDumpDest )
6774
6875const dumpSyms = ( ( ) => {
6976 if ( process . platform === 'darwin' ) {
7077 return path . resolve ( __dirname , 'deps' , 'breakpad' , 'src' , 'tools' , 'mac' , 'dump_syms' , 'build' , 'Release' , 'dump_syms' )
7178 } else if ( process . platform === 'linux' ) {
72- return path . resolve ( __dirname , 'build' , 'src' , 'tools' , 'linux' , 'dump_syms' , 'dump_syms' )
79+ return path . resolve ( buildDir , 'src' , 'tools' , 'linux' , 'dump_syms' , 'dump_syms' )
7380 }
7481} ) ( )
7582fs . copyFileSync ( dumpSyms , dumpSymsDest )
7683
77- fs . readdirSync ( binDir ) . forEach ( file => stripBin ( path . join ( binDir , file ) ) )
84+ fs . readdirSync ( binDir ) . forEach ( file => {
85+ const absFile = path . join ( binDir , file )
86+ stripBin ( absFile )
87+ maybeSignBin ( absFile )
88+ } )
7889
7990function stripBin ( file ) {
8091 return childProcess . execFileSync ( process . env . STRIP || 'strip' , [ file , process . platform === 'darwin' ? '-Sx' : '--strip-all' ] )
8192}
93+
94+ function maybeSignBin ( file ) {
95+ if ( process . platform !== 'darwin' ) return
96+
97+ return childProcess . execFileSync ( 'codesign' , [ '--sign' , '-' , '--force' , '--preserve-metadata=entitlements,requirements,flags,runtime' , file ] )
98+ }
0 commit comments