Skip to content
Draft
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
117 changes: 117 additions & 0 deletions .github/workflows/CI-mingw.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
name: CI-mingw

on: [push, pull_request]

permissions:
contents: read

defaults:
run:
shell: msys2 {0}

jobs:
build:

strategy:
matrix:
compiler: [g++, clang++]
msystem: [MSYS, MINGW32, MINGW64, CLANG64]
include:
- msystem: MSYS
pkg-prefix: ''
- msystem: MINGW32
pkg-prefix: 'mingw-w64-i686-'
- msystem: MINGW64
pkg-prefix: 'mingw-w64-x86_64-'
- msystem: CLANG64
pkg-prefix: 'mingw-w64-clang-x86_64-'
- compiler: g++
compiler-pkg: gcc
- compiler: clang++
compiler-pkg: clang
exclude:
- msystem: CLANG64
compiler: g++
fail-fast: false

runs-on: windows-2025

env:
CXX: ${{ matrix.compiler }}

steps:
- uses: actions/checkout@v4
with:
persist-credentials: false

- name: Set up MSYS2
uses: msys2/setup-msys2@v2
with:
release: false # use pre-installed
msystem: ${{ matrix.msystem }}
# TODO: install mingw-w64-x86_64-make and use mingw32.make instead - currently fails with "Windows Subsystem for Linux has no installed distributions."
# TODO: also run tests with non-prefixed Python?
install: >-
make
${{ matrix.pkg-prefix }}cmake
${{ matrix.pkg-prefix }}python
${{ matrix.pkg-prefix }}python-pytest

- name: install compiler
run: |
pacman -S --noconfirm ${{ matrix.pkg-prefix }}${{ matrix.compiler-pkg }}
${CXX} -v

- name: make simplecpp
run: |
make -j$(nproc) CXXOPTS="-Werror"

# gcc *and* clang are required to run-tests.py
# install it at this point since it has gcc as dependency which might interfere with the build
- name: install compiler (clang)
if: matrix.compiler == 'g++'
run: |
pacman -S --noconfirm clang

- name: install compiler (gcc)
if: matrix.compiler == 'clang++'
run: |
pacman -S --noconfirm gcc

- name: make test
run: |
# TODO: run tests with Windows paths
make -j$(nproc) test

- name: selfcheck
run: |
# TODO: run tests with Windows paths
make -j$(nproc) selfcheck

- name: Run CMake
run: |
cmake -S . -B cmake.output -DCMAKE_COMPILE_WARNING_AS_ERROR=On

- name: CMake simplecpp
run: |
cmake --build cmake.output --target simplecpp -- -j $(nproc)

- name: CMake testrunner
run: |
cmake --build cmake.output --target testrunner -- -j $(nproc)

- name: Run testrunner
run: |
./cmake.output/testrunner

- name: Run with libstdc++ debug mode
if: matrix.compiler == 'g++'
run: |
make clean
make -j$(nproc) test selfcheck CXXOPTS="-Werror -g3 -D_GLIBCXX_DEBUG"

- name: Run with libc++ hardening mode
if: matrix.compiler == 'clang++' && matrix.msystem == 'CLANG64'
run: |
make clean
make -j$(nproc) test selfcheck CXXOPTS="-Werror -stdlib=libc++ -g3 -D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_DEBUG" LDOPTS="-lc++"
12 changes: 11 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,9 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
add_compile_options(-Woverloaded-virtual) # when a function declaration hides virtual functions from a base class

add_compile_options(-Wsuggest-attribute=noreturn)
add_compile_options_safe(-Wuseless-cast)
if (NOT MINGW)
add_compile_options_safe(-Wuseless-cast)
endif()

# we are not interested in these
set_source_files_properties(test.cpp PROPERTIES COMPILE_FLAGS -Wno-multichar)
Expand Down Expand Up @@ -62,6 +64,14 @@ elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")

# contradicts -Wcovered-switch-default
add_compile_options(-Wno-switch-default)
if (MINGW)
add_compile_options(-Wno-reserved-macro-identifier)
add_compile_options(-Wno-unused-macros)
endif()

# these are experimental warning which might produce false positives
add_compile_options_safe(-Wno-thread-safety-negative)
add_compile_options_safe(-Wno-thread-safety-beta)

# TODO: fix these?
add_compile_options(-Wno-padded)
Expand Down
15 changes: 13 additions & 2 deletions selfcheck.sh
Original file line number Diff line number Diff line change
Expand Up @@ -41,16 +41,20 @@ if [ "$cxx_type" = "Ubuntu" ] || [ "$cxx_type" = "Debian" ]; then
fi

# TODO: generate defines from compiler
if [ "$cxx_type" = "g++" ]; then
if [ "$cxx_type" = "g++" ] || [ "$cxx_type" = "g++.exe" ]; then
defs=
defs="$defs -D__GNUC__"
defs="$defs -D__STDC__"
defs="$defs -D__x86_64__"
defs="$defs -D__STDC_HOSTED__"
defs="$defs -D__CHAR_BIT__=8"
if [ "${MSYSTEM}" = "MINGW32" ] || [ "${MSYSTEM}" = "MINGW64" ]; then
defs="$defs -D_WIN32"
fi
defs="$defs -D__has_builtin(x)=(1)"
defs="$defs -D__has_cpp_attribute(x)=(1)"
defs="$defs -D__has_attribute(x)=(1)"
defs="$defs -Ddefined(x)=(0)"

inc=
while read line
Expand All @@ -63,12 +67,19 @@ elif [ "$cxx_type" = "clang" ]; then
defs="$defs -D__x86_64__"
defs="$defs -D__STDC_HOSTED__"
defs="$defs -D__CHAR_BIT__=8"
defs="$defs -D__BYTE_ORDER__=1234"
defs="$defs -D__SIZEOF_SIZE_T__=8"
if [ "${MSYSTEM}" = "MINGW32" ] || [ "${MSYSTEM}" = "MINGW64" ] || [ "${MSYSTEM}" = "CLANG64" ]; then
defs="$defs -D_WIN32"
fi
defs="$defs -D__has_builtin(x)=(1)"
defs="$defs -D__has_cpp_attribute(x)=(1)"
defs="$defs -D__has_feature(x)=(1)"
defs="$defs -D__has_include_next(x)=(0)"
defs="$defs -D__has_include_next(x)=(1)"
defs="$defs -D__has_attribute(x)=(0)"
defs="$defs -D__building_module(x)=(0)"
defs="$defs -D__has_extension(x)=(1)"
defs="$defs -Ddefined(x)=(0)"

inc=
while read line
Expand Down
2 changes: 1 addition & 1 deletion simplecpp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3121,7 +3121,7 @@ std::pair<simplecpp::FileData *, bool> simplecpp::FileDataCache::get(const std::
bool simplecpp::FileDataCache::getFileId(const std::string &path, FileID &id)
{
#ifdef _WIN32
HANDLE hFile = CreateFileA(path.c_str(), 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
HANDLE hFile = CreateFileA(path.c_str(), 0, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr);

if (hFile == INVALID_HANDLE_VALUE)
return false;
Expand Down
Loading