Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Run internal tests in Cygwin #1592

Merged
merged 1 commit into from
Jan 17, 2025
Merged
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
37 changes: 37 additions & 0 deletions .github/workflows/testing.yml
Original file line number Diff line number Diff line change
Expand Up @@ -320,3 +320,40 @@ jobs:
shell: bash
run: |
test/run-tests.sh

cygwin:
strategy:
matrix:
bits: [32, 64]
include:
- bits: 32
arch: x86
- bits: 64
arch: x86_64
fail-fast: false
runs-on: windows-2019
timeout-minutes: 30
steps:
- name: Checkout repo
uses: actions/checkout@v4
- name: Setup Cygwin
uses: cygwin/cygwin-install-action@v4
with:
platform: ${{ matrix.arch }}
packages: >-
bison
gcc-g++
git
libpng-devel
make
pkg-config
- name: Build & install using Make
shell: C:\cygwin\bin\env.exe CYGWIN_NOWINPATH=1 CHERE_INVOKING=1 C:\cygwin\bin\bash.exe -o igncr '{0}'
run: | # Cygwin does not support `make develop` sanitizers ASan or UBSan
make -kj Q=
make install -j Q=
- name: Run tests
shell: C:\cygwin\bin\env.exe CYGWIN_NOWINPATH=1 CHERE_INVOKING=1 C:\cygwin\bin\bash.exe -o igncr '{0}'
run: | # Allow asm/test.sh to run `git describe` for the version test
git config --global --add safe.directory '*'
test/run-tests.sh --only-internal
69 changes: 20 additions & 49 deletions test/gfx/rgbgfx_test.cpp
Original file line number Diff line number Diff line change
@@ -1,21 +1,5 @@
/* SPDX-License-Identifier: MIT */

// For `execProg` (Windows is its special little snowflake again)
#if !defined(_MSC_VER) && !defined(__MINGW32__)
#include <sys/stat.h>
#include <sys/wait.h>

#include <signal.h>
#include <spawn.h>
#include <unistd.h>
#else
#define WIN32_LEAN_AND_MEAN // Include less from `windows.h` to avoid conflicts
#include <windows.h>
#include <errhandlingapi.h>
#include <processthreadsapi.h>
#undef max // This macro conflicts with `std::numeric_limits<...>::max()`
#endif

#include <algorithm>
#include <array>
#include <cassert>
Expand All @@ -34,6 +18,22 @@

#include "gfx/rgba.hpp" // Reused from RGBGFX

// For `execProg` (Windows and POSIX spawn child processes differently)
#if !defined(_MSC_VER) && !defined(__MINGW32__)
#include <sys/stat.h>
#include <sys/wait.h>

#include <signal.h>
#include <spawn.h>
#include <unistd.h>
#else
#define WIN32_LEAN_AND_MEAN // Include less from `windows.h` to avoid conflicts
#include <windows.h>
#include <errhandlingapi.h>
#include <processthreadsapi.h>
#undef max // This macro conflicts with `std::numeric_limits<...>::max()`
#endif

static uintmax_t nbErrors;

static void warning(char const *fmt, ...) {
Expand Down Expand Up @@ -308,23 +308,13 @@ static char *execProg(char const *name, char * const *argv) {
return strerror(err);
}

siginfo_t info;
if (waitid(P_PID, pid, &info, WEXITED) != 0) {
if (int info; waitpid(pid, &info, 0) == -1 || !WIFEXITED(info)) {
fatal("Error waiting for %s: %s", name, strerror(errno));
} else if (info.si_code != CLD_EXITED) {
assert(info.si_code == CLD_KILLED || info.si_code == CLD_DUMPED);
fatal(
"%s was terminated by signal %s%s\n\tThe command was: [%s]",
name,
strsignal(info.si_status),
info.si_code == CLD_DUMPED ? " (core dumped)" : "",
formatArgv()
);
} else if (info.si_status != 0) {
} else if (int status = WEXITSTATUS(info); status != 0) {
fatal(
"%s returned with status %d\n\tThe command was: [%s]",
name,
info.si_status,
status,
formatArgv()
);
}
Expand Down Expand Up @@ -359,26 +349,7 @@ static char *execProg(char const *name, char * const *argv) {

STARTUPINFOA startupInfo;
GetStartupInfoA(&startupInfo);
STARTUPINFOA childStartupInfo{
sizeof(startupInfo),
nullptr,
nullptr,
nullptr,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
nullptr,
0,
0,
0,
};
STARTUPINFOA childStartupInfo = {sizeof(startupInfo)};

PROCESS_INFORMATION child;
if (CreateProcessA(
Expand Down
13 changes: 11 additions & 2 deletions test/run-tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,15 @@ cd "$(dirname "$0")"
usage() {
echo "Runs regression tests on RGBDS."
echo "Options:"
echo " -h, --help show this help message"
echo " --only-free skip tests that build nonfree codebases"
echo " -h, --help show this help message"
echo " --only-free skip tests that build nonfree codebases"
echo " --only-internal skip tests that build external codebases"
}

# Parse options in pure Bash because macOS `getopt` is stuck
# in what util-linux `getopt` calls `GETOPT_COMPATIBLE` mode
nonfree=true
external=true
FETCH_TEST_DEPS="fetch-test-deps.sh"
while [[ $# -gt 0 ]]; do
case "$1" in
Expand All @@ -24,6 +26,9 @@ while [[ $# -gt 0 ]]; do
nonfree=false
FETCH_TEST_DEPS="fetch-test-deps.sh --only-free"
;;
--only-internal)
external=false
;;
--)
break
;;
Expand All @@ -49,6 +54,10 @@ for dir in asm link fix gfx; do
popd
done

if ! "$external"; then
exit
fi

# Test some significant external projects that use RGBDS
# When adding new ones, don't forget to add them to the .gitignore!
# When updating subprojects, change the commit being checked out, and set the `shallow-since`
Expand Down
Loading