name: "Build" on: push: branches: - master pull_request: release: types: - published workflow_dispatch: jobs: source: name: Source runs-on: ubuntu-22.04 env: BRANCH_NAME: ${{ github.base_ref || github.ref_name }} steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 1 submodules: true - name: Gen Source run: | REV_ID=$(git tag --points-at HEAD) if [ -z "${REV_ID}" ]; then REV_ID=$(git rev-parse --short HEAD) fi mkdir -p natmap-${{ env.BRANCH_NAME }} git ls-files --recurse-submodules | tar c -O -T- | tar x -C natmap-${{ env.BRANCH_NAME }} echo ${REV_ID} > natmap-${{ env.BRANCH_NAME }}/.version tar cJf natmap-${{ env.BRANCH_NAME }}.tar.xz natmap-${{ env.BRANCH_NAME }} - name: Upload source uses: actions/upload-artifact@v4 with: name: natmap-${{ env.BRANCH_NAME }}.tar.xz path: natmap-${{ env.BRANCH_NAME }}.tar.xz if-no-files-found: error retention-days: 1 linux: name: Linux runs-on: ubuntu-22.04 strategy: matrix: include: - name: arm64 tool: aarch64-unknown-linux-musl - name: arm32 tool: arm-unknown-linux-musleabi - name: arm32hf tool: arm-unknown-linux-musleabihf - name: arm32v7 tool: armv7-unknown-linux-musleabi - name: arm32v7hf tool: armv7-unknown-linux-musleabihf - name: i586 tool: i586-unknown-linux-musl - name: i686 tool: i686-unknown-linux-musl - name: loong64 tool: loongarch64-unknown-linux-musl - name: m68k tool: m68k-unknown-linux-musl - name: microblazeel tool: microblazeel-xilinx-linux-musl - name: microblaze tool: microblaze-xilinx-linux-musl - name: mips64el tool: mips64el-unknown-linux-musl - name: mips64 tool: mips64-unknown-linux-musl - name: mips32el tool: mipsel-unknown-linux-musl - name: mips32elsf tool: mipsel-unknown-linux-muslsf - name: mips32 tool: mips-unknown-linux-musl - name: mips32sf tool: mips-unknown-linux-muslsf - name: powerpc64 tool: powerpc64-unknown-linux-musl - name: powerpc tool: powerpc-unknown-linux-musl - name: riscv32 tool: riscv32-unknown-linux-musl - name: riscv64 tool: riscv64-unknown-linux-musl - name: s390x tool: s390x-ibm-linux-musl - name: sh tool: sh-multilib-linux-musl - name: sheb tool: sh-multilib-linux-musl env: CFLAGS: "-mb" - name: x86_64 tool: x86_64-unknown-linux-musl steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 1 submodules: true - name: Build ${{ matrix.name }} run: | sudo mkdir -p /opt/x-tools wget https://github.com/musl-cross/musl-cross/releases/download/20250206/${{ matrix.tool }}.tar.xz sudo tar xf ${{ matrix.tool }}.tar.xz -C /opt/x-tools make CROSS_PREFIX=/opt/x-tools/${{ matrix.tool }}/bin/${{ matrix.tool }}- CFLAGS=${{ matrix.env.CFLAGS }} ENABLE_STATIC=1 -j`nproc` cp bin/natmap natmap-linux-${{ matrix.name }} - name: Upload ${{ matrix.name }} uses: actions/upload-artifact@v4 with: name: natmap-linux-${{ matrix.name }} path: natmap-linux-${{ matrix.name }} if-no-files-found: error retention-days: 1 windows: name: Windows runs-on: windows-latest defaults: run: shell: cmd steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 1 submodules: true - name: Setup MSYS2 uses: msys2/setup-msys2@v2 with: msystem: MSYS location: D:\msys2 update: true install: >- gcc git make wget zip - name: Build shell: msys2 {0} run: | export MSYS=winsymlinks:native git clone --depth=1 --recursive file://`pwd` work; cd work make LFLAGS="-lmsys-2.0 -lws2_32" -j`nproc` mkdir natmap cp bin/natmap* natmap wget -P natmap https://github.com/heiher/msys2/releases/latest/download/msys-2.0.dll zip -r ../natmap-win64.zip natmap - name: Upload ${{ matrix.name }} uses: actions/upload-artifact@v4 with: name: natmap-win64.zip path: natmap-win64.zip if-no-files-found: error retention-days: 1 release: name: Release runs-on: ubuntu-22.04 needs: - source - linux - windows if: github.event_name == 'release' steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 1 - name: Download artifacts uses: actions/download-artifact@v4 with: path: release pattern: "natmap-*" merge-multiple: true - name: Upload artifacts env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | for i in release/natmap-*; do gh release upload ${{ github.event.release.tag_name }} $i done macos: name: macOS runs-on: macos-14 if: github.event_name != 'release' steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 1 submodules: true - name: Build run: | make android: name: Android runs-on: ubuntu-22.04 if: github.event_name != 'release' steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 1 submodules: true - name: Prepare run: | wget https://dl.google.com/android/repository/android-ndk-r27b-linux.zip unzip android-ndk-r27b-linux.zip ln -sf . jni - name: Build run: | ./android-ndk-r27b/ndk-build llvm: name: LLVM runs-on: ubuntu-24.04 if: github.event_name != 'release' steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 1 submodules: true - name: Prepare run: | sudo apt install -y clang - name: Build run: | make CC=clang ENABLE_STATIC=1 -j`nproc`