zigcc

A util script that aims to ease use `zig cc` to compile C/C++/Rust/Go programs.


Keywords
compile, cross-compile, rust, zig, go, golang, rustlang, ziglang
License
GPL-3.0
Install
pip install zigcc==0.1.0

Documentation

zigcc

https://github.com/jiacai2050/zig-cc/actions/workflows/ci.yml/badge.svg https://github.com/jiacai2050/zig-cc/actions/workflows/zig.yml/badge.svg https://github.com/jiacai2050/zig-cc/actions/workflows/release.yml/badge.svg https://img.shields.io/pypi/v/zigcc

A util script that aims to ease use zig cc to compile C/C++/Rust/Go programs.

Why

In most cases, we can use following command to use Zig for compile

CC='zig cc' CXX='zig c++' ...

However in real world, there are many issues this way, such as:

So this project was born, it will

  • Convert target between Zig and Rust/Go
  • Ignore link args when zig cc throw errors, hopefully this will make compile successfully, WIP.

Install

pip install -U zigcc

This will install three executables:

  • zigcc, used for CC
  • zigcxx, used for CXX
  • zigcargo can used to replace cargo, it will automatically set
    • CC CARGO_TARGET_<triple>_LINKER to zigcc
    • CXX to zigcxx

Use in GitHub Action

Adding a step to your workflow like this:

- uses: jiacai2050/zigcc@main
  with:
    zig-version: master

Then you can invoke zigcc zigcxx zigcargo in following steps.

Config

There some are env variable to config zigcc:

  • ZIGCC_FLAGS, space separated flags, pass to zig cc. An example is set this to -fno-sanitize=undefined to disable sanitize since they may break your programs. See Catching undefined behavior with zig cc
  • ZIGCC_BLACKLIST_FLAGS, space separated flags, used to filter flags zig cc don’t support, such as -Wl,-dylib otherwise you could see errors below
    = note: error: unsupported linker arg: -dylib
        
  • ZIGCC_VERBOSE Set to 1 enable verbose logs.