diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0b62bd1..c2211d9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,132 +1,36 @@ name: "Build & Test" -on: [push, pull_request] +on: [push, pull_request, workflow_dispatch] jobs: - macOS: - runs-on: macos-latest - timeout-minutes: 30 - env: - MACOSX_DEPLOYMENT_TARGET: "10.9" - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Download LuaJIT - uses: actions/checkout@v4 - with: - repository: LuaJIT/LuaJIT - ref: v2.1 - path: LuaJIT - - name: Compile universal LuaJIT - working-directory: ./LuaJIT - run: | - TARGET_FLAGS="-arch x86_64" make - cp ./src/libluajit.so ./src/libluajit_x64.dylib - cp ./src/luajit ./src/luajit_x64 - - make clean - - TARGET_FLAGS="-arch arm64" make - cp ./src/libluajit.so ./src/libluajit_arm.dylib - cp ./src/luajit ./src/luajit_arm - - lipo -create -output ./src/libluajit.dylib ./src/libluajit_x64.dylib ./src/libluajit_arm.dylib - lipo -create -output ./src/luajit ./src/luajit_x64 ./src/luajit_arm - - name: Configure - run: cmake -Bbuild -S. -G Xcode -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" -DLUA_INCLUDE_DIR=$PWD/LuaJIT/src -DLUA_LIBRARIES=$PWD/LuaJIT/src/lua - - name: Build - working-directory: build - run: xcodebuild -configuration Release -scheme https - - name: Test - working-directory: ./build/src/Release - run: ../../../LuaJIT/src/luajit -l "https" ../../../example/test.lua - - name: Artifact - if: always() - uses: actions/upload-artifact@v4 - with: - name: https-macos.zip - path: build/src/**/https.so - Linux: name: ${{ matrix.mode.name }} runs-on: ubuntu-20.04 + timeout-minutes: 30 - strategy: - matrix: - mode: - - name: Linux cURL - curl: 1 - openssl: 0 - artifact: 0 - - name: Linux OpenSSL - curl: 0 - openssl: 1 - artifact: 0 - - name: Linux cURL & OpenSSL - curl: 1 - openssl: 1 - artifact: 1 steps: - name: Checkout uses: actions/checkout@v4 - - name: Update APT Repository - run: sudo apt-get update - - name: Install Dependencies - run: sudo apt-get install -y lua5.1 luajit liblua5.1-0-dev libcurl4-openssl-dev g++ libssl-dev - - name: Configure - run: cmake -Bbuild -S. -DCMAKE_INSTALL_PREFIX=$PWD/install -DCMAKE_BUILD_TYPE=Release -DUSE_CURL_BACKEND=${{ matrix.mode.curl }} -DUSE_OPENSSL_BACKEND=${{ matrix.mode.openssl }} - - name: Build - run: cmake --build build --config Release --target install -j$(nproc) - - name: Test (Lua) - if: matrix.mode.artifact == 0 - working-directory: ./install - run: lua -l "https" ../example/test.lua - - name: Test (LuaJIT) - if: matrix.mode.artifact == 0 - working-directory: ./install - run: luajit -l "https" ../example/test.lua - - name: Artifact - if: matrix.mode.artifact == 1 - uses: actions/upload-artifact@v4 + + # https://github.com/docker/setup-qemu-action + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + # https://github.com/docker/setup-buildx-action + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v3 + + - name: Build Lua library on aarch64 + run: | + docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + docker buildx build --platform linux/arm64 -t lua-library-build --output type=docker . + + - name: Copy build artifact + run: | + docker cp $(docker create --platform linux/arm64 lua-library-build):/src/install/https.so /tmp/https.so + + - name: Upload build artifact + uses: actions/upload-artifact@v3 with: name: https-ubuntu.zip - path: install/https.so - - Windows: - runs-on: windows-latest - strategy: - matrix: - arch: - - Win32 - - x64 - defaults: - run: - shell: cmd - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Download LuaJIT - uses: actions/checkout@v4 - with: - repository: LuaJIT/LuaJIT - ref: v2.1 - path: LuaJIT - - name: Configure MSVC Developer Command Prompt - uses: ilammy/msvc-dev-cmd@v1 - with: - arch: ${{ matrix.arch }} - - name: Compile LuaJIT - working-directory: ./LuaJIT/src - run: msvcbuild.bat amalg - - name: Configure - run: cmake -Bbuild -S. -DCMAKE_INSTALL_PREFIX=%CD%\install -A ${{ matrix.arch }} -DLUA_INCLUDE_DIR=%CD%\LuaJIT\src -DLUA_LIBRARIES=%CD%\LuaJIT\src\lua51.lib - - name: Build - run: cmake --build build --config Release --target install - - name: Test - working-directory: ./install - run: ..\LuaJIT\src\luajit ..\example\test.lua - - name: Artifact - if: always() - uses: actions/upload-artifact@v4 - with: - name: https-windows-${{ matrix.arch }}.zip - path: install/https.dll + path: /tmp/https.so diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..d0f3273 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,17 @@ +# Use an aarch64 base image +FROM arm64v8/ubuntu:22.04 + +# Install dependencies +RUN apt-get update && apt-get install -y build-essential cmake lua5.1 luajit liblua5.1-0-dev libcurl4-openssl-dev g++ libssl-dev + +# Copy your Lua library source code +COPY . /src +WORKDIR /src + +# RUN cmake -Bbuild -S. -DCMAKE_INSTALL_PREFIX=$PWD/install -DCMAKE_BUILD_TYPE=Release -DUSE_CURL_BACKEND=${{ matrix.mode.curl }} -DUSE_OPENSSL_BACKEND=${{ matrix.mode.openssl }} +RUN cmake -Bbuild -S. -DCMAKE_INSTALL_PREFIX=$PWD/install -DCMAKE_BUILD_TYPE=Release -DUSE_CURL_BACKEND=1 -DUSE_OPENSSL_BACKEND=1 + +RUN cmake --build build --config Release --target install -j$(nproc) + +# Set the output location +CMD cp /src/build/https-ubuntu.zip /https.so