Code Monkey home page Code Monkey logo

xgo's Introduction

GitHub release Total downloads Build Status Test Status Docker Stars Docker Pulls Go Report Card

Become a sponsor Donate Paypal


About

Although Go strives to be a cross platform language, cross compilation from one platform to another is not as simple as it could be, as you need the Go sources bootstrapped to each platform and architecture.

The first step towards cross compiling was Dave Cheney's golang-crosscompile package, which automatically bootstrapped the necessary sources based on your existing Go installation. Although this was enough for a lot of cases, certain drawbacks became apparent where the official libraries used CGO internally: any dependency to third party platform code is unavailable, hence those parts don't cross compile nicely (native DNS resolution, system certificate access, etc).

A step forward in enabling cross compilation was Alan Shreve's gonative package, which instead of bootstrapping the different platforms based on the existing Go installation, downloaded the official pre-compiled binaries from the golang website and injected those into the local toolchain. Since the pre-built binaries already contained the necessary platform specific code, the few missing dependencies were resolved, and true cross compilation could commence... of pure Go code.

However, there was still one feature missing: cross compiling Go code that used CGO itself, which isn't trivial since you need access to OS specific headers and libraries. This becomes very annoying when you need access only to some trivial OS specific functionality (e.g. query the CPU load), but need to configure and maintain separate build environments to do it.

Fork

This repository is a fork of karalabe/xgo to push images and tags to a single docker repository on several registries to make things more consistent for users:

Registry Image
Docker Hub crazymax/xgo
GitHub Container Registry ghcr.io/crazy-max/xgo

I use GitHub Actions to build the images instead of using automated builds of Docker Hub (see workflows).

This also creates a standalone xgo executable that can be used on many platforms.

Build

Build xgo yourself using Docker buildx bake:

git clone https://github.com/crazy-max/xgo.git xgo
cd xgo

# Build base image and output to docker with xgo:base tag
docker buildx bake base-local

# Build go-1.16 image and output to docker with xgo:1.16 tag
BASE_IMAGE=xgo:base docker buildx bake --set "*.tags=xgo:1.16" --set "*.output=type=docker" go-1.16

# Tests
BASE_IMAGE=xgo:1.16 docker buildx bake test-c
BASE_IMAGE=xgo:1.16 docker buildx bake test-cpp
BASE_IMAGE=xgo:1.16 docker buildx bake test-gorm

# Create xgo artifacts in ./dist
docker buildx bake artifact-all

Documentation

Contributing

Want to contribute? Awesome! The most basic way to show your support is to star the project, or to raise issues. You can also support this project by becoming a sponsor on GitHub or by making a Paypal donation to ensure this journey continues indefinitely!

Thanks again for your support, it is much appreciated! ๐Ÿ™

License

MIT. See LICENSE for more details.

xgo's People

Contributors

crazy-max avatar karalabe avatar dependabot[bot] avatar lixingwang avatar tamird avatar jyap808 avatar coryb avatar dan-turner avatar wernerb avatar bhcleek avatar vielmetti avatar sofuture avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.