1
1
const fs = require ( 'fs' )
2
2
const path = require ( 'path' )
3
3
const childProcess = require ( 'child_process' )
4
+ const { getEffectiveArch } = require ( './lib/arch' )
4
5
5
6
const 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 ( ) } ` )
7
8
8
9
const minidumpStackwalkDest = path . join ( binDir , 'minidump_stackwalk' ) + exe
9
10
const minidumpDumpDest = path . join ( binDir , 'minidump_dump' ) + exe
@@ -26,16 +27,24 @@ function spawnSync (...args) {
26
27
}
27
28
}
28
29
29
- const buildDir = path . join ( __dirname , 'build' )
30
+ const buildDir = path . join ( __dirname , 'build' , getEffectiveArch ( ) )
30
31
if ( ! fs . existsSync ( buildDir ) ) {
31
32
fs . mkdirSync ( buildDir , { recursive : true } )
32
33
}
33
34
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 } ` ] : [ ] , {
35
43
cwd : buildDir ,
36
44
env : {
37
45
...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
39
48
} ,
40
49
stdio : 'inherit'
41
50
} )
@@ -59,23 +68,33 @@ if (!fs.existsSync(binDir)) {
59
68
fs . mkdirSync ( binDir , { recursive : true } )
60
69
}
61
70
62
- const minidumpStackwalk = path . resolve ( __dirname , 'build' , 'src' , 'processor' , 'minidump_stackwalk' ) + exe
71
+ const minidumpStackwalk = path . resolve ( buildDir , 'src' , 'processor' , 'minidump_stackwalk' ) + exe
63
72
fs . copyFileSync ( minidumpStackwalk , minidumpStackwalkDest )
64
73
65
- const minidumpDump = path . resolve ( __dirname , 'build' , 'src' , 'processor' , 'minidump_dump' ) + exe
74
+ const minidumpDump = path . resolve ( buildDir , 'src' , 'processor' , 'minidump_dump' ) + exe
66
75
fs . copyFileSync ( minidumpDump , minidumpDumpDest )
67
76
68
77
const dumpSyms = ( ( ) => {
69
78
if ( process . platform === 'darwin' ) {
70
79
return path . resolve ( __dirname , 'deps' , 'breakpad' , 'src' , 'tools' , 'mac' , 'dump_syms' , 'build' , 'Release' , 'dump_syms' )
71
80
} 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' )
73
82
}
74
83
} ) ( )
75
84
fs . copyFileSync ( dumpSyms , dumpSymsDest )
76
85
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
+ } )
78
91
79
92
function stripBin ( file ) {
80
93
return childProcess . execFileSync ( process . env . STRIP || 'strip' , [ file , process . platform === 'darwin' ? '-Sx' : '--strip-all' ] )
81
94
}
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