Skip to content

Instantly share code, notes, and snippets.

@zhangw
Forked from marirs/rust-cross-compile-openssl
Last active February 18, 2023 05:16
Show Gist options
  • Save zhangw/5faae2e65d8d316e14f00353755e5c1a to your computer and use it in GitHub Desktop.
Save zhangw/5faae2e65d8d316e14f00353755e5c1a to your computer and use it in GitHub Desktop.
Rust OpenSSL Cross Compile for Linux on Mac M1
# Install the toolchain
```
brew tap SergioBenitez/osxct
brew install x86_64-unknown-linux-gnu
```
# this should get installed in:
# /opt/homebrew/Cellar/x86_64-unknown-linux-gnu/
# Installing the macOS OpenSSL - if not already installed
```bash
brew install [email protected]
```
# this should get installed in:
# /opt/homebrew/Cellar/openssl\@1.1/
# Download the OpenSSL Source
```bash
cd /tmp
wget https://www.openssl.org/source/openssl-1.1.1n.tar.gz
cd openssl-1.1.1n
```
# Configure
```bash
CC="x86_64-unknown-linux-gnu-gcc -fPIE -pie" \
CXX="x86_64-unknown-linux-gnu-g++" \
AS="x86_64-unknown-linux-gnu-as" \
AR="x86_64-unknown-linux-gnu-ar" \
NM="x86_64-unknown-linux-gnu-nm" \
RANLIB="x86_64-unknown-linux-gnu-gcc-ranlib" \
LD="x86_64-unknown-linux-gnu-ld" \
STRIP="x86_64-unknown-linux-gnu-strip" \
./Configure linux-x86_64 no-shared no-async --prefix=/opt/homebrew/Cellar/openssl\@1.1/1.1.1n/x86_64-linux-gnu --openssldir=/opt/homebrew/Cellar/openssl\@1.1/1.1.1n/x86_64-linux-gnu
```
# Make
```bash
make -j12
```
# Install
```bash
make install
```
# Now you should have a linux x86_64 version of openssl installed in:
# /opt/homebrew/Cellar/openssl\@1.1/1.1.1n/x86_64-linux-gnu
### Rust Cross compile in Mac for linux
# Now if you want to cross compile for linux on your mac m1 using rust with openssl or openss-sys
# Cargo.toml - as much as possible try to use "vendored" feature in openssl - that way the openssl will not become
# a dependancy on the target system
```bash
OPENSSL_INCLUDE_DIR=`brew --prefix [email protected]`/x86_64-linux-gnu/include OPENSSL_LIB_DIR=`brew --prefix [email protected]`/x86_64-linux-gnu/lib OPENSSL_STATIC=1 cargo b --release --target x86_64-unknown-linux-gnu
```
# if you want to strip the executable:
```bash
x86_64-unknown-linux-gnu-strip target/release/<file>
```
@zhangw
Copy link
Author

zhangw commented Feb 18, 2023

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment