From 99c2b8c8ead6d7efe39284a300afbd4c5c30b9e9 Mon Sep 17 00:00:00 2001 From: Ioannis Tsakpinis Date: Sat, 4 Mar 2023 22:13:50 +0200 Subject: [PATCH] LWJGL CI configuration --- .github/workflows/lwjgl.yml | 252 +++++++++++++++++++++++++++ .gitignore | 2 + contrib/windows-cmake/CMakeLists.txt | 8 +- 3 files changed, 259 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/lwjgl.yml diff --git a/.github/workflows/lwjgl.yml b/.github/workflows/lwjgl.yml new file mode 100644 index 0000000000..d5bbff2bf1 --- /dev/null +++ b/.github/workflows/lwjgl.yml @@ -0,0 +1,252 @@ +name: LWJGL Build + +on: + workflow_dispatch: + push: + branches: + - master + +env: + AWS_DEFAULT_REGION: us-east-1 + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + S3_PARAMS: --cache-control "public,must-revalidate,proxy-revalidate,max-age=0" + +jobs: + linux: + name: Linux + runs-on: ubuntu-latest + container: + image: centos:7 + strategy: + fail-fast: false + matrix: + ARCH: [x64] + include: + - ARCH: x64 + HOST: x86_64-pc-linux-gnu + defaults: + run: + shell: bash + steps: + - name: Upgrade git + run: | + yum -y install https://packages.endpointdev.com/rhel/7/os/x86_64/endpoint-repo.x86_64.rpm + yum -y install git + - uses: actions/checkout@v3 + with: + fetch-depth: 3 + - name: Configure yum + run: | + yum -y install epel-release + yum -y update + - name: Install build dependencies + run: | + yum -y install centos-release-scl + yum -y install devtoolset-11-gcc-c++ + yum -y install autoconf automake libtool awscli + - name: Install autoconf 2.71 + run: | + source scl_source enable devtoolset-11 || true + curl -L https://ftp.gnu.org/gnu/autoconf/autoconf-2.71.tar.gz | tar -xz + (cd autoconf-2.71; ./configure; make; make install) + - name: Configure build + run: | + source scl_source enable devtoolset-11 || true + ./autogen.sh + CFLAGS="-g0 -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0" ./configure --host=${{matrix.HOST}} + - name: Build + run: | + source scl_source enable devtoolset-11 || true + make + strip hwloc/.libs/libhwloc.so + - name: Upload artifact + run: aws s3 cp hwloc/.libs/libhwloc.so s3://lwjgl-build/nightly/linux/${{matrix.ARCH}}/ $S3_PARAMS + - name: Upload git revision + run: | + git config --global --add safe.directory $PWD + git log --first-parent --pretty=format:%H HEAD~2..HEAD~1 > libhwloc.so.git + aws s3 cp libhwloc.so.git s3://lwjgl-build/nightly/linux/${{matrix.ARCH}}/ $S3_PARAMS + + linux-cross: + name: Linux Cross + runs-on: ubuntu-latest + container: + image: ${{matrix.CONTAINER}} + strategy: + fail-fast: false + matrix: + ARCH: [arm32, arm64, ppc64le, riscv64] + include: + # ----- + - ARCH: arm32 + CROSS_ARCH: armhf + CONTAINER: ubuntu:18.04 + TRIPLET: arm-linux-gnueabihf + HOST: arm-unknown-linux-gnueabihf + # ----- + - ARCH: arm64 + CROSS_ARCH: arm64 + CONTAINER: ubuntu:18.04 + TRIPLET: aarch64-linux-gnu + HOST: aarch64-unknown-linux-gnu + # ---- + - ARCH: ppc64le + CROSS_ARCH: ppc64el + CONTAINER: ubuntu:18.04 + TRIPLET: powerpc64le-linux-gnu + HOST: powerpc64le-unknown-linux-gnu + # ---- + - ARCH: riscv64 + CROSS_ARCH: riscv64 + CONTAINER: ubuntu:20.04 + TRIPLET: riscv64-linux-gnu + HOST: riscv64-unknown-linux-gnu + env: + LWJGL_ARCH: ${{matrix.ARCH}} + steps: + - name: Upgrade git + run: | + apt-get -y update + apt-get -y install software-properties-common wget + apt-get -y install --reinstall ca-certificates + apt-get -y update + apt-get -y upgrade + wget https://apt.kitware.com/keys/kitware-archive-latest.asc + apt-key add kitware-archive-latest.asc + add-apt-repository -y 'deb https://apt.kitware.com/ubuntu/ bionic main' + add-apt-repository -y ppa:git-core/ppa + apt-get -y update + DEBIAN_FRONTEND=noninteractive apt-get -yq install awscli git + - uses: actions/checkout@v3 + with: + fetch-depth: 3 + - name: Install dependencies + run: DEBIAN_FRONTEND=noninteractive apt-get -yq install autoconf make libtool gcc-${{matrix.TRIPLET}} libc6-dev-${{matrix.CROSS_ARCH}}-cross + - name: Prepare cross-compilation for ${{matrix.CROSS_ARCH}} + run: | + sed -i 's/deb http/deb [arch=amd64,i386] http/' /etc/apt/sources.list + grep "ubuntu.com/ubuntu" /etc/apt/sources.list | tee /etc/apt/sources.list.d/ports.list + sed -i 's/amd64,i386/${{matrix.CROSS_ARCH}}/' /etc/apt/sources.list.d/ports.list + sed -i 's#http://.*/ubuntu#http://ports.ubuntu.com/ubuntu-ports#' /etc/apt/sources.list.d/ports.list + dpkg --add-architecture ${{matrix.CROSS_ARCH}} + apt-get update + - name: Configure build + run: | + ./autogen.sh + PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:${CMAKE_SYSROOT}/usr/lib/${{matrix.TRIPLET}}/pkgconfig CC=${{matrix.TRIPLET}}-gcc CFLAGS="-g0 -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0" ./configure --host=${{matrix.HOST}} + - name: Build + run: | + make + ${{matrix.TRIPLET}}-strip hwloc/.libs/libhwloc.so + - name: Upload artifacts + run: aws s3 cp hwloc/.libs/libhwloc.so s3://lwjgl-build/nightly/linux/${{matrix.ARCH}}/ $S3_PARAMS + - name: Upload git revision + run: | + git config --global --add safe.directory $(pwd) + git log --first-parent --pretty=format:%H HEAD~2..HEAD~1 > libhwloc.so.git + aws s3 cp libhwloc.so.git s3://lwjgl-build/nightly/linux/${{matrix.ARCH}}/ $S3_PARAMS + + freebsd-cross: + name: FreeBSD Cross + runs-on: ubuntu-latest + strategy: + fail-fast: false + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 3 + - name: Build + uses: cross-platform-actions/action@v0.24.0 + with: + operating_system: freebsd + architecture: x86-64 + version: '13.2' + memory: 4G + shell: bash + run: | + sudo pkg install -y autoconf automake libtool gmake + ./autogen.sh + CFLAGS="-g0 -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0" ./configure --host=x86_64-unknown-freebsd13.2 + gmake + strip hwloc/.libs/libhwloc.so + - name: Upload artifact + run: aws s3 cp hwloc/.libs/libhwloc.so s3://lwjgl-build/nightly/freebsd/x64/ $S3_PARAMS + - name: Upload git revision + run: | + git config --global --add safe.directory $PWD + git log --first-parent --pretty=format:%H HEAD~2..HEAD~1 > libhwloc.so.git + aws s3 cp libhwloc.so.git s3://lwjgl-build/nightly/freebsd/x64/ $S3_PARAMS + + macos: + name: macOS + runs-on: macos-latest + strategy: + fail-fast: false + matrix: + ARCH: [x64, arm64] + include: + - ARCH: x64 + DARWIN: 15 + CC: MACOSX_DEPLOYMENT_TARGET=10.11 CFLAGS="-g0 -O2 -target x64-apple-darwin -arch x86_64 -mmacosx-version-min=10.11" LDFLAGS="-target x64-apple-darwin -arch x86_64 -mmacosx-version-min=10.11" + HOST: x86_64 + - ARCH: arm64 + DARWIN: 20 + CC: MACOSX_DEPLOYMENT_TARGET=11.0 CFLAGS="-g0 -O2 -target aarch64-apple-darwin -arch arm64 -mmacosx-version-min=11.0" LDFLAGS="-target aarch64-apple-darwin -arch arm64 -mmacosx-version-min=11.0" + HOST: aarch64 + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 3 + - name: Install dependencies + run: brew install automake libtool + - name: Configure build + run: | + ./autogen.sh + ${{matrix.CC}} ./configure --target ${{matrix.ARCH}}-apple-darwin${{matrix.DARWIN}} --host=${{matrix.HOST}}-apple-darwin${{matrix.DARWIN}} + - name: Build + run: | + make + strip -u -r hwloc/.libs/libhwloc.dylib + - name: Upload artifacts + run: | + aws s3 cp hwloc/.libs/libhwloc.dylib s3://lwjgl-build/nightly/macosx/${{matrix.ARCH}}/ $S3_PARAMS + - name: Upload git revision + run: | + git log --first-parent --pretty=format:%H HEAD~2..HEAD~1 > libhwloc.dylib.git + aws s3 cp libhwloc.dylib.git s3://lwjgl-build/nightly/macosx/${{matrix.ARCH}}/ $S3_PARAMS + + windows: + name: Windows + runs-on: windows-latest + strategy: + fail-fast: false + matrix: + ARCH: [x86, x64, arm64] + include: + - ARCH: x86 + PLATFORM: Win32 + HAS_X86: ON + - ARCH: x64 + PLATFORM: x64 + HAS_X86: ON + - ARCH: arm64 + PLATFORM: ARM64 + HAS_X86: OFF + defaults: + run: + shell: cmd + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 3 + - name: Configure build + run: cmake -B build -G "Visual Studio 17 2022" -A ${{matrix.PLATFORM}} -DLWJGL_HAS_X86=${{matrix.HAS_X86}} -DHWLOC_ENABLE_TESTING=OFF -DHWLOC_SKIP_LSTOPO=ON -DHWLOC_SKIP_TOOLS=ON -DHWLOC_SKIP_INCLUDES=ON -DHWLOC_WITH_OPENCL=OFF -DHWLOC_WITH_CUDA=OFF -DBUILD_SHARED_LIBS=ON -DCMAKE_C_FLAGS_RELEASE="/MT /EHsc /Ox /GF /Gy /GS- /DNDEBUG" -DCMAKE_SHARED_LINKER_FLAGS_RELEASE="/OPT:REF,ICF /INCREMENTAL:NO" contrib/windows-cmake + - name: Build + run: cmake --build build --config Release + - name: Upload artifacts + run: aws s3 cp build\Release\hwloc.dll s3://lwjgl-build/nightly/windows/${{matrix.ARCH}}/ %S3_PARAMS% + - name: Upload git revision + run: | + git log --first-parent --pretty=format:%%H HEAD~2..HEAD~1 > hwloc.dll.git + aws s3 cp hwloc.dll.git s3://lwjgl-build/nightly/windows/${{matrix.ARCH}}/ %S3_PARAMS% diff --git a/.gitignore b/.gitignore index fd86d7fb1f..5e9e62d449 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,8 @@ test-suite.log *.log *.trs +/build + /auto.out /config.out /dist.out diff --git a/contrib/windows-cmake/CMakeLists.txt b/contrib/windows-cmake/CMakeLists.txt index 3a2deac06e..870700f653 100644 --- a/contrib/windows-cmake/CMakeLists.txt +++ b/contrib/windows-cmake/CMakeLists.txt @@ -5,6 +5,8 @@ project(hwloc enable_testing() +option(LWJGL_HAS_X86 "LWJGL flag to skip x86 stuff on ARM build" ON) + option(HWLOC_ENABLE_TESTING "Enable testing" ON) option(HWLOC_SKIP_LSTOPO "don't build/install lstopo") option(HWLOC_SKIP_TOOLS "don't build/install other hwloc tools") @@ -50,10 +52,10 @@ set(SIZEOF_VOID_P ${CMAKE_SIZEOF_VOID_P}) set(HWLOC_X86_32_ARCH) set(HWLOC_X86_64_ARCH) set(HWLOC_HAVE_X86_CPUID 1) -if (CMAKE_SYSTEM_PROCESSOR MATCHES "(^AMD64$|^x86_64$)") +if (LWJGL_HAS_X86 AND CMAKE_SYSTEM_PROCESSOR MATCHES "(^AMD64$|^x86_64$)") # "AMD64" on Windows, "x86_64" on Linux set(HWLOC_X86_64_ARCH 1) -elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "(^x86$|i.86)") +elseif (LWJGL_HAS_X86 AND CMAKE_SYSTEM_PROCESSOR MATCHES "(^x86$|i.86)") # "x86" on Windows, "i.86" on Linux set(HWLOC_X86_32_ARCH 1) else() @@ -122,7 +124,7 @@ add_library(hwloc ${TOPDIR}/hwloc/topology-xml.c ${TOPDIR}/hwloc/topology-xml-nolibxml.c ${TOPDIR}/hwloc/topology-windows.c - ${TOPDIR}/hwloc/topology-x86.c + $<$:${TOPDIR}/hwloc/topology-x86.c> $<$:${TOPDIR}/hwloc/topology-xml-libxml.c> $<$:${TOPDIR}/hwloc/topology-opencl.c> $<$:${TOPDIR}/hwloc/topology-cuda.c>