Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
160 changes: 160 additions & 0 deletions .github/workflows/built_test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
# Documentation: https://wiki.unvanquished.net/wiki/Continuous_integration

name: Build

on:
push:
branches:
- master
- 'for-*.*.*/sync' # Next-release branch
pull_request:
branches:
- '**'
paths:
- '.github/workflows/build_test.yml'
- '.gitmodules'
# 'android/**'
- 'autotools/**'
- 'compat/**'
- configure.ac
- DEPS
- fetch-externals
- 'm4/**'
- Makefile.am
- 'src/**'
- 'test/**'
- 'wine/**'

jobs:
build:
name: ${{ matrix.name }}
runs-on: ${{ matrix.vm_image }}

strategy:
fail-fast: false
matrix:
include:
- name: Linux amd64 GCC
vm_image: ubuntu-22.04
apt_packages: g++-12 libcurl4-openssl-dev
env_commands: export CC=gcc-12 CXX=g++-12
- name: Linux i686 GCC
# This platform reliably caught in CI the random thread-related
# bug src/client/linux/linux_client_unittest, making it possible
# to track down and debug it. It also catches more pointer type
# mismatches, thanks to the different sizes. In the end it helps
# improving robustness.
vm_image: ubuntu-22.04
apt_architecture: i386
apt_packages: g++-i686-linux-gnu libcurl4-openssl-dev:i386 zlib1g-dev:i386 libzstd-dev:i386
env_commands: export CC=i686-linux-gnu-gcc CXX=i686-linux-gnu-g++
- name: Linux arm64 GCC
vm_image: ubuntu-22.04-arm
apt_packages: g++-12 libcurl4-openssl-dev binutils-x86-64-linux-gnu
env_commands: export CC=gcc-12 CXX=g++-12
- name: Linux amd64 Clang
vm_image: ubuntu-22.04
apt_packages: clang libcurl4-openssl-dev
env_commands: export CC=clang CXX=clang++
- name: Windows amd64 MinGW
vm_image: ubuntu-26.04
apt_packages: g++-mingw-w64-x86-64 mingw-w64-x86-64-dev gcc-mingw-w64-x86-64-posix-runtime wine libcurl4-openssl-dev libz-mingw-w64-dev
setup_commands: sudo update-alternatives --set x86_64-w64-mingw32-g++ /usr/bin/x86_64-w64-mingw32-g++-posix
env_commands: export TESTDRIVER_SHARED_TEMP_WINEPREFIX=true
# There is no libzstd-mingw-w64-dev.
configure_options: --host=x86_64-w64-mingw32 --enable-static-mingw --disable-zstd
- name: Windows arm64 MinGW
vm_image: windows-11-arm
shell: msys2 {0}
msystem: CLANGARM64
pacman_packages: base-devel mingw-w64-clang-aarch64-clang mingw-w64-clang-aarch64-gcc-compat autoconf automake libtool
env_commands: export CC=aarch64-w64-mingw32-gcc CXX=aarch64-w64-mingw32-g++
configure_options: --host=aarch64-w64-mingw32 --enable-static-mingw
- name: macOS amd64 AppleClang
vm_image: macos-15-intel
brew_packages: autoconf automake libtool zstd
nproc_command: sysctl -n hw.logicalcpu
- name: macOS arm64 AppleClang
vm_image: macos-15
brew_packages: autoconf automake libtool zstd
nproc_command: sysctl -n hw.logicalcpu

env:
APT_ARCHITECTURE: ${{ matrix.apt_architecture }}
APT_PACKAGES: ${{ matrix.apt_packages }}
BREW_PACKAGES: ${{ matrix.brew_packages }}
SETUP_COMMANDS: ${{ matrix.setup_commands }}
ENV_COMMANDS: ${{ matrix.env_commands }}
NPROC_COMMAND: ${{ matrix.nproc_command }}
CONFIGURE_OPTIONS: ${{ matrix.configure_options }}

defaults:
run:
shell: ${{ matrix.shell || 'bash' }}

steps:
- uses: actions/checkout@v5

- name: Checkout dependencies
# This doesn't require the MSYS2 shell, so we can run this before the MSYS2 setup,
# and we don't have to install fetch-externals' dependencies in MSYS2 environment
# like python and git which are already provided in the default Git bash environment.
shell: bash
run: |
# To fetch googletest.
./fetch-externals

- name: Setup MSYS2 packages
if: ${{ matrix.pacman_packages != '' }}
uses: msys2/setup-msys2@v2
with:
msystem: ${{ matrix.msystem }}
install: ${{ matrix.pacman_packages }}
update: true

- name: Setup Apt architecture
if: ${{ matrix.apt_architecture != '' }}
run: |
set -xue
sudo dpkg --add-architecture "${APT_ARCHITECTURE}"

- name: Setup Apt packages
if: ${{ matrix.apt_packages != '' }}
run: |
set -xue
sudo apt-get update && sudo apt-get -y -q --no-install-recommends install ${APT_PACKAGES}

- name: Setup Brew packages
if: ${{ matrix.brew_packages != '' }}
run: |
set -xue
brew update && brew install ${BREW_PACKAGES}

- name: Setup commands
if: ${{ matrix.setup_commands != '' }}
run: |
set -xue
${SETUP_COMMANDS}

- name: Build
run: |
set -xue
${ENV_COMMANDS}
parallelism="$(${NPROC_COMMAND:-nproc})"
echo "Build parallelism: ${parallelism}"
autoreconf -fvi
if ! ./configure --enable-zstd ${CONFIGURE_OPTIONS}; then
[ ! -f config.log ] || cat config.log
false
fi
make "-j${parallelism}"

- name: Test
run: |
set -xue
${ENV_COMMANDS}
parallelism="$(${NPROC_COMMAND:-nproc})"
if ! make "-j${parallelism}" check; then
[ ! -f test-suite.log ] || cat test-suite.log
false
fi
52 changes: 38 additions & 14 deletions Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,21 @@ check_SCRIPTS = \
src/processor/minidump_stackwalk_test \
src/processor/minidump_stackwalk_machine_readable_test

## dump_syms tests
check_DEPS = \
src/tools/linux/dump_syms/dump_syms \
src/tools/windows/dump_syms_dwarf/dump_syms_dwarf

check_SCRIPTS += \
src/tools/linux/dump_syms/dump_syms_test \
src/tools/windows/dump_syms_dwarf/dump_syms_dwarf_test

check_DEPS += \
src/tools/mac/dump_syms/dump_syms_mac

check_SCRIPTS += \
src/tools/mac/dump_syms/dump_syms_mac_test

endif !DISABLE_PROCESSOR


Expand Down Expand Up @@ -302,6 +317,12 @@ bin_PROGRAMS += \
check_PROGRAMS += \
src/common/dumper_unittest

bin_PROGRAMS += \
src/tools/mac/dump_syms/dump_syms_mac

check_PROGRAMS += \
src/common/mac/macho_reader_unittest

if LINUX_HOST

if ENABLE_UPLOAD_TOOLS
Expand All @@ -315,9 +336,6 @@ bin_PROGRAMS += \
src/tools/linux/pid2md/pid2md \
src/tools/linux/md2core/minidump-2-core

bin_PROGRAMS += \
src/tools/mac/dump_syms/dump_syms_mac

if HAVE_MEMFD_CREATE
libexec_PROGRAMS += \
src/tools/linux/core_handler/core_handler
Expand All @@ -326,9 +344,6 @@ endif
check_PROGRAMS += \
src/tools/linux/md2core/minidump_2_core_unittest

check_PROGRAMS += \
src/common/mac/macho_reader_unittest

endif LINUX_HOST

endif !DISABLE_TOOLS
Expand Down Expand Up @@ -723,12 +738,13 @@ src_tools_linux_dump_syms_dump_syms_SOURCES = \
src/tools/linux/dump_syms/dump_syms.cc
src_tools_linux_dump_syms_dump_syms_CXXFLAGS = \
$(RUSTC_DEMANGLE_CFLAGS) \
$(ZSTD_CFLAGS)
$(ZSTD_CFLAGS) \
$(LIBZ_CFLAGS)
src_tools_linux_dump_syms_dump_syms_LDADD = \
$(RUSTC_DEMANGLE_LIBS) \
$(ZSTD_CFLAGS) \
$(SOCKET_LIBS) \
-lz
$(SOCKET_LIBS) \
$(ZSTD_LIBS) \
$(LIBZ_LIBS)

src_tools_linux_md2core_minidump_2_core_SOURCES = \
src/common/linux/memory_mapped_file.cc \
Expand Down Expand Up @@ -788,8 +804,12 @@ src_tools_mac_dump_syms_dump_syms_mac_SOURCES = \
src/common/mac/macho_walker.cc \
src/common/mac/macho_walker.h \
src/tools/mac/dump_syms/dump_syms_tool.cc
src_tools_mac_dump_syms_dump_syms_mac_CXXFLAGS= \
-I$(top_srcdir)/src/third_party/mac_headers \
src_tools_mac_dump_syms_dump_syms_mac_CXXFLAGS =
if !MACOS_BUILD
src_tools_mac_dump_syms_dump_syms_mac_CXXFLAGS += \
-I$(top_srcdir)/src/third_party/mac_headers
endif
src_tools_mac_dump_syms_dump_syms_mac_CXXFLAGS += \
$(RUSTC_DEMANGLE_CFLAGS) \
-DHAVE_MACH_O_NLIST_H
src_tools_mac_dump_syms_dump_syms_mac_LDADD= \
Expand Down Expand Up @@ -912,8 +932,12 @@ src_common_mac_macho_reader_unittest_SOURCES = \
src/common/mac/macho_walker.cc \
src/common/tests/file_utils.cc
src_common_mac_macho_reader_unittest_CPPFLAGS = \
$(AM_CPPFLAGS) $(TEST_CFLAGS) \
-I$(top_srcdir)/src/third_party/mac_headers \
$(AM_CPPFLAGS) $(TEST_CFLAGS)
if !MACOS_BUILD
src_common_mac_macho_reader_unittest_CPPFLAGS += \
-I$(top_srcdir)/src/third_party/mac_headers
endif
src_common_mac_macho_reader_unittest_CPPFLAGS += \
-DHAVE_MACH_O_NLIST_H \
$(PTHREAD_CFLAGS)
src_common_mac_macho_reader_unittest_LDADD = \
Expand Down
94 changes: 79 additions & 15 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -142,20 +142,17 @@ esac
AM_CONDITIONAL(ANDROID_HOST, test x$ANDROID_HOST = xtrue)

case $build_os in
darwin*)
MACOS_BUILD=true
;;
mingw* | msys* | cygwin*)
WINDOWS_BUILD=true
;;
esac

AM_CONDITIONAL(WINE_HOST, test x$WINDOWS_HOST = xtrue -a x$WINDOWS_BUILD != xtrue)
AM_CONDITIONAL(MACOS_BUILD, test x$MACOS_BUILD = xtrue)

# Some tools (like mac ones) only support x86 currently.
case $host_cpu in
i?86|x86_64)
X86_HOST=true
;;
esac
AM_CONDITIONAL(X86_HOST, test x$X86_HOST = xtrue)
AM_CONDITIONAL(WINE_HOST, test x$WINDOWS_HOST = xtrue -a x$WINDOWS_BUILD != xtrue)

AC_ARG_ENABLE(processor,
AS_HELP_STRING([--disable-processor],
Expand Down Expand Up @@ -256,17 +253,84 @@ fi
AC_ARG_VAR([RUSTC_DEMANGLE_CFLAGS], [Compiler flags for rustc-demangle])
AC_ARG_VAR([RUSTC_DEMANGLE_LIBS], [Linker flags for rustc-demangle])

AC_ARG_ENABLE(zstd,
AS_HELP_STRING([--enable-zstd],
[Enable decompression of ELF sections with zstd]),,
PKG_PROG_PKG_CONFIG

AC_ARG_ENABLE([zlib],
[AS_HELP_STRING([--disable-zlib],
[Disable decompression of ELF sections with zlib])],
[enable_zlib=$enableval],
[enable_zlib=yes])

if test "x${enable_zlib}" = "xyes"; then
have_zlib=no
LIBZ_CFLAGS=""
LIBZ_LIBS=""

AC_CHECK_LIB([z], [uncompress],
[have_zlib=yes
LIBZ_LIBS="-lz"],
[have_zlib=no])

if test "x${have_zlib}" != "xyes"; then
PKG_CHECK_MODULES([LIBZ], [libz],
[have_zlib=yes],
[have_zlib=no])
fi

if test "x${have_zlib}" != "xyes"; then
AC_MSG_ERROR([zlib library not found.])
fi

save_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $LIBZ_CFLAGS"
AC_CHECK_HEADER([zlib.h], [],
[AC_MSG_ERROR([zlib header not found.])])
CPPFLAGS="$save_CPPFLAGS"
fi

AC_SUBST([LIBZ_CFLAGS])
AC_SUBST([LIBZ_LIBS])
AM_CONDITIONAL([ENABLE_LIBZ], [test "x${enable_zlib}" = "xyes"])

PKG_PROG_PKG_CONFIG

AC_ARG_ENABLE([zstd],
[AS_HELP_STRING([--enable-zstd],
[Enable decompression of ELF sections with zstd])],
[enable_zstd=$enableval],
[enable_zstd=no])
if test "x${enable_zstd}" != xno; then
AC_CHECK_LIB(zstd, ZSTD_decompress, [],
[AC_MSG_ERROR([zstd library not found.])])
AC_CHECK_HEADER(zstd.h, [],

if test "x${enable_zstd}" = "xyes"; then
have_zstd=no
ZSTD_CFLAGS=""
ZSTD_LIBS=""

AC_CHECK_LIB([zstd], [ZSTD_decompress],
[have_zstd=yes
ZSTD_LIBS="-lzstd"],
[have_zstd=no])

if test "x${have_zstd}" != "xyes"; then
PKG_CHECK_MODULES([ZSTD], [libzstd],
[have_zstd=yes],
[have_zstd=no])
fi

if test "x${have_zstd}" != "xyes"; then
AC_MSG_ERROR([zstd library not found.])
fi

save_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $ZSTD_CFLAGS"
AC_CHECK_HEADER([zstd.h], [],
[AC_MSG_ERROR([zstd header not found.])])
CPPFLAGS="$save_CPPFLAGS"
fi

AC_SUBST([ZSTD_CFLAGS])
AC_SUBST([ZSTD_LIBS])
AM_CONDITIONAL([ENABLE_ZSTD], [test "x${enable_zstd}" = "xyes"])

AC_ARG_WITH(tests-as-root,
AS_HELP_STRING([--with-tests-as-root],
[Run the tests as root. Use this on platforms]
Expand Down
Loading
Loading