name: CI on: push: branches: [main, v1.0.*] pull_request: branches: [main, v1.0.*] jobs: ubuntu-build: runs-on: ubuntu-latest env: # set_option known to fail on Github Actions COMMON_CTEST_ARGS: --no-compress-output --output-on-failure -E "^set_option$" steps: - uses: actions/checkout@v6 with: path: src - name: Install dependencies run: | sudo apt update sudo apt install libudev-dev ninja-build - name: Configure run: | rm -rf build install cmake -B build/shared -S src -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=install/shared -DLIBUSB_BUILD_EXAMPLES=ON -DLIBUSB_BUILD_TESTING=ON -DLIBUSB_BUILD_SHARED_LIBS=ON cmake -B build/static -S src -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=install/static -DLIBUSB_BUILD_EXAMPLES=ON -DLIBUSB_BUILD_TESTING=ON -DLIBUSB_BUILD_SHARED_LIBS=OFF - name: Build Shared working-directory: build/shared run: ninja install - name: Build Static working-directory: build/static run: ninja install - name: Check artifacts uses: andstor/file-existence-action@v3 with: files: "install/shared/lib/libusb-1.0.so, \ install/shared/include/libusb-1.0/libusb.h, \ install/static/lib/libusb-1.0.a, \ install/static/include/libusb-1.0/libusb.h" fail: true - name: Test Shared if: always() working-directory: build/shared run: ctest --output-junit test_shared.xml ${{ env.COMMON_CTEST_ARGS }} - name: Test Static if: always() working-directory: build/static run: ctest --output-junit test_static.xml ${{ env.COMMON_CTEST_ARGS }} - name: Upload Test Results if: always() uses: actions/upload-artifact@v7 with: name: Test Results Ubuntu path: | build/shared/test_shared.xml build/static/test_static.xml macos-build: runs-on: macos-latest env: COMMON_CTEST_ARGS: --no-compress-output --output-on-failure steps: - uses: actions/checkout@v6 with: path: src - name: Install dependencies run: brew install ninja - name: Configure run: | rm -rf build install cmake -B build/shared -S src -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=install/shared -DLIBUSB_BUILD_EXAMPLES=ON -DLIBUSB_BUILD_TESTING=ON -DLIBUSB_BUILD_SHARED_LIBS=ON cmake -B build/static -S src -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=install/static -DLIBUSB_BUILD_EXAMPLES=ON -DLIBUSB_BUILD_TESTING=ON -DLIBUSB_BUILD_SHARED_LIBS=OFF - name: Build Shared working-directory: build/shared run: ninja install - name: Build Static working-directory: build/static run: ninja install - name: Check artifacts uses: andstor/file-existence-action@v3 with: files: "install/shared/lib/libusb-1.0.dylib, \ install/shared/include/libusb-1.0/libusb.h, \ install/static/lib/libusb-1.0.a, \ install/static/include/libusb-1.0/libusb.h" fail: true - name: Test Shared if: always() working-directory: build/shared run: ctest --output-junit test_shared.xml ${{ env.COMMON_CTEST_ARGS }} - name: Test Static if: always() working-directory: build/static run: ctest --output-junit test_static.xml ${{ env.COMMON_CTEST_ARGS }} - name: Upload Test Results if: always() uses: actions/upload-artifact@v7 with: name: Test Results macOS path: | build/shared/test_shared.xml build/static/test_static.xml windows-mingw-build: runs-on: windows-latest defaults: run: shell: 'msys2 {0}' env: COMMON_CTEST_ARGS: --no-compress-output --output-on-failure steps: - uses: actions/checkout@v6 with: path: src - name: Install dependencies uses: msys2/setup-msys2@v2 with: msystem: MINGW64 install: mingw-w64-x86_64-cmake mingw-w64-x86_64-ninja mingw-w64-x86_64-toolchain - name: Configure run: | rm -rf build install cmake -B build/shared -S src -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=install/shared -DLIBUSB_BUILD_EXAMPLES=ON -DLIBUSB_BUILD_TESTING=ON -DLIBUSB_BUILD_SHARED_LIBS=ON cmake -B build/static -S src -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=install/static -DLIBUSB_BUILD_EXAMPLES=ON -DLIBUSB_BUILD_TESTING=ON -DLIBUSB_BUILD_SHARED_LIBS=OFF - name: Build Shared working-directory: build/shared run: ninja install - name: Build Static working-directory: build/static run: ninja install - name: Check artifacts uses: andstor/file-existence-action@v3 with: files: "install/shared/lib/libusb-1.0.dll.a, \ install/shared/bin/libusb-1.0.dll, \ install/shared/include/libusb-1.0/libusb.h, \ install/static/lib/libusb-1.0.a, \ install/static/include/libusb-1.0/libusb.h" fail: true - name: Test Shared if: always() working-directory: build/shared run: | export PATH="$(pwd)/../../install/shared/bin:$PATH" ctest --output-junit test_shared.xml ${{ env.COMMON_CTEST_ARGS }} - name: Test Static if: always() working-directory: build/static run: ctest --output-junit test_static.xml ${{ env.COMMON_CTEST_ARGS }} windows-msvc-build: runs-on: windows-latest env: COMMON_CTEST_ARGS: --no-compress-output --output-on-failure VCVARS64_PATH: 'C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat' steps: - uses: actions/checkout@v6 with: path: src - name: Install dependencies run: choco install ninja - name: Configure Visual Studio run: | cmake -B build/msvc -S src -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=install/msvc -DLIBUSB_BUILD_EXAMPLES=ON -DLIBUSB_BUILD_TESTING=ON -DLIBUSB_BUILD_SHARED_LIBS=ON - name: Configure NMake/Ninja shell: cmd run: | call "${{ env.VCVARS64_PATH }}" cmake -G"NMake Makefiles" -B build\nmake_shared -DCMAKE_INSTALL_PREFIX=install/nmake_shared -S src -DCMAKE_BUILD_TYPE=RelWithDebInfo -DLIBUSB_BUILD_EXAMPLES=ON -DLIBUSB_BUILD_TESTING=ON -DLIBUSB_BUILD_SHARED_LIBS=ON cmake -G"NMake Makefiles" -B build\nmake_static -DCMAKE_INSTALL_PREFIX=install/nmake_static -S src -DCMAKE_BUILD_TYPE=RelWithDebInfo -DLIBUSB_BUILD_EXAMPLES=ON -DLIBUSB_BUILD_TESTING=ON -DLIBUSB_BUILD_SHARED_LIBS=OFF cmake -GNinja -B build\ninja_shared -DCMAKE_INSTALL_PREFIX=install/ninja_shared -S src -DCMAKE_BUILD_TYPE=RelWithDebInfo -DLIBUSB_BUILD_EXAMPLES=ON -DLIBUSB_BUILD_TESTING=ON -DLIBUSB_BUILD_SHARED_LIBS=ON cmake -GNinja -B build\ninja_static -DCMAKE_INSTALL_PREFIX=install/ninja_static -S src -DCMAKE_BUILD_TYPE=RelWithDebInfo -DLIBUSB_BUILD_EXAMPLES=ON -DLIBUSB_BUILD_TESTING=ON -DLIBUSB_BUILD_SHARED_LIBS=OFF - name: Build Visual Studio working-directory: build/msvc run: cmake --build . --config RelWithDebInfo --target install - name: Build NMake Shared working-directory: build/nmake_shared shell: cmd run: | call "${{ env.VCVARS64_PATH }}" nmake install - name: Build NMake Static working-directory: build/nmake_static shell: cmd run: | call "${{ env.VCVARS64_PATH }}" nmake install - name: Build Ninja Shared working-directory: build/ninja_shared shell: cmd run: | call "${{ env.VCVARS64_PATH }}" ninja install - name: Build Ninja Static working-directory: build/ninja_static shell: cmd run: | call "${{ env.VCVARS64_PATH }}" ninja install - name: Check artifacts uses: andstor/file-existence-action@v3 with: files: "install/msvc/lib/usb-1.0.lib, \ install/msvc/bin/libusb-1.0.dll, \ install/msvc/include/libusb-1.0/libusb.h, \ install/nmake_shared/lib/usb-1.0.lib, \ install/nmake_shared/bin/libusb-1.0.dll, \ install/nmake_shared/include/libusb-1.0/libusb.h, \ install/nmake_static/lib/libusb-1.0.lib, \ install/nmake_static/include/libusb-1.0/libusb.h, \ install/ninja_shared/lib/usb-1.0.lib, \ install/ninja_shared/bin/libusb-1.0.dll, \ install/ninja_shared/include/libusb-1.0/libusb.h, \ install/ninja_static/lib/libusb-1.0.lib, \ install/ninja_static/include/libusb-1.0/libusb.h" fail: true - name: Test Visual Studio if: always() working-directory: build/msvc shell: cmd run: | set PATH=%PATH%;${{ github.workspace }}\install\msvc\bin ctest -C RelWithDebInfo --output-junit test_msvc.xml ${{ env.COMMON_CTEST_ARGS }} - name: Test NMake Shared if: always() working-directory: build/nmake_shared shell: cmd run: | set PATH=%PATH%;${{ github.workspace }}\install\nmake_shared\bin ctest --output-junit test_nmake_shared.xml ${{ env.COMMON_CTEST_ARGS }} - name: Test NMake Static if: always() working-directory: build/nmake_static run: ctest --output-junit test_nmake_static.xml ${{ env.COMMON_CTEST_ARGS }} - name: Test Ninja Shared if: always() working-directory: build/ninja_shared shell: cmd run: | set PATH=%PATH%;${{ github.workspace }}\install\ninja_shared\bin ctest --output-junit test_ninja_shared.xml ${{ env.COMMON_CTEST_ARGS }} - name: Test Ninja Static if: always() working-directory: build/ninja_static run: ctest --output-junit test_ninja_static.xml ${{ env.COMMON_CTEST_ARGS }} - name: Upload Test Results if: always() uses: actions/upload-artifact@v7 with: name: Test Results MSVC path: | build/msvc/test_msvc.xml build/nmake_shared/test_nmake_shared.xml build/nmake_static/test_nmake_static.xml build/ninja_shared/test_ninja_shared.xml build/ninja_static/test_ninja_static.xml android-build: runs-on: ubuntu-latest env: # ANDROID_NATIVE_API_LEVEL may be useful to set, but by default it is set to lowest supported by the NDK # and that is enough for the purpose of this script ANDROID_ARM32_CMAKE_OPTIONS: -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK_ROOT}/build/cmake/android.toolchain.cmake -DANDROID_ABI=armeabi-v7a ANDROID_ARM64_CMAKE_OPTIONS: -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK_ROOT}/build/cmake/android.toolchain.cmake -DANDROID_ABI=arm64-v8a steps: - uses: actions/checkout@v6 with: path: src - name: Install dependencies run: | sudo apt update sudo apt install ninja-build - name: Configure run: | rm -rf build install cmake -B build/shared_32 -S src -GNinja ${{ env.ANDROID_ARM32_CMAKE_OPTIONS }} -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=install/shared_32 -DLIBUSB_BUILD_EXAMPLES=ON -DLIBUSB_BUILD_TESTING=ON -DLIBUSB_BUILD_SHARED_LIBS=ON cmake -B build/static_32 -S src -GNinja ${{ env.ANDROID_ARM32_CMAKE_OPTIONS }} -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=install/static_32 -DLIBUSB_BUILD_EXAMPLES=ON -DLIBUSB_BUILD_TESTING=ON -DLIBUSB_BUILD_SHARED_LIBS=OFF cmake -B build/shared_64 -S src -GNinja ${{ env.ANDROID_ARM64_CMAKE_OPTIONS }} -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=install/shared_64 -DLIBUSB_BUILD_EXAMPLES=ON -DLIBUSB_BUILD_TESTING=ON -DLIBUSB_BUILD_SHARED_LIBS=ON cmake -B build/static_64 -S src -GNinja ${{ env.ANDROID_ARM64_CMAKE_OPTIONS }} -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=install/static_64 -DLIBUSB_BUILD_EXAMPLES=ON -DLIBUSB_BUILD_TESTING=ON -DLIBUSB_BUILD_SHARED_LIBS=OFF - name: Build Shared ARM32 working-directory: build/shared_32 run: ninja install - name: Build Static ARM32 working-directory: build/static_32 run: ninja install - name: Build Shared ARM64 working-directory: build/shared_64 run: ninja install - name: Build Static ARM64 working-directory: build/static_64 run: ninja install - name: Check artifacts uses: andstor/file-existence-action@v3 with: files: "install/shared_32/lib/libusb-1.0.so, \ install/shared_32/include/libusb-1.0/libusb.h, \ install/static_32/lib/libusb-1.0.a, \ install/static_32/include/libusb-1.0/libusb.h, \ install/shared_64/lib/libusb-1.0.so, \ install/shared_64/include/libusb-1.0/libusb.h, \ install/static_64/lib/libusb-1.0.a, \ install/static_64/include/libusb-1.0/libusb.h" fail: true # No test runs/results: cross-compiled Android binaries are not runnable on a host machine emscripten-build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 with: path: src - name: Setup emsdk uses: emscripten-core/setup-emsdk@v16 - name: Verify emsdk run: emcc -v - name: Install dependencies run: | sudo apt update sudo apt install ninja-build - name: Configure run: | rm -rf build install echo "EMSDK:" $EMSDK cmake -B build/static -S src -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install/static -DLIBUSB_BUILD_EXAMPLES=OFF -DLIBUSB_BUILD_TESTING=OFF -DLIBUSB_BUILD_SHARED_LIBS=OFF -DCMAKE_TOOLCHAIN_FILE=$EMSDK/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake - name: Build Static working-directory: build/static run: ninja install - name: Check artifacts uses: andstor/file-existence-action@v3 with: files: "install/static/lib/libusb-1.0.a, \ install/static/include/libusb-1.0/libusb.h" fail: true netbsd-build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 with: path: src - uses: cross-platform-actions/action@v1 with: operating_system: netbsd architecture: x86-64 version: '10.1' run: | sudo pkgin update sudo pkgin -y install cmake ninja-build rm -rf build install cmake -B build/shared -S src -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=install/shared -DLIBUSB_BUILD_EXAMPLES=ON -DLIBUSB_BUILD_TESTING=ON -DLIBUSB_BUILD_SHARED_LIBS=ON cmake -B build/static -S src -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=install/static -DLIBUSB_BUILD_EXAMPLES=ON -DLIBUSB_BUILD_TESTING=ON -DLIBUSB_BUILD_SHARED_LIBS=OFF ninja -C build/shared install ninja -C build/static install - name: Check artifacts uses: andstor/file-existence-action@v3 with: files: "install/shared/lib/libusb-1.0.so, \ install/shared/include/libusb-1.0/libusb.h, \ install/static/lib/libusb-1.0.a, \ install/static/include/libusb-1.0/libusb.h" fail: true omnios-build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 with: path: src - uses: cross-platform-actions/action@v1 with: operating_system: omnios architecture: x86-64 version: 'r151056' run: | sudo pkg refresh sudo pkg install build-essential cmake header-ugen header-usb ninja rm -rf build install cmake -B build/shared -S src -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=install/shared -DLIBUSB_BUILD_EXAMPLES=ON -DLIBUSB_BUILD_TESTING=ON -DLIBUSB_BUILD_SHARED_LIBS=ON cmake -B build/static -S src -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=install/static -DLIBUSB_BUILD_EXAMPLES=ON -DLIBUSB_BUILD_TESTING=ON -DLIBUSB_BUILD_SHARED_LIBS=OFF ninja -C build/shared install ninja -C build/static install - name: Check artifacts uses: andstor/file-existence-action@v3 with: files: "install/shared/lib/libusb-1.0.so, \ install/shared/include/libusb-1.0/libusb.h, \ install/static/lib/libusb-1.0.a, \ install/static/include/libusb-1.0/libusb.h" fail: true openbsd-build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 with: path: src - uses: cross-platform-actions/action@v1 with: operating_system: openbsd architecture: x86-64 version: '7.8' run: | sudo pkg_add -u sudo pkg_add cmake ninja rm -rf build install cmake -B build/shared -S src -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=install/shared -DLIBUSB_BUILD_EXAMPLES=ON -DLIBUSB_BUILD_TESTING=ON -DLIBUSB_BUILD_SHARED_LIBS=ON cmake -B build/static -S src -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=install/static -DLIBUSB_BUILD_EXAMPLES=ON -DLIBUSB_BUILD_TESTING=ON -DLIBUSB_BUILD_SHARED_LIBS=OFF ninja -C build/shared install ninja -C build/static install - name: Check artifacts uses: andstor/file-existence-action@v3 with: files: "install/shared/lib/libusb-1.0.so, \ install/shared/include/libusb-1.0/libusb.h, \ install/static/lib/libusb-1.0.a, \ install/static/include/libusb-1.0/libusb.h" fail: true event-file: name: "Event File" runs-on: ubuntu-latest steps: - name: Upload uses: actions/upload-artifact@v7 with: name: Event File path: ${{ github.event_path }}