Skip to content

Commit

Permalink
Build launcher from setup.py using "zig cc"
Browse files Browse the repository at this point in the history
Signed-off-by: Jean-Christophe Morin <[email protected]>
  • Loading branch information
JeanChristopheMorinPerso committed Sep 24, 2023
1 parent 22dc6fb commit 6511829
Show file tree
Hide file tree
Showing 6 changed files with 1,230 additions and 64 deletions.
130 changes: 75 additions & 55 deletions .github/workflows/wheel.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,59 +8,60 @@ concurrency:
cancel-in-progress: true

jobs:
launchers:
name: Build Windows ${{ matrix.artifact }} launcher
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
include:
- msvc-arch: amd64_arm64
cmake-arch: ARM64
artifact: arm64
- msvc-arch: amd64
cmake-arch: x64
artifact: amd64

steps:
- uses: actions/checkout@v4

- uses: ilammy/msvc-dev-cmd@v1
with:
arch: ${{ matrix.msvc-arch }}

- name: Build
shell: bash
run: |
set -ex
ls -la launcher
git clone https://github.com/pypa/distlib.git -b 0.3.7
cp distlib/PC/launcher.c launcher/
cd launcher
patch -Np1 -i rez.patch --binary
mkdir build
cd build
cmake .. -A "${GENERATOR_PLATFORM}" -DCMAKE_CONFIGURATION_TYPES=Release
VERBOSE=1 cmake --build . --config Release
mv Release/simple_launcher_cli.exe "t-${REZ_ARTIFACT_NAME}.exe"
mv Release/simple_launcher_gui.exe "w-${REZ_ARTIFACT_NAME}.exe"
env:
GENERATOR_PLATFORM: ${{ matrix.cmake-arch }}
REZ_ARTIFACT_NAME: ${{ matrix.artifact }}

- uses: actions/upload-artifact@v3
with:
name: launchers
path: 'launcher/build/*.exe'
# launchers:
# name: Build Windows ${{ matrix.artifact }} launcher
# runs-on: windows-latest
# strategy:
# fail-fast: false
# matrix:
# include:
# - msvc-arch: amd64_arm64
# cmake-arch: ARM64
# artifact: arm64
# - msvc-arch: amd64
# cmake-arch: x64
# artifact: amd64

# steps:
# - uses: actions/checkout@v4

# - uses: ilammy/msvc-dev-cmd@v1
# with:
# arch: ${{ matrix.msvc-arch }}

# - name: Build
# shell: bash
# run: |
# set -ex
# ls -la launcher
# git clone https://github.com/pypa/distlib.git -b 0.3.7

# cp distlib/PC/launcher.c launcher/

# cd launcher
# patch -Np1 -i rez.patch --binary

# mkdir build
# cd build

# cmake .. -A "${GENERATOR_PLATFORM}" -DCMAKE_CONFIGURATION_TYPES=Release
# VERBOSE=1 cmake --build . --config Release

# mv Release/simple_launcher_cli.exe "t-${REZ_ARTIFACT_NAME}.exe"
# dumpbin /DEPENDENTS "t-${REZ_ARTIFACT_NAME}.exe"
# mv Release/simple_launcher_gui.exe "w-${REZ_ARTIFACT_NAME}.exe"
# env:
# GENERATOR_PLATFORM: ${{ matrix.cmake-arch }}
# REZ_ARTIFACT_NAME: ${{ matrix.artifact }}

# - uses: actions/upload-artifact@v3
# with:
# name: launchers
# path: 'launcher/build/*.exe'

wheel:
name: Build ${{ matrix.title }} wheel
needs: ["launchers"]
# needs: ["launchers"]

runs-on: ${{ matrix.os }}

Expand All @@ -73,18 +74,20 @@ jobs:
- os: windows-latest
arch: win_amd64
title: windows amd64
msvc-arch: amd64
- os: windows-latest
arch: win_arm64
title: windows arm64
msvc-arch: amd64_arm64

steps:
- uses: actions/checkout@v4

- uses: actions/download-artifact@v3
if: ${{ matrix.os == 'windows-latest' }}
with:
name: launchers
path: launcher
# - uses: actions/download-artifact@v3
# if: ${{ matrix.os == 'windows-latest' }}
# with:
# name: launchers
# path: launcher

- uses: actions/setup-python@v4
with:
Expand All @@ -104,6 +107,23 @@ jobs:
path: dist
name: wheels

- uses: ilammy/msvc-dev-cmd@v1
if: ${{ matrix.os == 'windows-latest' }}
with:
arch: ${{ matrix.msvc-arch }}

- name: Analyze EXEs
if: ${{ matrix.os == 'windows-latest' }}
shell: bash
run: |
cd dist
unzip *.whl
for path in $(find . -name '*.exe'); do
echo "Analyzing ${path}"
dumpbin /DEPENDENTS "${path}"
ls -lah "${path}"
done
test:
name: Test wheels
needs: ["wheel"]
Expand Down
22 changes: 22 additions & 0 deletions launcher/LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
Copyright (C) 2011-2022 Vinay Sajip. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
12 changes: 12 additions & 0 deletions launcher/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Script launchers

This folder contains the script launchers. It is basically https://github.com/pypa/distlib/blob/0.3.7/PC/launcher.c
with some light modifications:

1. We don't embbed the scripts in the executable.
2. We removed the support to use environment variables to locate the interpreter.
3. We added a small patch to print the command executed if the environment variable
REZ_LAUNCHER_DEBUG is set.

The launcher is only needed on Windows and is compiled from the setup.py file. MSVC
isn't required. We use the [Zig](https://ziglang.org) compiler (zig cc) to compile.
Loading

0 comments on commit 6511829

Please sign in to comment.