Skip to content

Commit 3568be9

Browse files
authored
Auto merge of #3332 - alexcrichton:build-openssl, r=alexcrichton
Compile OpenSSL from source on OSX I'm seeing a bunch of weird illegal instructions on OSX nightlies for Cargo. My guess is that they're all related to OpenSSL linking. Right now we're linking from Homebrew but I have a sneaking suspicion that it compiles with `-march=native` rather than what we'd like as a portable binary. To work around this compile OpenSSL ourselves and link it that way. Note that I believe this won't bring in the certificate trust store of OpenSSL on OSX (or at least not the right one from the keychain). We shouldn't need that, however, as OpenSSL is just used as the cryptographic primitives in libssh2 and Cargo itself. So in that sense we shouldn't need it for actually SSL at all.
2 parents 77cc65f + 8ab8595 commit 3568be9

File tree

2 files changed

+18
-31
lines changed

2 files changed

+18
-31
lines changed

.travis.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ matrix:
2929
MACOSX_DEPLOYMENT_TARGET=10.7
3030
CFG_DISABLE_CROSS_TESTS=1
3131
os: osx
32-
install: brew uninstall openssl && brew install openssl --universal --without-test
3332

3433
# stable musl target, tested
3534
- env: TARGET=x86_64-unknown-linux-musl

Makefile.in

Lines changed: 18 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -172,17 +172,19 @@ OPENSSL_OS_aarch64-unknown-linux-gnu := linux-aarch64
172172
OPENSSL_OS_arm-unknown-linux-gnueabi := linux-armv4
173173
OPENSSL_OS_arm-unknown-linux-gnueabihf := linux-armv4
174174
OPENSSL_OS_armv7-unknown-linux-gnueabihf := linux-armv4
175+
OPENSSL_OS_i686-apple-darwin := darwin-i386-cc
175176
OPENSSL_OS_i686-unknown-freebsd := BSD-x86-elf
176177
OPENSSL_OS_i686-unknown-linux-gnu := linux-elf
177178
OPENSSL_OS_i686-unknown-linux-musl := linux-elf
178179
OPENSSL_OS_mips-unknown-linux-gnu := linux-mips32
179-
OPENSSL_OS_mipsel-unknown-linux-gnu := linux-mips32
180180
OPENSSL_OS_mips64-unknown-linux-gnuabi64 := linux64-mips64
181181
OPENSSL_OS_mips64el-unknown-linux-gnuabi64 := linux64-mips64
182+
OPENSSL_OS_mipsel-unknown-linux-gnu := linux-mips32
182183
OPENSSL_OS_powerpc-unknown-linux-gnu := linux-ppc
183184
OPENSSL_OS_powerpc64-unknown-linux-gnu := linux-ppc64
184185
OPENSSL_OS_powerpc64le-unknown-linux-gnu := linux-ppc64le
185186
OPENSSL_OS_s390x-unknown-linux-gnu := linux64-s390x
187+
OPENSSL_OS_x86_64-apple-darwin := darwin64-x86_64-cc
186188
OPENSSL_OS_x86_64-unknown-freebsd := BSD-x86_64
187189
OPENSSL_OS_x86_64-unknown-linux-gnu := linux-x86_64
188190
OPENSSL_OS_x86_64-unknown-linux-musl := linux-x86_64
@@ -192,6 +194,7 @@ OPENSSL_AR_aarch64-unknown-linux-gnu := aarch64-linux-gnu-ar
192194
OPENSSL_AR_arm-unknown-linux-gnueabi := arm-linux-gnueabi-ar
193195
OPENSSL_AR_arm-unknown-linux-gnueabihf := arm-linux-gnueabihf-ar
194196
OPENSSL_AR_armv7-unknown-linux-gnueabihf := armv7-linux-gnueabihf-ar
197+
OPENSSL_AR_i686-apple-darwin := ar
195198
OPENSSL_AR_i686-unknown-freebsd := i686-unknown-freebsd10-ar
196199
OPENSSL_AR_i686-unknown-linux-gnu := ar
197200
OPENSSL_AR_i686-unknown-linux-musl := ar
@@ -203,6 +206,7 @@ OPENSSL_AR_powerpc-unknown-linux-gnu := powerpc-linux-gnu-ar
203206
OPENSSL_AR_powerpc64-unknown-linux-gnu := powerpc64-linux-gnu-ar
204207
OPENSSL_AR_powerpc64le-unknown-linux-gnu := powerpc64le-linux-gnu-ar
205208
OPENSSL_AR_s390x-unknown-linux-gnu := s390x-linux-gnu-ar
209+
OPENSSL_AR_x86_64-apple-darwin := ar
206210
OPENSSL_AR_x86_64-unknown-freebsd := x86_64-unknown-freebsd10-ar
207211
OPENSSL_AR_x86_64-unknown-linux-gnu := ar
208212
OPENSSL_AR_x86_64-unknown-linux-musl := ar
@@ -211,6 +215,7 @@ OPENSSL_CC_aarch64-unknown-linux-gnu := aarch64-linux-gnu-gcc
211215
OPENSSL_CC_arm-unknown-linux-gnueabi := arm-linux-gnueabi-gcc
212216
OPENSSL_CC_arm-unknown-linux-gnueabihf := arm-linux-gnueabihf-gcc
213217
OPENSSL_CC_armv7-unknown-linux-gnueabihf := armv7-linux-gnueabihf-gcc
218+
OPENSSL_CC_i686-apple-darwin := clang
214219
OPENSSL_CC_i686-unknown-freebsd := i686-unknown-freebsd10-gcc
215220
OPENSSL_CC_i686-unknown-linux-gnu := gcc
216221
OPENSSL_CC_i686-unknown-linux-musl := musl-gcc
@@ -222,18 +227,17 @@ OPENSSL_CC_powerpc-unknown-linux-gnu := powerpc-linux-gnu-gcc
222227
OPENSSL_CC_powerpc64-unknown-linux-gnu := powerpc64-linux-gnu-gcc-5
223228
OPENSSL_CC_powerpc64le-unknown-linux-gnu := powerpc64le-linux-gnu-gcc
224229
OPENSSL_CC_s390x-unknown-linux-gnu := s390x-linux-gnu-gcc
230+
OPENSSL_CC_x86_64-apple-darwin := clang
225231
OPENSSL_CC_x86_64-unknown-freebsd := x86_64-unknown-freebsd10-gcc
226232
OPENSSL_CC_x86_64-unknown-linux-gnu := gcc
227233
OPENSSL_CC_x86_64-unknown-linux-musl := musl-gcc
228234
OPENSSL_CC_x86_64-unknown-netbsd := x86_64-unknown-netbsd-gcc
229235

230236
SETARCH_i686-unknown-linux-gnu := setarch i386
237+
OPENSSL_CFLAGS_i686-apple-darwin := -m32
231238
OPENSSL_CFLAGS_i686-unknown-linux-gnu := -m32
232239
OPENSSL_CFLAGS_i686-unknown-linux-musl := -m32
233240

234-
LIPO_FAMILY_i686-apple-darwin := i386
235-
LIPO_FAMILY_x86_64-apple-darwin := x86_64
236-
237241
define BUILD_OPENSSL
238242

239243
ifdef CFG_ENABLE_NIGHTLY
@@ -265,30 +269,7 @@ test-unit-$(1): export OPENSSL_DIR := $$(OPENSSL_INSTALL_$(1))
265269
# build libz statically into the cargo we're producing
266270
cargo-$(1): export LIBZ_SYS_STATIC := 1
267271

268-
else ifdef LIPO_FAMILY_$(1)
269-
270-
target/openssl/$(1).stamp:
271-
@echo installing from `brew --prefix openssl`
272-
@rm -rf $$(OPENSSL_INSTALL_$(1))
273-
mkdir -p $$(OPENSSL_INSTALL_$(1))/lib
274-
cp -r `brew --prefix openssl`/include $$(OPENSSL_INSTALL_$(1))/include
275-
cp -r `brew --prefix openssl`/lib/pkgconfig $$(OPENSSL_INSTALL_$(1))/lib/pkgconfig
276-
lipo -output $$(OPENSSL_INSTALL_$(1))/lib/libssl.a \
277-
-extract_family $$(LIPO_FAMILY_$(1)) \
278-
`brew --prefix openssl`/lib/libssl.a || \
279-
cp `brew --prefix openssl`/lib/libssl.a \
280-
$$(OPENSSL_INSTALL_$(1))/lib/libssl.a
281-
lipo -output $$(OPENSSL_INSTALL_$(1))/lib/libcrypto.a \
282-
-extract_family $$(LIPO_FAMILY_$(1)) \
283-
`brew --prefix openssl`/lib/libcrypto.a || \
284-
cp `brew --prefix openssl`/lib/libcrypto.a \
285-
$$(OPENSSL_INSTALL_$(1))/lib/libcrypto.a
286-
touch $$@
287-
288-
cargo-$(1): export OPENSSL_DIR := $$(OPENSSL_INSTALL_$(1))
289-
test-unit-$(1): export OPENSSL_DIR := $$(OPENSSL_INSTALL_$(1))
290-
291-
else # !OPENSSL_OS_$(1) && !OSX
272+
else # !OPENSSL_OS_$(1)
292273
target/openssl/$(1).stamp:
293274

294275
endif
@@ -301,10 +282,17 @@ endef
301282

302283
$(foreach target,$(CFG_TARGET),$(eval $(call BUILD_OPENSSL,$(target))))
303284

285+
ifeq ($(shell uname),Darwin)
286+
SHASUM := shasum -a 256
287+
else
288+
SHASUM := sha256sum
289+
endif
290+
304291
target/openssl/openssl-$(OPENSSL_VERS).tar.gz: | target/openssl/
305-
curl -o $(@) https://www.openssl.org/source/openssl-$(OPENSSL_VERS).tar.gz
306-
sha256sum $(@) > $(@).sha256
292+
curl -o $(@).tmp https://www.openssl.org/source/openssl-$(OPENSSL_VERS).tar.gz
293+
$(SHASUM) $(@).tmp > $(@).sha256
307294
test $(OPENSSL_SHA256) = `cut -d ' ' -f 1 $(@).sha256`
295+
mv $(@).tmp $(@)
308296

309297
target/openssl/:
310298
mkdir -p $(@)

0 commit comments

Comments
 (0)