Skip to content
play

GitHub Action

ZigCC

v1.0.1 Latest version

ZigCC

play

ZigCC

Use zig cc to compile C/C++/Rust/Go programs

Installation

Copy and paste the following snippet into your .yml file.

              

- name: ZigCC

uses: jiacai2050/zigcc@v1.0.1

Learn more about this action in jiacai2050/zigcc

Choose a version

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.svg

Util scripts aimed at simplifying the use of zig cc for compiling C, C++, Rust, and 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

pip3 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:

- name: Install zigcc
  uses: jiacai2050/zigcc@v1
  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.
  • ZIGCC_ENABLE_SANITIZE By default Zig will pass -fsanitize=undefined -fsanitize-trap=undefined to clang when compile without -O2, -O3, this causes Undefined Behavior to cause an Illegal Instruction, see Catching undefined behavior with zig cc.

    So we disable it by default, set this variable to 1 to re-enable it.

  • 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.