@@ -10,15 +10,20 @@ set -e
10
10
# ------------------------------------------------------------------------
11
11
12
12
TARGET_PLATFORM=$1
13
+ TARGET_ARCH=$2
13
14
14
- echo " CONFIGURING FOR $TARGET_PLATFORM "
15
+ echo " CONFIGURING FOR $TARGET_PLATFORM $TARGET_ARCH "
15
16
16
17
if [ -z " $TARGET_PLATFORM " ]; then
17
18
echo ' A target platform (linux/win32/darwin) is required'
18
19
exit 1
19
20
fi
20
21
21
- TARGET_ARCH=` node -e ' console.log(process.arch)' `
22
+ if [ -z " $TARGET_ARCH " ]; then
23
+ echo ' A target platform (x64/arm/arm64) is required'
24
+ exit 1
25
+ fi
26
+
22
27
23
28
export PATH=./node_modules/.bin:$PATH
24
29
@@ -27,6 +32,10 @@ export npm_config_platform=$TARGET_PLATFORM
27
32
# Pick the target platform for node-pre-gyp:
28
33
export npm_config_target_platform=$TARGET_PLATFORM
29
34
35
+ # Same for architecture:
36
+ export npm_config_arch=$TARGET_ARCH
37
+ export npm_config_target_arch=$TARGET_ARCH
38
+
30
39
# Disable node-gyp-build for win-version-info only. Without this, it's
31
40
# rebuilt for Linux, even given $TARGET_PLATFORM=win32, and then breaks
32
41
# at runtime even though there are valid win32 prebuilds available.
@@ -45,7 +54,7 @@ rm -rf ./tmp || true
45
54
# ------------------------------------------------------------------------
46
55
47
56
echo
48
- echo " BUILDING FOR $TARGET_PLATFORM "
57
+ echo " BUILDING FOR $TARGET_PLATFORM $TARGET_ARCH "
49
58
echo
50
59
51
60
oclif-dev pack --targets=$TARGET
62
71
# Whitelist (as a regex) for packages that may include binaries for other platforms
63
72
PACKAGE_WHITELIST=' '
64
73
74
+ case " $TARGET_ARCH " in
75
+ x64)
76
+ EXPECTED_ARCH_STRING=' x86[_-]64|80386'
77
+ ;;
78
+ arm64)
79
+ EXPECTED_ARCH_STRING=' arm64'
80
+ ;;
81
+ * )
82
+ echo " Unknown arch $TARGET_ARCH "
83
+ exit 1
84
+ ;;
85
+ esac
86
+
65
87
case " $TARGET_PLATFORM " in
66
88
linux)
67
- EXPECTED_BIN_STRING= " ELF"
89
+ EXPECTED_PLATFORM_STRING= ' ELF'
68
90
# Registry-js builds raw on non-Windows, but never used
69
91
# Win-version info includes prebuilds for Windows on all platforms
70
- PACKAGE_WHITELIST=" registry-js|win-version-info/prebuilds"
92
+ PACKAGE_WHITELIST=' registry-js|win-version-info/prebuilds'
71
93
;;
72
94
win32)
73
- EXPECTED_BIN_STRING= " MS Windows"
74
- PACKAGE_WHITELIST=" "
95
+ EXPECTED_PLATFORM_STRING= ' MS Windows'
96
+ PACKAGE_WHITELIST=' '
75
97
;;
76
98
darwin)
77
- EXPECTED_BIN_STRING= " Mach-O"
99
+ EXPECTED_PLATFORM_STRING= ' Mach-O'
78
100
# Registry-js builds raw on non-Windows, but never used
79
101
# Win-version info includes prebuilds for Windows on all platforms
80
- PACKAGE_WHITELIST=" registry-js|win-version-info/prebuilds"
102
+ PACKAGE_WHITELIST=' registry-js|win-version-info/prebuilds'
81
103
;;
82
104
* )
83
105
echo " Unknown platform $TARGET_PLATFORM "
@@ -86,7 +108,7 @@ case "$TARGET_PLATFORM" in
86
108
esac
87
109
88
110
echo " CHECKING FOR BAD CONFIG"
89
- echo " EXPECTING: $EXPECTED_BIN_STRING "
111
+ echo " EXPECTING: $EXPECTED_PLATFORM_STRING and $EXPECTED_ARCH_STRING "
90
112
echo " WHITELIST: $PACKAGE_WHITELIST "
91
113
92
114
# Find all *.node files in the build that `file` doesn't describe with the above
@@ -98,7 +120,7 @@ NATIVE_BINARIES=$(
98
120
)
99
121
echo " NATIVE BINS: $NATIVE_BINARIES "
100
122
101
- BAD_BINS=$( echo " $NATIVE_BINARIES " | grep -v " $EXPECTED_BIN_STRING " || true)
123
+ BAD_BINS=$( echo " $NATIVE_BINARIES " | grep -vE " $EXPECTED_PLATFORM_STRING " | grep -vE " $EXPECTED_ARCH_STRING " || true)
102
124
103
125
if [[ ! -z " $PACKAGE_WHITELIST " ]]; then
104
126
BAD_BINS=$( echo " $BAD_BINS " | grep -E -v " $PACKAGE_WHITELIST " || true)
@@ -108,7 +130,7 @@ if [ `echo "$BAD_BINS" | wc -w` -ne 0 ]; then
108
130
echo
109
131
echo " ***** BUILD FAILED *****"
110
132
echo
111
- echo " Invalid build! $TARGET_PLATFORM build has binaries for the wrong platform."
133
+ echo " Invalid build! $TARGET build has binaries for the wrong platform."
112
134
echo " Bad binaries are:"
113
135
echo " $BAD_BINS "
114
136
echo
0 commit comments