Skip to content

Provides darwin (Mac) binary support on Linux when cross-compiling Go apps that have CGO dependencies

Notifications You must be signed in to change notification settings

plentico/osxcross-target

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Build CGO enabled darwin (mac) binaries from linux using GoReleaser Action.


Your .github/workflows/release.yml should include this:

-
  name: OSXCross for CGO Support
  run: |
    mkdir ../../osxcross
    git clone https://github.com/plentico/osxcross-target.git ../../osxcross/target
Note on libcrypto (OpenSSL)

We updated this project for Ubuntu 20.04, but OSXCross still needs an older version of OpenSSL so you might need to add a step that looks like this:

-
  name: Downgrade libssl
  run: |
    echo 'deb http://security.ubuntu.com/ubuntu bionic-security main' | sudo tee -a /etc/apt/sources.list
    sudo apt update && apt-cache policy libssl1.0-dev
    sudo apt-get install libssl1.0-dev

See more details here: #1

Your .goreleaser.yml should have separate builds for linux and mac like this:

builds:
- id: linux-build
  env:
  - CGO_ENABLED=1
  goos:
  - linux
  ignore:
  - goos: linux
    goarch: 386
- id: darwin-build
  ldflags:
  - -s
  env:
  - CGO_ENABLED=1
  - CC=/home/runner/work/osxcross/target/bin/o64-clang
  - CXX=/home/runner/work/osxcross/target/bin/o64-clang++
  goos:
  - darwin
  ignore:
  - goos: darwin
    goarch: 386

Note: the values for CC and CXX must be exactly what is referenced above because the paths are hardcoded.

Instructions for creating your own OSXCross target

Steps to create an OSXCross target:

  1. Download OSXCross: https://github.com/tpoechtrager/osxcross/archive/master.zip
  2. Unzip the downloaded archive from step 1 so the project lives at ~/Downloads/osxcross-master/
  3. Login and download XCode from https://developer.apple.com/download/more/ (version 11.6 worked for me, the beta release for 12 did not)
  4. Move the downloaded archive from step 3 so it lives at ~/Downloads/osxcross-master/Xcode_11.6.xip
  5. Move into the OSXCross folder (cd ~/Downloads/osxcross-master) and run ./tools/gen_sdk_package_pbzx.sh Xcode_11.6.xip which creates the SDK that lives at ~/Downloads/osxcross-master/MacOSX10.15.sdk.tar.xz. Note: I would have loved to used a precompiled SDK from https://github.com/phracker/MacOSX-SDKs but using those gave me the following errors:
# crypto/x509
osxcross: error: cannot find libc++ headers
osxcross: error: while detecting target
# rogchap.com/v8go
In file included from v8go.cc:3:
../../../../go/pkg/mod/rogchap.com/v8go@v0.2.0/deps/include/v8.h:23:10: fatal error: 'type_traits' file not found
  1. Move the SDK created in step 5 into the "tarballs" directory: mv ~/Downloads/osxcross-master/MacOSX10.15.sdk.tar.xz ~/Downloads/osxcross-master/tarballs/MacOSX10.15.sdk.tar.xz
  2. While still in ~/Downloads/osxcross-master/ run the build: ./build.sh. That should create a "target" directory with a bunch of files and folders in it, one of which is ~/Downloads/osxcross-master/target/bin/ that contains various cross-compilers, including o64-clang that we'll be using. The osxcross-target project is the "target" directory that's created using a hardcoded path that can be used with GitHub Actions.

After completing the steps above, you should be able to create a darwin binary using the following command (Update the paths to use your computer's username, not jimafisk):

env GOOS=darwin GOARCH=amd64 CGO_ENABLED=1 CC=/home/jimafisk/Downloads/osxcross-master/target/bin/o64-clang CXX=/home/jimafisk/Downloads/osxcross-master/target/bin/o64-clang++ go build -ldflags -s

See more details here: goreleaser/goreleaser-action#233

About

Provides darwin (Mac) binary support on Linux when cross-compiling Go apps that have CGO dependencies

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published