From a389263d5e23f15bb4580b03e19c3a36d6066037 Mon Sep 17 00:00:00 2001 From: Ivan Maidanski Date: Thu, 24 Sep 2026 19:40:46 +0300 Subject: [PATCH 01/12] Travis CI: Use git shallow clone with depth one --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index 8d1c1bc3..e41d3dde 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,9 @@ language: c os: linux dist: noble +git: + depth: 1 + jobs: include: - compiler: clang From 39df499f074ac26dae917f32f97d09bb65acaed3 Mon Sep 17 00:00:00 2001 From: Ivan Maidanski Date: Thu, 24 Sep 2026 20:27:52 +0300 Subject: [PATCH 02/12] GH Actions: Reformat .yml file with yamllint 1.37.1 --- .github/workflows/cmake-build.yml | 180 ++++++++++++++++-------------- 1 file changed, 96 insertions(+), 84 deletions(-) diff --git a/.github/workflows/cmake-build.yml b/.github/workflows/cmake-build.yml index d6354cd1..1c80b6e4 100644 --- a/.github/workflows/cmake-build.yml +++ b/.github/workflows/cmake-build.yml @@ -1,11 +1,15 @@ +--- # This workflow is for CMake-based build/test running on multiple platforms. name: cmake build -on: [push, pull_request] +"on": [push, pull_request] jobs: build: - name: ${{ matrix.os }} ${{ matrix.c_compiler }} ${{ matrix.build_type }} dll:${{ matrix.shared_libs }} assert:${{ matrix.assertions }} intrinsic:${{ matrix.atomic_intrinsics }} + name: >- + ${{ matrix.os }} ${{ matrix.c_compiler }} ${{ matrix.build_type }} + dll:${{ matrix.shared_libs }} assert:${{ matrix.assertions }} + intrinsic:${{ matrix.atomic_intrinsics }} runs-on: ${{ matrix.os }} timeout-minutes: 3 @@ -14,93 +18,101 @@ jobs: fail-fast: false matrix: - os: [ macos-26-intel, macos-latest, ubuntu-24.04-arm, ubuntu-latest, windows-11-arm, windows-latest ] - c_compiler: [ cl, clang, gcc ] - build_type: [ Release, Debug ] - shared_libs: [ off, on ] - assertions: [ off, on ] - atomic_intrinsics: [ on, off ] + os: + - macos-26-intel + - macos-latest + - ubuntu-24.04-arm + - ubuntu-latest + - windows-11-arm + - windows-latest + c_compiler: [cl, clang, gcc] + build_type: [Release, Debug] + shared_libs: ["off", "on"] + assertions: ["off", "on"] + atomic_intrinsics: ["on", "off"] exclude: - - c_compiler: gcc - os: macos-26-intel - - c_compiler: gcc - os: macos-latest - - c_compiler: cl - os: macos-26-intel - - c_compiler: cl - os: macos-latest - - c_compiler: cl - os: ubuntu-24.04-arm - - c_compiler: cl - os: ubuntu-latest - # The following ones are to reduce amount of jobs. - - assertions: off - build_type: Debug - - assertions: on - build_type: Release + - c_compiler: gcc + os: macos-26-intel + - c_compiler: gcc + os: macos-latest + - c_compiler: cl + os: macos-26-intel + - c_compiler: cl + os: macos-latest + - c_compiler: cl + os: ubuntu-24.04-arm + - c_compiler: cl + os: ubuntu-latest + # The following ones are to reduce amount of jobs. + - assertions: "off" + build_type: Debug + - assertions: "on" + build_type: Release include: - - os: windows-11-arm - c_compiler: clang - cmake_generator_opt: '-G "Unix Makefiles"' - - os: windows-11-arm - c_compiler: gcc - cmake_generator_opt: '-G "Unix Makefiles"' - - os: windows-latest - c_compiler: clang - cmake_generator_opt: '-G "Unix Makefiles"' - - os: windows-latest - c_compiler: gcc - cmake_generator_opt: '-G "Unix Makefiles"' - # The following one are just to test some rare options. - - os: macos-latest - shared_libs: off - disable_docs_opt: '-Denable_docs=OFF' - - os: ubuntu-latest - assertions: on - c_compiler: gcc - shared_libs: on - no_install_headers: '-Dinstall_headers=OFF' - - os: windows-latest - assertions: off - c_compiler: clang - shared_libs: off - disable_gpl_opt: '-Denable_gpl=OFF' + - os: windows-11-arm + c_compiler: clang + cmake_generator_opt: '-G "Unix Makefiles"' + - os: windows-11-arm + c_compiler: gcc + cmake_generator_opt: '-G "Unix Makefiles"' + - os: windows-latest + c_compiler: clang + cmake_generator_opt: '-G "Unix Makefiles"' + - os: windows-latest + c_compiler: gcc + cmake_generator_opt: '-G "Unix Makefiles"' + # The following one are just to test some rare options. + - os: macos-latest + shared_libs: "off" + disable_docs_opt: '-Denable_docs=OFF' + - os: ubuntu-latest + assertions: "on" + c_compiler: gcc + shared_libs: "on" + no_install_headers: '-Dinstall_headers=OFF' + - os: windows-latest + assertions: "off" + c_compiler: clang + shared_libs: "off" + disable_gpl_opt: '-Denable_gpl=OFF' steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v4 - - name: Set reusable strings - # Turn repeated input strings into step outputs. - id: strings - shell: bash - run: | - echo "build-output-dir=${{ github.workspace }}/build" >> "$GITHUB_OUTPUT" + - name: Set reusable strings + # Turn repeated input strings into step outputs. + id: strings + shell: bash + run: > + echo "build-output-dir=${{ github.workspace }}/build" + >> "$GITHUB_OUTPUT" - - name: Configure CMake - # Configure CMake in a 'build' subdirectory. - run: > - cmake --version && - cmake -B ${{ steps.strings.outputs.build-output-dir }} - ${{ matrix.cmake_generator_opt }} - -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} - -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} - -Denable_werror=ON - -DAO_BUILD_SHARED_LIBS=${{ matrix.shared_libs }} - -Denable_assertions=${{ matrix.assertions }} - -Denable_atomic_intrinsics=${{ matrix.atomic_intrinsics }} - ${{ matrix.disable_docs_opt }} - ${{ matrix.disable_gpl_opt }} - ${{ matrix.no_install_headers }} - -Werror=author - -S ${{ github.workspace }} + - name: Configure CMake + # Configure CMake in a 'build' subdirectory. + run: > + cmake --version && + cmake -B ${{ steps.strings.outputs.build-output-dir }} + ${{ matrix.cmake_generator_opt }} + -DCMAKE_C_COMPILER=${{ matrix.c_compiler }} + -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} + -Denable_werror=ON + -DAO_BUILD_SHARED_LIBS=${{ matrix.shared_libs }} + -Denable_assertions=${{ matrix.assertions }} + -Denable_atomic_intrinsics=${{ matrix.atomic_intrinsics }} + ${{ matrix.disable_docs_opt }} + ${{ matrix.disable_gpl_opt }} + ${{ matrix.no_install_headers }} + -Werror=author + -S ${{ github.workspace }} - - name: Build - # Build the code with the given configuration. - run: > - cmake --build ${{ steps.strings.outputs.build-output-dir }} - --config ${{ matrix.build_type }} --verbose --parallel + - name: Build + # Build the code with the given configuration. + run: > + cmake --build ${{ steps.strings.outputs.build-output-dir }} + --config ${{ matrix.build_type }} --verbose --parallel - - name: Test - working-directory: ${{ steps.strings.outputs.build-output-dir }} - # Execute tests defined by the CMake configuration. - run: ctest --build-config ${{ matrix.build_type }} --verbose --parallel 4 + - name: Test + working-directory: ${{ steps.strings.outputs.build-output-dir }} + # Execute tests defined by the CMake configuration. + run: > + ctest --build-config ${{ matrix.build_type }} --verbose --parallel 4 From cfa1f0af29c35b16e3c3ce3a3104723140be9940 Mon Sep 17 00:00:00 2001 From: Ivan Maidanski Date: Thu, 24 Sep 2026 20:28:58 +0300 Subject: [PATCH 03/12] AppVeyor CI: Reformat .yml file with yamllint 1.37.1 --- .appveyor.yml | 91 ++++++++++++++++++++++++++++----------------------- 1 file changed, 50 insertions(+), 41 deletions(-) diff --git a/.appveyor.yml b/.appveyor.yml index 8a3c3d11..e54797a0 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -1,57 +1,66 @@ +--- version: 7.11.0-{build} image: -- Visual Studio 2022 + - Visual Studio 2022 environment: STUDIO_VERSION_EDITION: Studio\2022\Community + MSVC_FOLDER: C:\Program Files\Microsoft Visual %STUDIO_VERSION_EDITION%\VC PLATFORM_TYPE: CMAKE_CONFIG: Debug TEST_TARGET: check matrix: - - TARGET: cmake - CMAKE_OPTIONS: -DAO_BUILD_SHARED_LIBS=ON -Werror=deprecated - - TARGET: cmake - CFLAGS_EXTRA: -DAO_CMPXCHG16B_AVAILABLE - CMAKE_OPTIONS: -Denable_assertions=ON -Dinstall_headers=OFF - - TARGET: cmake - CMAKE_CONFIG: Release - CMAKE_OPTIONS: -DCMAKE_BUILD_TYPE=Release -Denable_gpl=OFF - - TARGET: cmake - CMAKE_OPTIONS: -A Win32 -Denable_assertions=ON -Denable_docs=OFF - - TARGET: cmake - CMAKE_CONFIG: Release - CMAKE_OPTIONS: -A ARM64 -DBUILD_TESTING=OFF -DCMAKE_BUILD_TYPE=MinSizeRel -DAO_BUILD_SHARED_LIBS=ON - - TARGET: nmake - ARCH: x86 - CFLAGS_EXTRA: /J - - TARGET: nmake - ARCH: x86 - CFLAGS_EXTRA: -DNDEBUG - - TARGET: nmake - ARCH: x64 - CFLAGS_EXTRA: -DAO_CMPXCHG16B_AVAILABLE - - TARGET: nmake - ARCH: x86_x64 - CFLAGS_EXTRA: -DNDEBUG - - TARGET: nmake - ARCH: x64_arm64 - TEST_TARGET: check-deps + - TARGET: cmake + CMAKE_OPTIONS: -DAO_BUILD_SHARED_LIBS=ON -Werror=deprecated + - TARGET: cmake + CFLAGS_EXTRA: -DAO_CMPXCHG16B_AVAILABLE + CMAKE_OPTIONS: -Denable_assertions=ON -Dinstall_headers=OFF + - TARGET: cmake + CMAKE_CONFIG: Release + CMAKE_OPTIONS: -DCMAKE_BUILD_TYPE=Release -Denable_gpl=OFF + - TARGET: cmake + CMAKE_OPTIONS: -A Win32 -Denable_assertions=ON -Denable_docs=OFF + - TARGET: cmake + CMAKE_CONFIG: Release + CMAKE_OPTIONS: >- + -A ARM64 -DBUILD_TESTING=OFF -DCMAKE_BUILD_TYPE=MinSizeRel + -DAO_BUILD_SHARED_LIBS=ON + - TARGET: nmake + ARCH: x86 + CFLAGS_EXTRA: /J + - TARGET: nmake + ARCH: x86 + CFLAGS_EXTRA: -DNDEBUG + - TARGET: nmake + ARCH: x64 + CFLAGS_EXTRA: -DAO_CMPXCHG16B_AVAILABLE + - TARGET: nmake + ARCH: x86_x64 + CFLAGS_EXTRA: -DNDEBUG + - TARGET: nmake + ARCH: x64_arm64 + TEST_TARGET: check-deps clone_depth: 1 build_script: -- cmd: if [%TARGET%]==[cmake] ( - mkdir out && cd out - && cmake %CMAKE_OPTIONS% -Denable_werror=ON -DCFLAGS_EXTRA="%CFLAGS_EXTRA%" .. - && cmake --build . --config %CMAKE_CONFIG% --verbose --parallel ) -- cmd: if [%TARGET%]==[nmake] ( - "C:\Program Files\Microsoft Visual %STUDIO_VERSION_EDITION%\VC\Auxiliary\Build\vcvarsall.bat" %ARCH% %PLATFORM_TYPE% - && cd src && nmake -f Makefile.msft clean all CFLAGS_EXTRA="/WX %CFLAGS_EXTRA%" && cd .. ) + - cmd: if [%TARGET%]==[cmake] ( + mkdir out && cd out + && cmake %CMAKE_OPTIONS% -Denable_werror=ON + -DCFLAGS_EXTRA="%CFLAGS_EXTRA%" .. + && cmake --build . --config %CMAKE_CONFIG% --verbose --parallel ) + - cmd: if [%TARGET%]==[nmake] ( + "%MSVC_FOLDER%\Auxiliary\Build\vcvarsall.bat" %ARCH% %PLATFORM_TYPE% + && cd src + && nmake -f Makefile.msft clean all CFLAGS_EXTRA="/WX %CFLAGS_EXTRA%" + && cd .. ) test_script: -- cmd: if [%TARGET%]==[cmake] ( - ctest --build-config %CMAKE_CONFIG% --verbose --parallel 4 ) -- cmd: if [%TARGET%]==[nmake] ( - "C:\Program Files\Microsoft Visual %STUDIO_VERSION_EDITION%\VC\Auxiliary\Build\vcvarsall.bat" %ARCH% %PLATFORM_TYPE% - && cd src && nmake -f Makefile.msft %TEST_TARGET% CFLAGS_EXTRA="/WX %CFLAGS_EXTRA%" ) + - cmd: if [%TARGET%]==[cmake] ( + ctest --build-config %CMAKE_CONFIG% --verbose --parallel 4 ) + - cmd: if [%TARGET%]==[nmake] ( + "%MSVC_FOLDER%\Auxiliary\Build\vcvarsall.bat" %ARCH% %PLATFORM_TYPE% + && cd src + && nmake -f Makefile.msft %TEST_TARGET% + CFLAGS_EXTRA="/WX %CFLAGS_EXTRA%" ) From 6ce7697dd0a8309e1a110692d58371161c7e48a3 Mon Sep 17 00:00:00 2001 From: Ivan Maidanski Date: Thu, 24 Sep 2026 20:40:56 +0300 Subject: [PATCH 04/12] Reformat README.md file with markdownlint tool * README.md: Reformat text by markdownlint-cli2 v0.23.1 (markdownlint v0.41.1) with the default configuration. --- README.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/README.md b/README.md index 34a13532..dc6aeac5 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,6 @@ This is version 7.11.0 (next release development) of libatomic_ops. License: [MIT](LICENSE) for core library / [GPL-2.0](COPYING) for gpl extension. - ## Download You might find a more recent/stable version on the @@ -30,7 +29,6 @@ You might find a more recent/stable version on the Also, the latest bug fixes and new features are available in the [development repository](https://github.com/bdwgc/libatomic_ops). - ## Overview This package provides semi-portable access to hardware-provided @@ -57,7 +55,6 @@ Please see other README files for the details: * [README_stack.txt](README_stack.txt) - an almost lock-free LIFO linked lists (stack) implementation (part of libatomic_ops_gpl) - ## Installation and Usage The configuration and build scripts for this package were generated by @@ -85,7 +82,6 @@ However, two small libraries are built and installed: latter is used to build the package). The licensing details are given in [COPYING](COPYING) and [LICENSE](LICENSE) files. - ## Platform Specific Notes Win32/64: src/Makefile.msft contains a very simple Makefile for building @@ -98,7 +94,6 @@ More information is provided in [README_win32.txt](README_win32.txt) file. HP-UX/PA-RISC: `aCC -Ae` won't work as a C compiler, since it doesn't support inline assembly code. Use cc. - ## Feedback, Contribution, Questions and Notifications Please address bug reports and new feature ideas to @@ -126,7 +121,6 @@ To be notified on all issues, please [watch](https://github.com/bdwgc/libatomic_ops/watchers) the project on GitHub. - ## Copyright & Warranty, Contributors Please be aware of the dual nature of the license of libatomic_ops: From ca76258167144ae628d8b0f775ac1d12c539ebbf Mon Sep 17 00:00:00 2001 From: Ivan Maidanski Date: Thu, 24 Sep 2026 23:08:27 +0300 Subject: [PATCH 05/12] Reformat CMakeLists.txt with gersemi tool * CMakeLists.txt: Reformat code by gersemi 0.29.1. --- CMakeLists.txt | 643 +++++++++++++++++++++++++++++-------------------- 1 file changed, 376 insertions(+), 267 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 52becbfe..63bceb68 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,14 +28,14 @@ set(PACKAGE_VERSION 7.11.0) # Info (current:revision:age) for the Libtool versioning system. # These values should match those in src/Makefile.am. -set(LIBATOMIC_OPS_VER_INFO 5:0:4) -set(LIBATOMIC_OPS_GPL_VER_INFO 5:0:4) +set(LIBATOMIC_OPS_VER_INFO 5:0:4) +set(LIBATOMIC_OPS_GPL_VER_INFO 5:0:4) project(libatomic_ops C) -if (POLICY CMP0057) - # Required for CheckLinkerFlag, at least. - cmake_policy(SET CMP0057 NEW) +if(POLICY CMP0057) + # Required for CheckLinkerFlag, at least. + cmake_policy(SET CMP0057 NEW) endif() include(CheckCCompilerFlag) @@ -44,8 +44,8 @@ include(CMakePackageConfigHelpers) include(CTest) include(GNUInstallDirs) -if (NOT (${CMAKE_VERSION} VERSION_LESS "3.18.0")) - include(CheckLinkerFlag) +if(NOT (${CMAKE_VERSION} VERSION_LESS "3.18.0")) + include(CheckLinkerFlag) endif() # Customize the build by passing "-D=ON|OFF" in the command line. @@ -60,41 +60,59 @@ option(install_headers "Install header and pkg-config metadata files" ON) # Override the default build type to RelWithDebInfo (this instructs cmake to # pass -O2 -g -DNDEBUG options to the compiler). -if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) - set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE - STRING "Choose the type of build." FORCE) - set_property(CACHE CMAKE_BUILD_TYPE PROPERTY - STRINGS "Debug" "Release" "RelWithDebInfo" "MinSizeRel") +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE + "RelWithDebInfo" + CACHE STRING + "Choose the type of build." + FORCE + ) + set_property( + CACHE CMAKE_BUILD_TYPE + PROPERTY STRINGS "Debug" "Release" "RelWithDebInfo" "MinSizeRel" + ) endif() # Convert VER_INFO values to [SO]VERSION ones. -if (AO_BUILD_SHARED_LIBS) - # atomic_ops: - string(REGEX REPLACE "(.+):.+:.+" "\\1" ao_cur ${LIBATOMIC_OPS_VER_INFO}) - string(REGEX REPLACE ".+:(.+):.+" "\\1" ao_rev ${LIBATOMIC_OPS_VER_INFO}) - string(REGEX REPLACE ".+:.+:(.+)$" "\\1" ao_age ${LIBATOMIC_OPS_VER_INFO}) - math(EXPR AO_SOVERSION "${ao_cur} - ${ao_age}") - set(AO_VERSION_PROP "${AO_SOVERSION}.${ao_age}.${ao_rev}") - message(STATUS "AO_VERSION_PROP = ${AO_VERSION_PROP}") - # atomic_ops_gpl: - string(REGEX REPLACE "(.+):.+:.+" "\\1" ao_gpl_cur - ${LIBATOMIC_OPS_GPL_VER_INFO}) - string(REGEX REPLACE ".+:(.+):.+" "\\1" ao_gpl_rev - ${LIBATOMIC_OPS_GPL_VER_INFO}) - string(REGEX REPLACE ".+:.+:(.+)$" "\\1" ao_gpl_age - ${LIBATOMIC_OPS_GPL_VER_INFO}) - math(EXPR AO_GPL_SOVERSION "${ao_gpl_cur} - ${ao_gpl_age}") - set(AO_GPL_VERSION_PROP "${AO_GPL_SOVERSION}.${ao_gpl_age}.${ao_gpl_rev}") - message(STATUS "AO_GPL_VERSION_PROP = ${AO_GPL_VERSION_PROP}") +if(AO_BUILD_SHARED_LIBS) + # atomic_ops: + string(REGEX REPLACE "(.+):.+:.+" "\\1" ao_cur ${LIBATOMIC_OPS_VER_INFO}) + string(REGEX REPLACE ".+:(.+):.+" "\\1" ao_rev ${LIBATOMIC_OPS_VER_INFO}) + string(REGEX REPLACE ".+:.+:(.+)$" "\\1" ao_age ${LIBATOMIC_OPS_VER_INFO}) + math(EXPR AO_SOVERSION "${ao_cur} - ${ao_age}") + set(AO_VERSION_PROP "${AO_SOVERSION}.${ao_age}.${ao_rev}") + message(STATUS "AO_VERSION_PROP = ${AO_VERSION_PROP}") + # atomic_ops_gpl: + string( + REGEX REPLACE "(.+):.+:.+" + "\\1" + ao_gpl_cur + ${LIBATOMIC_OPS_GPL_VER_INFO} + ) + string( + REGEX REPLACE ".+:(.+):.+" + "\\1" + ao_gpl_rev + ${LIBATOMIC_OPS_GPL_VER_INFO} + ) + string( + REGEX REPLACE ".+:.+:(.+)$" + "\\1" + ao_gpl_age + ${LIBATOMIC_OPS_GPL_VER_INFO} + ) + math(EXPR AO_GPL_SOVERSION "${ao_gpl_cur} - ${ao_gpl_age}") + set(AO_GPL_VERSION_PROP "${AO_GPL_SOVERSION}.${ao_gpl_age}.${ao_gpl_rev}") + message(STATUS "AO_GPL_VERSION_PROP = ${AO_GPL_VERSION_PROP}") endif(AO_BUILD_SHARED_LIBS) # Output all warnings. -if (MSVC) - # All warnings but ignoring "conditional expression is constant" ones. - add_compile_options(/W4 /wd4127) +if(MSVC) + # All warnings but ignoring "conditional expression is constant" ones. + add_compile_options(/W4 /wd4127) else() - # TODO: add -[W]pedantic -Wno-long-long - add_compile_options(-Wall -Wextra) + # TODO: add -[W]pedantic -Wno-long-long + add_compile_options(-Wall -Wextra) endif() find_package(Threads REQUIRED) @@ -102,188 +120,237 @@ message(STATUS "Thread library: ${CMAKE_THREAD_LIBS_INIT}") include_directories(${Threads_INCLUDE_DIR}) set(THREADDLLIBS_LIST ${CMAKE_THREAD_LIBS_INIT}) -if (CMAKE_USE_PTHREADS_INIT) - # Required define if using POSIX threads. - add_compile_options(-D_REENTRANT) +if(CMAKE_USE_PTHREADS_INIT) + # Required define if using POSIX threads. + add_compile_options(-D_REENTRANT) else() - # No pthreads library available. - add_compile_options(-DAO_NO_PTHREADS) + # No pthreads library available. + add_compile_options(-DAO_NO_PTHREADS) endif() -if (enable_assertions) - # In case NDEBUG macro is defined e.g. by cmake -DCMAKE_BUILD_TYPE=Release. - add_compile_options(-UNDEBUG) +if(enable_assertions) + # In case NDEBUG macro is defined e.g. by cmake -DCMAKE_BUILD_TYPE=Release. + add_compile_options(-UNDEBUG) else() - # Define to disable assertion checking. - add_compile_options(-DNDEBUG) + # Define to disable assertion checking. + add_compile_options(-DNDEBUG) endif() -if (NOT enable_atomic_intrinsics) - # Define to avoid GCC atomic intrinsics even if available. - add_compile_options(-DAO_DISABLE_GCC_ATOMICS) +if(NOT enable_atomic_intrinsics) + # Define to avoid GCC atomic intrinsics even if available. + add_compile_options(-DAO_DISABLE_GCC_ATOMICS) endif() # AO API symbols export control. -if (AO_BUILD_SHARED_LIBS) - add_compile_options(-DAO_DLL) +if(AO_BUILD_SHARED_LIBS) + add_compile_options(-DAO_DLL) endif() -if (enable_werror) - if (MSVC) - add_compile_options(/WX) - else() - add_compile_options(-Werror) - endif() +if(enable_werror) + if(MSVC) + add_compile_options(/WX) + else() + add_compile_options(-Werror) + endif() endif(enable_werror) # Extra user-defined flags to pass to the C compiler. -if (DEFINED CFLAGS_EXTRA) - separate_arguments(CFLAGS_EXTRA_LIST UNIX_COMMAND "${CFLAGS_EXTRA}") - add_compile_options(${CFLAGS_EXTRA_LIST}) +if(DEFINED CFLAGS_EXTRA) + separate_arguments(CFLAGS_EXTRA_LIST UNIX_COMMAND "${CFLAGS_EXTRA}") + add_compile_options(${CFLAGS_EXTRA_LIST}) endif() set(SRC src/atomic_ops.c) -if (CMAKE_C_COMPILER_ID STREQUAL "SunPro") - # SunCC compiler on SunOS (Solaris). - enable_language(ASM) - set(SRC ${SRC} src/atomic_ops_sysdeps.S) +if(CMAKE_C_COMPILER_ID STREQUAL "SunPro") + # SunCC compiler on SunOS (Solaris). + enable_language(ASM) + set(SRC ${SRC} src/atomic_ops_sysdeps.S) endif() -if (AO_BUILD_SHARED_LIBS) - add_library(atomic_ops SHARED ${SRC}) +if(AO_BUILD_SHARED_LIBS) + add_library(atomic_ops SHARED ${SRC}) else() - add_library(atomic_ops STATIC ${SRC}) + add_library(atomic_ops STATIC ${SRC}) endif() target_link_libraries(atomic_ops PRIVATE ${THREADDLLIBS_LIST}) -target_include_directories(atomic_ops - PUBLIC "$" - INTERFACE "$") - -if (enable_gpl) - set(AO_GPL_SRC src/atomic_ops_malloc.c src/atomic_ops_stack.c) - if (AO_BUILD_SHARED_LIBS) - add_library(atomic_ops_gpl SHARED ${AO_GPL_SRC}) - else() - add_library(atomic_ops_gpl STATIC ${AO_GPL_SRC}) - endif() - check_function_exists(mmap HAVE_MMAP) - if (HAVE_MMAP) - target_compile_definitions(atomic_ops_gpl PRIVATE HAVE_MMAP) - endif() - target_link_libraries(atomic_ops_gpl PRIVATE atomic_ops) - target_include_directories(atomic_ops_gpl - PUBLIC "$" - INTERFACE "$") - if (AO_BUILD_SHARED_LIBS) - set_property(TARGET atomic_ops_gpl PROPERTY VERSION ${AO_GPL_VERSION_PROP}) - set_property(TARGET atomic_ops_gpl PROPERTY SOVERSION ${AO_GPL_SOVERSION}) - endif() - install(TARGETS atomic_ops_gpl EXPORT Atomic_opsTargets - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" - INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") -endif(enable_gpl) - -if (AO_BUILD_SHARED_LIBS) - if (NOT (${CMAKE_SYSTEM_NAME} MATCHES "BSD")) - if (${CMAKE_VERSION} VERSION_LESS "3.18.0") - set(WL_NO_UNDEFINED_OPT "-Wl,--no-undefined") - check_c_compiler_flag(${WL_NO_UNDEFINED_OPT} HAVE_FLAG_WL_NO_UNDEFINED) +target_include_directories( + atomic_ops + PUBLIC "$" + INTERFACE "$" +) + +if(enable_gpl) + set(AO_GPL_SRC src/atomic_ops_malloc.c src/atomic_ops_stack.c) + if(AO_BUILD_SHARED_LIBS) + add_library(atomic_ops_gpl SHARED ${AO_GPL_SRC}) else() - set(WL_NO_UNDEFINED_OPT "LINKER:--no-undefined") - check_linker_flag(C "${WL_NO_UNDEFINED_OPT}" HAVE_FLAG_WL_NO_UNDEFINED) + add_library(atomic_ops_gpl STATIC ${AO_GPL_SRC}) endif() - if (HAVE_FLAG_WL_NO_UNDEFINED) - # Declare that the libraries do not refer to external symbols. - if (${CMAKE_VERSION} VERSION_LESS "3.13.0") - target_link_libraries(atomic_ops PRIVATE ${WL_NO_UNDEFINED_OPT}) - if (enable_gpl) - target_link_libraries(atomic_ops_gpl PRIVATE ${WL_NO_UNDEFINED_OPT}) - endif(enable_gpl) - else() - target_link_options(atomic_ops PRIVATE ${WL_NO_UNDEFINED_OPT}) - if (enable_gpl) - target_link_options(atomic_ops_gpl PRIVATE ${WL_NO_UNDEFINED_OPT}) - endif(enable_gpl) - endif() - endif(HAVE_FLAG_WL_NO_UNDEFINED) - endif() - set_property(TARGET atomic_ops PROPERTY VERSION ${AO_VERSION_PROP}) - set_property(TARGET atomic_ops PROPERTY SOVERSION ${AO_SOVERSION}) -endif(AO_BUILD_SHARED_LIBS) - -install(TARGETS atomic_ops EXPORT Atomic_opsTargets + check_function_exists(mmap HAVE_MMAP) + if(HAVE_MMAP) + target_compile_definitions(atomic_ops_gpl PRIVATE HAVE_MMAP) + endif() + target_link_libraries(atomic_ops_gpl PRIVATE atomic_ops) + target_include_directories( + atomic_ops_gpl + PUBLIC "$" + INTERFACE "$" + ) + if(AO_BUILD_SHARED_LIBS) + set_property( + TARGET atomic_ops_gpl + PROPERTY VERSION ${AO_GPL_VERSION_PROP} + ) + set_property( + TARGET atomic_ops_gpl + PROPERTY SOVERSION ${AO_GPL_SOVERSION} + ) + endif() + install( + TARGETS atomic_ops_gpl + EXPORT Atomic_opsTargets LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" - INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") - -if (install_headers) - install(FILES src/atomic_ops.h - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") - if (enable_gpl) - install(FILES src/atomic_ops_malloc.h - src/atomic_ops_stack.h - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") - endif() - - install(FILES src/atomic_ops/ao_version.h - src/atomic_ops/generalize-arithm.h - src/atomic_ops/generalize-small.h - src/atomic_ops/generalize.h - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/atomic_ops") - - install(FILES src/atomic_ops/sysdeps/all_acquire_release_volatile.h - src/atomic_ops/sysdeps/all_aligned_atomic_load_store.h - src/atomic_ops/sysdeps/all_atomic_load_store.h - src/atomic_ops/sysdeps/all_atomic_only_load.h - src/atomic_ops/sysdeps/ao_t_is_int.h - src/atomic_ops/sysdeps/emul_cas.h - src/atomic_ops/sysdeps/generic_pthread.h - src/atomic_ops/sysdeps/ordered.h - src/atomic_ops/sysdeps/ordered_except_wr.h - src/atomic_ops/sysdeps/read_ordered.h - src/atomic_ops/sysdeps/standard_ao_double_t.h - src/atomic_ops/sysdeps/test_and_set_t_is_ao_t.h - src/atomic_ops/sysdeps/test_and_set_t_is_char.h - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/atomic_ops/sysdeps") - - install(FILES src/atomic_ops/sysdeps/armcc/arm_v6.h - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/atomic_ops/sysdeps/armcc") - install(FILES src/atomic_ops/sysdeps/gcc/aarch64.h - src/atomic_ops/sysdeps/gcc/alpha.h - src/atomic_ops/sysdeps/gcc/arm.h - src/atomic_ops/sysdeps/gcc/avr32.h - src/atomic_ops/sysdeps/gcc/cris.h - src/atomic_ops/sysdeps/gcc/e2k.h - src/atomic_ops/sysdeps/gcc/generic-arithm.h - src/atomic_ops/sysdeps/gcc/generic-small.h - src/atomic_ops/sysdeps/gcc/generic.h - src/atomic_ops/sysdeps/gcc/hexagon.h - src/atomic_ops/sysdeps/gcc/hppa.h - src/atomic_ops/sysdeps/gcc/ia64.h - src/atomic_ops/sysdeps/gcc/m68k.h - src/atomic_ops/sysdeps/gcc/mips.h - src/atomic_ops/sysdeps/gcc/powerpc.h - src/atomic_ops/sysdeps/gcc/riscv.h - src/atomic_ops/sysdeps/gcc/s390.h - src/atomic_ops/sysdeps/gcc/sh.h - src/atomic_ops/sysdeps/gcc/sparc.h - src/atomic_ops/sysdeps/gcc/tile.h - src/atomic_ops/sysdeps/gcc/x86.h - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/atomic_ops/sysdeps/gcc") - - install(FILES src/atomic_ops/sysdeps/hpc/hppa.h - src/atomic_ops/sysdeps/hpc/ia64.h - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/atomic_ops/sysdeps/hpc") - install(FILES src/atomic_ops/sysdeps/ibmc/powerpc.h - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/atomic_ops/sysdeps/ibmc") - install(FILES src/atomic_ops/sysdeps/icc/ia64.h - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/atomic_ops/sysdeps/icc") - - install(FILES src/atomic_ops/sysdeps/loadstore/acquire_release_volatile.h + INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" + ) +endif(enable_gpl) + +if(AO_BUILD_SHARED_LIBS) + if(NOT (${CMAKE_SYSTEM_NAME} MATCHES "BSD")) + if(${CMAKE_VERSION} VERSION_LESS "3.18.0") + set(WL_NO_UNDEFINED_OPT "-Wl,--no-undefined") + check_c_compiler_flag( + ${WL_NO_UNDEFINED_OPT} + HAVE_FLAG_WL_NO_UNDEFINED + ) + else() + set(WL_NO_UNDEFINED_OPT "LINKER:--no-undefined") + check_linker_flag( + C + "${WL_NO_UNDEFINED_OPT}" + HAVE_FLAG_WL_NO_UNDEFINED + ) + endif() + if(HAVE_FLAG_WL_NO_UNDEFINED) + # Declare that the libraries do not refer to external symbols. + if(${CMAKE_VERSION} VERSION_LESS "3.13.0") + target_link_libraries(atomic_ops PRIVATE ${WL_NO_UNDEFINED_OPT}) + if(enable_gpl) + target_link_libraries( + atomic_ops_gpl + PRIVATE ${WL_NO_UNDEFINED_OPT} + ) + endif(enable_gpl) + else() + target_link_options(atomic_ops PRIVATE ${WL_NO_UNDEFINED_OPT}) + if(enable_gpl) + target_link_options( + atomic_ops_gpl + PRIVATE ${WL_NO_UNDEFINED_OPT} + ) + endif(enable_gpl) + endif() + endif(HAVE_FLAG_WL_NO_UNDEFINED) + endif() + set_property(TARGET atomic_ops PROPERTY VERSION ${AO_VERSION_PROP}) + set_property(TARGET atomic_ops PROPERTY SOVERSION ${AO_SOVERSION}) +endif(AO_BUILD_SHARED_LIBS) + +install( + TARGETS atomic_ops + EXPORT Atomic_opsTargets + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" + INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" +) + +if(install_headers) + install(FILES src/atomic_ops.h DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") + if(enable_gpl) + install( + FILES src/atomic_ops_malloc.h src/atomic_ops_stack.h + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" + ) + endif() + + install( + FILES + src/atomic_ops/ao_version.h + src/atomic_ops/generalize-arithm.h + src/atomic_ops/generalize-small.h + src/atomic_ops/generalize.h + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/atomic_ops" + ) + + install( + FILES + src/atomic_ops/sysdeps/all_acquire_release_volatile.h + src/atomic_ops/sysdeps/all_aligned_atomic_load_store.h + src/atomic_ops/sysdeps/all_atomic_load_store.h + src/atomic_ops/sysdeps/all_atomic_only_load.h + src/atomic_ops/sysdeps/ao_t_is_int.h + src/atomic_ops/sysdeps/emul_cas.h + src/atomic_ops/sysdeps/generic_pthread.h + src/atomic_ops/sysdeps/ordered.h + src/atomic_ops/sysdeps/ordered_except_wr.h + src/atomic_ops/sysdeps/read_ordered.h + src/atomic_ops/sysdeps/standard_ao_double_t.h + src/atomic_ops/sysdeps/test_and_set_t_is_ao_t.h + src/atomic_ops/sysdeps/test_and_set_t_is_char.h + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/atomic_ops/sysdeps" + ) + + install( + FILES src/atomic_ops/sysdeps/armcc/arm_v6.h + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/atomic_ops/sysdeps/armcc" + ) + install( + FILES + src/atomic_ops/sysdeps/gcc/aarch64.h + src/atomic_ops/sysdeps/gcc/alpha.h + src/atomic_ops/sysdeps/gcc/arm.h + src/atomic_ops/sysdeps/gcc/avr32.h + src/atomic_ops/sysdeps/gcc/cris.h + src/atomic_ops/sysdeps/gcc/e2k.h + src/atomic_ops/sysdeps/gcc/generic-arithm.h + src/atomic_ops/sysdeps/gcc/generic-small.h + src/atomic_ops/sysdeps/gcc/generic.h + src/atomic_ops/sysdeps/gcc/hexagon.h + src/atomic_ops/sysdeps/gcc/hppa.h + src/atomic_ops/sysdeps/gcc/ia64.h + src/atomic_ops/sysdeps/gcc/m68k.h + src/atomic_ops/sysdeps/gcc/mips.h + src/atomic_ops/sysdeps/gcc/powerpc.h + src/atomic_ops/sysdeps/gcc/riscv.h + src/atomic_ops/sysdeps/gcc/s390.h + src/atomic_ops/sysdeps/gcc/sh.h + src/atomic_ops/sysdeps/gcc/sparc.h + src/atomic_ops/sysdeps/gcc/tile.h + src/atomic_ops/sysdeps/gcc/x86.h + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/atomic_ops/sysdeps/gcc" + ) + + install( + FILES + src/atomic_ops/sysdeps/hpc/hppa.h + src/atomic_ops/sysdeps/hpc/ia64.h + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/atomic_ops/sysdeps/hpc" + ) + install( + FILES src/atomic_ops/sysdeps/ibmc/powerpc.h + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/atomic_ops/sysdeps/ibmc" + ) + install( + FILES src/atomic_ops/sysdeps/icc/ia64.h + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/atomic_ops/sysdeps/icc" + ) + + install( + FILES + src/atomic_ops/sysdeps/loadstore/acquire_release_volatile.h src/atomic_ops/sysdeps/loadstore/atomic_load.h src/atomic_ops/sysdeps/loadstore/atomic_store.h src/atomic_ops/sysdeps/loadstore/char_acquire_release_volatile.h @@ -298,92 +365,134 @@ if (install_headers) src/atomic_ops/sysdeps/loadstore/short_acquire_release_volatile.h src/atomic_ops/sysdeps/loadstore/short_atomic_load.h src/atomic_ops/sysdeps/loadstore/short_atomic_store.h - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/atomic_ops/sysdeps/loadstore") - - install(FILES src/atomic_ops/sysdeps/msftc/arm.h - src/atomic_ops/sysdeps/msftc/arm64.h - src/atomic_ops/sysdeps/msftc/common32_defs.h - src/atomic_ops/sysdeps/msftc/x86.h - src/atomic_ops/sysdeps/msftc/x86_64.h - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/atomic_ops/sysdeps/msftc") - install(FILES src/atomic_ops/sysdeps/sunc/sparc.h - src/atomic_ops/sysdeps/sunc/x86.h - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/atomic_ops/sysdeps/sunc") - - # Provide pkg-config metadata. - set(prefix "${CMAKE_INSTALL_PREFIX}") - set(exec_prefix \${prefix}) - set(includedir "${CMAKE_INSTALL_FULL_INCLUDEDIR}") - set(libdir "${CMAKE_INSTALL_FULL_LIBDIR}") - string(REPLACE ";" " " THREADDLLIBS "${THREADDLLIBS_LIST}") - # PACKAGE_VERSION is defined above. - configure_file(pkgconfig/atomic_ops.pc.in pkgconfig/atomic_ops.pc @ONLY) - install(FILES "${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/atomic_ops.pc" - DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") - # TODO: handle atomic_ops-uninstalled.pc.in + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/atomic_ops/sysdeps/loadstore" + ) + + install( + FILES + src/atomic_ops/sysdeps/msftc/arm.h + src/atomic_ops/sysdeps/msftc/arm64.h + src/atomic_ops/sysdeps/msftc/common32_defs.h + src/atomic_ops/sysdeps/msftc/x86.h + src/atomic_ops/sysdeps/msftc/x86_64.h + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/atomic_ops/sysdeps/msftc" + ) + install( + FILES + src/atomic_ops/sysdeps/sunc/sparc.h + src/atomic_ops/sysdeps/sunc/x86.h + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/atomic_ops/sysdeps/sunc" + ) + + # Provide pkg-config metadata. + set(prefix "${CMAKE_INSTALL_PREFIX}") + set(exec_prefix \${prefix}) + set(includedir "${CMAKE_INSTALL_FULL_INCLUDEDIR}") + set(libdir "${CMAKE_INSTALL_FULL_LIBDIR}") + string(REPLACE ";" " " THREADDLLIBS "${THREADDLLIBS_LIST}") + # PACKAGE_VERSION is defined above. + configure_file(pkgconfig/atomic_ops.pc.in pkgconfig/atomic_ops.pc @ONLY) + install( + FILES "${CMAKE_CURRENT_BINARY_DIR}/pkgconfig/atomic_ops.pc" + DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig" + ) + # TODO: handle atomic_ops-uninstalled.pc.in endif(install_headers) -if (BUILD_TESTING) - add_executable(test_atomic tests/test_atomic.c) - target_link_libraries(test_atomic PRIVATE atomic_ops ${THREADDLLIBS_LIST}) - add_test(NAME test_atomic COMMAND test_atomic) - - add_executable(test_atomic_generalized tests/test_atomic.c) - target_compile_definitions(test_atomic_generalized - PRIVATE AO_PREFER_GENERALIZED AO_TEST_EMULATION) - target_link_libraries(test_atomic_generalized - PRIVATE atomic_ops ${THREADDLLIBS_LIST}) - add_test(NAME test_atomic_generalized COMMAND test_atomic_generalized) - - if (CMAKE_USE_PTHREADS_INIT) - add_executable(test_atomic_pthreads tests/test_atomic.c) - target_compile_definitions(test_atomic_pthreads - PRIVATE AO_USE_PTHREAD_DEFS) - target_link_libraries(test_atomic_pthreads - PRIVATE atomic_ops ${THREADDLLIBS_LIST}) - add_test(NAME test_atomic_pthreads COMMAND test_atomic_pthreads) - endif() - - if (enable_gpl) - add_executable(test_stack tests/test_stack.c) - target_link_libraries(test_stack - PRIVATE atomic_ops atomic_ops_gpl ${THREADDLLIBS_LIST}) - add_test(NAME test_stack COMMAND test_stack) - - add_executable(test_malloc tests/test_malloc.c) - target_link_libraries(test_malloc - PRIVATE atomic_ops atomic_ops_gpl ${THREADDLLIBS_LIST}) - add_test(NAME test_malloc COMMAND test_malloc) - endif(enable_gpl) +if(BUILD_TESTING) + add_executable(test_atomic tests/test_atomic.c) + target_link_libraries(test_atomic PRIVATE atomic_ops ${THREADDLLIBS_LIST}) + add_test(NAME test_atomic COMMAND test_atomic) + + add_executable(test_atomic_generalized tests/test_atomic.c) + target_compile_definitions( + test_atomic_generalized + PRIVATE AO_PREFER_GENERALIZED AO_TEST_EMULATION + ) + target_link_libraries( + test_atomic_generalized + PRIVATE atomic_ops ${THREADDLLIBS_LIST} + ) + add_test(NAME test_atomic_generalized COMMAND test_atomic_generalized) + + if(CMAKE_USE_PTHREADS_INIT) + add_executable(test_atomic_pthreads tests/test_atomic.c) + target_compile_definitions( + test_atomic_pthreads + PRIVATE AO_USE_PTHREAD_DEFS + ) + target_link_libraries( + test_atomic_pthreads + PRIVATE atomic_ops ${THREADDLLIBS_LIST} + ) + add_test(NAME test_atomic_pthreads COMMAND test_atomic_pthreads) + endif() + + if(enable_gpl) + add_executable(test_stack tests/test_stack.c) + target_link_libraries( + test_stack + PRIVATE atomic_ops atomic_ops_gpl ${THREADDLLIBS_LIST} + ) + add_test(NAME test_stack COMMAND test_stack) + + add_executable(test_malloc tests/test_malloc.c) + target_link_libraries( + test_malloc + PRIVATE atomic_ops atomic_ops_gpl ${THREADDLLIBS_LIST} + ) + add_test(NAME test_malloc COMMAND test_malloc) + endif(enable_gpl) endif() -if (enable_docs) - install(FILES AUTHORS ChangeLog LICENSE README.md - README_details.txt README_win32.txt - DESTINATION "${CMAKE_INSTALL_DOCDIR}") - if (enable_gpl) - install(FILES COPYING README_malloc.txt README_stack.txt - DESTINATION "${CMAKE_INSTALL_DOCDIR}") - endif() +if(enable_docs) + install( + FILES + AUTHORS + ChangeLog + LICENSE + README.md + README_details.txt + README_win32.txt + DESTINATION "${CMAKE_INSTALL_DOCDIR}" + ) + if(enable_gpl) + install( + FILES COPYING README_malloc.txt README_stack.txt + DESTINATION "${CMAKE_INSTALL_DOCDIR}" + ) + endif() endif(enable_docs) # CMake config/targets files. -install(EXPORT Atomic_opsTargets FILE Atomic_opsTargets.cmake - NAMESPACE Atomic_ops:: - DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/atomic_ops") - -configure_package_config_file("${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in" - "${CMAKE_CURRENT_BINARY_DIR}/Atomic_opsConfig.cmake" - INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/atomic_ops" - NO_SET_AND_CHECK_MACRO) +install( + EXPORT Atomic_opsTargets + FILE Atomic_opsTargets.cmake + NAMESPACE Atomic_ops:: + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/atomic_ops" +) + +configure_package_config_file( + "${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/Atomic_opsConfig.cmake" + INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/atomic_ops" + NO_SET_AND_CHECK_MACRO +) write_basic_package_version_file( - "${CMAKE_CURRENT_BINARY_DIR}/Atomic_opsConfigVersion.cmake" - VERSION "${PACKAGE_VERSION}" COMPATIBILITY AnyNewerVersion) + "${CMAKE_CURRENT_BINARY_DIR}/Atomic_opsConfigVersion.cmake" + VERSION "${PACKAGE_VERSION}" + COMPATIBILITY AnyNewerVersion +) -install(FILES "${CMAKE_CURRENT_BINARY_DIR}/Atomic_opsConfig.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/Atomic_opsConfigVersion.cmake" - DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/atomic_ops") +install( + FILES + "${CMAKE_CURRENT_BINARY_DIR}/Atomic_opsConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/Atomic_opsConfigVersion.cmake" + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/atomic_ops" +) -export(EXPORT Atomic_opsTargets - FILE "${CMAKE_CURRENT_BINARY_DIR}/Atomic_opsTargets.cmake") +export( + EXPORT Atomic_opsTargets + FILE "${CMAKE_CURRENT_BINARY_DIR}/Atomic_opsTargets.cmake" +) From b44f0d2e1b55db9991a4843af6413b5e736748ed Mon Sep 17 00:00:00 2001 From: Ivan Maidanski Date: Thu, 24 Sep 2026 23:23:37 +0300 Subject: [PATCH 06/12] GH Actions: Move CSA-check job from Travis --- .github/workflows/csa-check.yml | 32 ++++++++++++++++++++++++++++++++ .travis.yml | 11 +---------- 2 files changed, 33 insertions(+), 10 deletions(-) create mode 100644 .github/workflows/csa-check.yml diff --git a/.github/workflows/csa-check.yml b/.github/workflows/csa-check.yml new file mode 100644 index 00000000..e788bcce --- /dev/null +++ b/.github/workflows/csa-check.yml @@ -0,0 +1,32 @@ +--- +# This workflow is to check C/C++ source with Clang Static Analyzer (CSA). +name: csa check + +"on": [push, pull_request] + +jobs: + check: + name: ${{ matrix.os }} ${{ matrix.cflags_extra }} + runs-on: ${{ matrix.os }} + + strategy: + # Deliver the feedback for all matrix combinations. + fail-fast: false + + matrix: + include: + - os: macos-latest + cflags_extra: -m32 + - os: ubuntu-latest + cflags_extra: -D AO_TRACE_MALLOC -D HAVE_MMAP -D VERBOSE_STACK + + steps: + - uses: actions/checkout@v6 + + - name: Check C/C++ files by CSA + run: > + set -o pipefail; + clang --analyze -Xanalyzer -analyzer-output=text -Werror -I src + ${{ matrix.cflags_extra }} `find . -iname '*.c'` 2>&1 + | tee clang-analyzer-output.log; + if [ -s clang-analyzer-output.log ]; then exit 1; fi diff --git a/.travis.yml b/.travis.yml index e41d3dde..8854c916 100644 --- a/.travis.yml +++ b/.travis.yml @@ -36,11 +36,6 @@ jobs: env: - CPPCHECK_ENABLE="-q --enable=unusedFunction -D AO_TEST_EMULATION" - MAKEFILE_TARGET=all - - compiler: clang - env: - - CSA_CHECK=true - - MAKEFILE_TARGET=all - - CFLAGS_EXTRA="-D AO_TRACE_MALLOC -D HAVE_MMAP -D VERBOSE_STACK" - compiler: clang env: - CONF_OPTIONS="--disable-gpl" @@ -562,7 +557,7 @@ script: - if [[ "$CMAKE_OPTIONS" == "" && "$COVERITY_SCAN_BRANCH" != 1 ]]; then ./configure $CONF_OPTIONS --enable-werror; fi -- if [[ "$CSA_CHECK" != true && "$CMAKE_OPTIONS" == "" +- if [[ "$CMAKE_OPTIONS" == "" && "$CPPCHECK_ENABLE" == "" && "$COVERITY_SCAN_BRANCH" != 1 ]]; then cat src/config.h; fi @@ -583,10 +578,6 @@ script: fi - if [ -f tests/test_atomic.log ]; then cat tests/test_atomic*.log; fi - if [ -f tests/test_stack.log ]; then cat tests/test_stack.log; fi -- if [[ "$CSA_CHECK" == true ]]; then - ${CC} --analyze -Xanalyzer -analyzer-output=text -Werror -I src - $CFLAGS_EXTRA src/*.c tests/*.c; - fi - if [[ "$CPPCHECK_ENABLE" != "" ]]; then cppcheck -f --error-exitcode=2 -U AO_API -D CPPCHECK -I src $CPPCHECK_ENABLE --check-level=exhaustive src/*.c tests/*.c; From 6c16d382b278bd7177e37cc4cae89931d3780027 Mon Sep 17 00:00:00 2001 From: Ivan Maidanski Date: Thu, 24 Sep 2026 23:45:05 +0300 Subject: [PATCH 07/12] GH Actions: Move cppcheck jobs from Travis --- .github/workflows/cppcheck.yml | 38 ++++++++++++++++++++++++++++++++++ .travis.yml | 21 +------------------ 2 files changed, 39 insertions(+), 20 deletions(-) create mode 100644 .github/workflows/cppcheck.yml diff --git a/.github/workflows/cppcheck.yml b/.github/workflows/cppcheck.yml new file mode 100644 index 00000000..899b9996 --- /dev/null +++ b/.github/workflows/cppcheck.yml @@ -0,0 +1,38 @@ +--- +# This workflow is to check C source with cppcheck. +name: cppcheck + +"on": [push, pull_request] + +jobs: + check: + name: ${{ matrix.name }} + runs-on: ubuntu-24.04-arm + + strategy: + # Deliver the feedback for all matrix combinations. + fail-fast: false + + matrix: + include: + - name: Check unused + args: --enable=unusedFunction -D AO_TEST_EMULATION + - name: All checks (other) + args: >- + -j4 --enable=information,performance,portability,style,warning + --suppress=missingIncludeSystem --suppress=unmatchedSuppression + + steps: + - uses: actions/checkout@v6 + + - name: Install cppcheck (Ubuntu) + uses: awalsh128/cache-apt-pkgs-action@v1 + with: + packages: cppcheck + version: 1.0 + + - name: Run cppcheck analysis + run: >- + cppcheck --force --error-exitcode=2 --quiet -D CPPCHECK -U AO_API + -U HAVE_CONFIG_H -I src --check-level=exhaustive --safety + ${{ matrix.args }} `find . -iname '*.c'` diff --git a/.travis.yml b/.travis.yml index 8854c916..7a3fea8a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,20 +22,6 @@ jobs: - MAKEFILE_TARGET=all - REPORT_COVERAGE=true - CFLAGS_EXTRA="--coverage -O0 -fprofile-update=atomic -march=native -D DEBUG_RUN_ONE_TEST -D VERBOSE_STACK" - - addons: - apt: - packages: - - cppcheck - env: - - CPPCHECK_ENABLE="-j16 -q --enable=information,performance,portability,style,warning --suppress=missingIncludeSystem --suppress=unmatchedSuppression" - - MAKEFILE_TARGET=all - - addons: - apt: - packages: - - cppcheck - env: - - CPPCHECK_ENABLE="-q --enable=unusedFunction -D AO_TEST_EMULATION" - - MAKEFILE_TARGET=all - compiler: clang env: - CONF_OPTIONS="--disable-gpl" @@ -557,8 +543,7 @@ script: - if [[ "$CMAKE_OPTIONS" == "" && "$COVERITY_SCAN_BRANCH" != 1 ]]; then ./configure $CONF_OPTIONS --enable-werror; fi -- if [[ "$CMAKE_OPTIONS" == "" - && "$CPPCHECK_ENABLE" == "" && "$COVERITY_SCAN_BRANCH" != 1 ]]; then +- if [[ "$CMAKE_OPTIONS" == "" && "$COVERITY_SCAN_BRANCH" != 1 ]]; then cat src/config.h; fi - if [[ "$CROSS_GCC_VER" != "" ]]; then CC=$CROSS_CC; fi @@ -578,10 +563,6 @@ script: fi - if [ -f tests/test_atomic.log ]; then cat tests/test_atomic*.log; fi - if [ -f tests/test_stack.log ]; then cat tests/test_stack.log; fi -- if [[ "$CPPCHECK_ENABLE" != "" ]]; then - cppcheck -f --error-exitcode=2 -U AO_API -D CPPCHECK -I src - $CPPCHECK_ENABLE --check-level=exhaustive src/*.c tests/*.c; - fi - if [[ "$TESTS_CUSTOM_RUN" == true ]]; then ASAN_OPTIONS="detect_leaks=1" UBSAN_OPTIONS="halt_on_error=1" make -C tests check-without-test-driver; From 0cbfab65170674bd2a8ff87b7488ab4a3cfc515f Mon Sep 17 00:00:00 2001 From: Ivan Maidanski Date: Fri, 25 Sep 2026 07:51:14 +0300 Subject: [PATCH 08/12] Fix missing AO_char/int/short_load_*() calls in test_atomic_include.h * tests/test_atomic_include.h: Regenerate. * tests/test_atomic_include.template [AO_HAVE_short_loadXX] (test_atomicXX): Call `AO_short_loadXX()` instead of `AO_short_load()`. * tests/test_atomic_include.template [AO_HAVE_char_loadXX] (test_atomicXX): Call `AO_char_loadXX()` instead of `AO_short_load()`. * tests/test_atomic_include.template [AO_HAVE_int_loadXX] (test_atomicXX): Call `AO_int_loadXX()` instead of `AO_short_load()`. --- tests/test_atomic_include.h | 48 +++++++++++++++--------------- tests/test_atomic_include.template | 6 ++-- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/tests/test_atomic_include.h b/tests/test_atomic_include.h index 9b8b0b1f..7a8fae70 100644 --- a/tests/test_atomic_include.h +++ b/tests/test_atomic_include.h @@ -771,7 +771,7 @@ void test_atomic_release(void) s = 13; # endif # if defined(AO_HAVE_short_load_release) - TA_assert(AO_short_load(&s) == 13); + TA_assert(AO_short_load_release(&s) == 13); # elif !defined(AO_HAVE_short_load) || !defined(AO_HAVE_short_load_acquire) \ || !defined(AO_HAVE_short_load_acquire_read) \ || !defined(AO_HAVE_short_load_dd_acquire_read) \ @@ -813,7 +813,7 @@ void test_atomic_release(void) b = 13; # endif # if defined(AO_HAVE_char_load_release) - TA_assert(AO_char_load(&b) == 13); + TA_assert(AO_char_load_release(&b) == 13); # elif !defined(AO_HAVE_char_load) || !defined(AO_HAVE_char_load_acquire) \ || !defined(AO_HAVE_char_load_acquire_read) \ || !defined(AO_HAVE_char_load_dd_acquire_read) \ @@ -854,7 +854,7 @@ void test_atomic_release(void) zz = 13; # endif # if defined(AO_HAVE_int_load_release) - TA_assert(AO_int_load(&zz) == 13); + TA_assert(AO_int_load_release(&zz) == 13); # elif !defined(AO_HAVE_int_load) || !defined(AO_HAVE_int_load_acquire) \ || !defined(AO_HAVE_int_load_acquire_read) \ || !defined(AO_HAVE_int_load_dd_acquire_read) \ @@ -1385,7 +1385,7 @@ void test_atomic_acquire(void) s = 13; # endif # if defined(AO_HAVE_short_load_acquire) - TA_assert(AO_short_load(&s) == 13); + TA_assert(AO_short_load_acquire(&s) == 13); # elif !defined(AO_HAVE_short_load) || !defined(AO_HAVE_short_load_acquire) \ || !defined(AO_HAVE_short_load_acquire_read) \ || !defined(AO_HAVE_short_load_dd_acquire_read) \ @@ -1427,7 +1427,7 @@ void test_atomic_acquire(void) b = 13; # endif # if defined(AO_HAVE_char_load_acquire) - TA_assert(AO_char_load(&b) == 13); + TA_assert(AO_char_load_acquire(&b) == 13); # elif !defined(AO_HAVE_char_load) || !defined(AO_HAVE_char_load_acquire) \ || !defined(AO_HAVE_char_load_acquire_read) \ || !defined(AO_HAVE_char_load_dd_acquire_read) \ @@ -1468,7 +1468,7 @@ void test_atomic_acquire(void) zz = 13; # endif # if defined(AO_HAVE_int_load_acquire) - TA_assert(AO_int_load(&zz) == 13); + TA_assert(AO_int_load_acquire(&zz) == 13); # elif !defined(AO_HAVE_int_load) || !defined(AO_HAVE_int_load_acquire) \ || !defined(AO_HAVE_int_load_acquire_read) \ || !defined(AO_HAVE_int_load_dd_acquire_read) \ @@ -1999,7 +1999,7 @@ void test_atomic_read(void) s = 13; # endif # if defined(AO_HAVE_short_load_read) - TA_assert(AO_short_load(&s) == 13); + TA_assert(AO_short_load_read(&s) == 13); # elif !defined(AO_HAVE_short_load) || !defined(AO_HAVE_short_load_acquire) \ || !defined(AO_HAVE_short_load_acquire_read) \ || !defined(AO_HAVE_short_load_dd_acquire_read) \ @@ -2041,7 +2041,7 @@ void test_atomic_read(void) b = 13; # endif # if defined(AO_HAVE_char_load_read) - TA_assert(AO_char_load(&b) == 13); + TA_assert(AO_char_load_read(&b) == 13); # elif !defined(AO_HAVE_char_load) || !defined(AO_HAVE_char_load_acquire) \ || !defined(AO_HAVE_char_load_acquire_read) \ || !defined(AO_HAVE_char_load_dd_acquire_read) \ @@ -2082,7 +2082,7 @@ void test_atomic_read(void) zz = 13; # endif # if defined(AO_HAVE_int_load_read) - TA_assert(AO_int_load(&zz) == 13); + TA_assert(AO_int_load_read(&zz) == 13); # elif !defined(AO_HAVE_int_load) || !defined(AO_HAVE_int_load_acquire) \ || !defined(AO_HAVE_int_load_acquire_read) \ || !defined(AO_HAVE_int_load_dd_acquire_read) \ @@ -2613,7 +2613,7 @@ void test_atomic_write(void) s = 13; # endif # if defined(AO_HAVE_short_load_write) - TA_assert(AO_short_load(&s) == 13); + TA_assert(AO_short_load_write(&s) == 13); # elif !defined(AO_HAVE_short_load) || !defined(AO_HAVE_short_load_acquire) \ || !defined(AO_HAVE_short_load_acquire_read) \ || !defined(AO_HAVE_short_load_dd_acquire_read) \ @@ -2655,7 +2655,7 @@ void test_atomic_write(void) b = 13; # endif # if defined(AO_HAVE_char_load_write) - TA_assert(AO_char_load(&b) == 13); + TA_assert(AO_char_load_write(&b) == 13); # elif !defined(AO_HAVE_char_load) || !defined(AO_HAVE_char_load_acquire) \ || !defined(AO_HAVE_char_load_acquire_read) \ || !defined(AO_HAVE_char_load_dd_acquire_read) \ @@ -2696,7 +2696,7 @@ void test_atomic_write(void) zz = 13; # endif # if defined(AO_HAVE_int_load_write) - TA_assert(AO_int_load(&zz) == 13); + TA_assert(AO_int_load_write(&zz) == 13); # elif !defined(AO_HAVE_int_load) || !defined(AO_HAVE_int_load_acquire) \ || !defined(AO_HAVE_int_load_acquire_read) \ || !defined(AO_HAVE_int_load_dd_acquire_read) \ @@ -3227,7 +3227,7 @@ void test_atomic_full(void) s = 13; # endif # if defined(AO_HAVE_short_load_full) - TA_assert(AO_short_load(&s) == 13); + TA_assert(AO_short_load_full(&s) == 13); # elif !defined(AO_HAVE_short_load) || !defined(AO_HAVE_short_load_acquire) \ || !defined(AO_HAVE_short_load_acquire_read) \ || !defined(AO_HAVE_short_load_dd_acquire_read) \ @@ -3269,7 +3269,7 @@ void test_atomic_full(void) b = 13; # endif # if defined(AO_HAVE_char_load_full) - TA_assert(AO_char_load(&b) == 13); + TA_assert(AO_char_load_full(&b) == 13); # elif !defined(AO_HAVE_char_load) || !defined(AO_HAVE_char_load_acquire) \ || !defined(AO_HAVE_char_load_acquire_read) \ || !defined(AO_HAVE_char_load_dd_acquire_read) \ @@ -3310,7 +3310,7 @@ void test_atomic_full(void) zz = 13; # endif # if defined(AO_HAVE_int_load_full) - TA_assert(AO_int_load(&zz) == 13); + TA_assert(AO_int_load_full(&zz) == 13); # elif !defined(AO_HAVE_int_load) || !defined(AO_HAVE_int_load_acquire) \ || !defined(AO_HAVE_int_load_acquire_read) \ || !defined(AO_HAVE_int_load_dd_acquire_read) \ @@ -3841,7 +3841,7 @@ void test_atomic_release_write(void) s = 13; # endif # if defined(AO_HAVE_short_load_release_write) - TA_assert(AO_short_load(&s) == 13); + TA_assert(AO_short_load_release_write(&s) == 13); # elif !defined(AO_HAVE_short_load) || !defined(AO_HAVE_short_load_acquire) \ || !defined(AO_HAVE_short_load_acquire_read) \ || !defined(AO_HAVE_short_load_dd_acquire_read) \ @@ -3883,7 +3883,7 @@ void test_atomic_release_write(void) b = 13; # endif # if defined(AO_HAVE_char_load_release_write) - TA_assert(AO_char_load(&b) == 13); + TA_assert(AO_char_load_release_write(&b) == 13); # elif !defined(AO_HAVE_char_load) || !defined(AO_HAVE_char_load_acquire) \ || !defined(AO_HAVE_char_load_acquire_read) \ || !defined(AO_HAVE_char_load_dd_acquire_read) \ @@ -3924,7 +3924,7 @@ void test_atomic_release_write(void) zz = 13; # endif # if defined(AO_HAVE_int_load_release_write) - TA_assert(AO_int_load(&zz) == 13); + TA_assert(AO_int_load_release_write(&zz) == 13); # elif !defined(AO_HAVE_int_load) || !defined(AO_HAVE_int_load_acquire) \ || !defined(AO_HAVE_int_load_acquire_read) \ || !defined(AO_HAVE_int_load_dd_acquire_read) \ @@ -4455,7 +4455,7 @@ void test_atomic_acquire_read(void) s = 13; # endif # if defined(AO_HAVE_short_load_acquire_read) - TA_assert(AO_short_load(&s) == 13); + TA_assert(AO_short_load_acquire_read(&s) == 13); # elif !defined(AO_HAVE_short_load) || !defined(AO_HAVE_short_load_acquire) \ || !defined(AO_HAVE_short_load_acquire_read) \ || !defined(AO_HAVE_short_load_dd_acquire_read) \ @@ -4497,7 +4497,7 @@ void test_atomic_acquire_read(void) b = 13; # endif # if defined(AO_HAVE_char_load_acquire_read) - TA_assert(AO_char_load(&b) == 13); + TA_assert(AO_char_load_acquire_read(&b) == 13); # elif !defined(AO_HAVE_char_load) || !defined(AO_HAVE_char_load_acquire) \ || !defined(AO_HAVE_char_load_acquire_read) \ || !defined(AO_HAVE_char_load_dd_acquire_read) \ @@ -4538,7 +4538,7 @@ void test_atomic_acquire_read(void) zz = 13; # endif # if defined(AO_HAVE_int_load_acquire_read) - TA_assert(AO_int_load(&zz) == 13); + TA_assert(AO_int_load_acquire_read(&zz) == 13); # elif !defined(AO_HAVE_int_load) || !defined(AO_HAVE_int_load_acquire) \ || !defined(AO_HAVE_int_load_acquire_read) \ || !defined(AO_HAVE_int_load_dd_acquire_read) \ @@ -5069,7 +5069,7 @@ void test_atomic_dd_acquire_read(void) s = 13; # endif # if defined(AO_HAVE_short_load_dd_acquire_read) - TA_assert(AO_short_load(&s) == 13); + TA_assert(AO_short_load_dd_acquire_read(&s) == 13); # elif !defined(AO_HAVE_short_load) || !defined(AO_HAVE_short_load_acquire) \ || !defined(AO_HAVE_short_load_acquire_read) \ || !defined(AO_HAVE_short_load_dd_acquire_read) \ @@ -5111,7 +5111,7 @@ void test_atomic_dd_acquire_read(void) b = 13; # endif # if defined(AO_HAVE_char_load_dd_acquire_read) - TA_assert(AO_char_load(&b) == 13); + TA_assert(AO_char_load_dd_acquire_read(&b) == 13); # elif !defined(AO_HAVE_char_load) || !defined(AO_HAVE_char_load_acquire) \ || !defined(AO_HAVE_char_load_acquire_read) \ || !defined(AO_HAVE_char_load_dd_acquire_read) \ @@ -5152,7 +5152,7 @@ void test_atomic_dd_acquire_read(void) zz = 13; # endif # if defined(AO_HAVE_int_load_dd_acquire_read) - TA_assert(AO_int_load(&zz) == 13); + TA_assert(AO_int_load_dd_acquire_read(&zz) == 13); # elif !defined(AO_HAVE_int_load) || !defined(AO_HAVE_int_load_acquire) \ || !defined(AO_HAVE_int_load_acquire_read) \ || !defined(AO_HAVE_int_load_dd_acquire_read) \ diff --git a/tests/test_atomic_include.template b/tests/test_atomic_include.template index f19aa9f4..e89ccb98 100644 --- a/tests/test_atomic_include.template +++ b/tests/test_atomic_include.template @@ -157,7 +157,7 @@ void test_atomicXX(void) s = 13; # endif # if defined(AO_HAVE_short_loadXX) - TA_assert(AO_short_load(&s) == 13); + TA_assert(AO_short_loadXX(&s) == 13); # elif !defined(AO_HAVE_short_load) || !defined(AO_HAVE_short_load_acquire) \ || !defined(AO_HAVE_short_load_acquire_read) \ || !defined(AO_HAVE_short_load_dd_acquire_read) \ @@ -199,7 +199,7 @@ void test_atomicXX(void) b = 13; # endif # if defined(AO_HAVE_char_loadXX) - TA_assert(AO_char_load(&b) == 13); + TA_assert(AO_char_loadXX(&b) == 13); # elif !defined(AO_HAVE_char_load) || !defined(AO_HAVE_char_load_acquire) \ || !defined(AO_HAVE_char_load_acquire_read) \ || !defined(AO_HAVE_char_load_dd_acquire_read) \ @@ -240,7 +240,7 @@ void test_atomicXX(void) zz = 13; # endif # if defined(AO_HAVE_int_loadXX) - TA_assert(AO_int_load(&zz) == 13); + TA_assert(AO_int_loadXX(&zz) == 13); # elif !defined(AO_HAVE_int_load) || !defined(AO_HAVE_int_load_acquire) \ || !defined(AO_HAVE_int_load_acquire_read) \ || !defined(AO_HAVE_int_load_dd_acquire_read) \ From e6ca71b7ee0a4783217dd4adfb14ea81fb188886 Mon Sep 17 00:00:00 2001 From: Ivan Maidanski Date: Fri, 25 Sep 2026 09:14:56 +0300 Subject: [PATCH 09/12] Workaround 'AO_double_fetch_compare_and_swap never used' cppcheck FP `AO_double_fetch_compare_and_swap*()` is not defined on any target. * tests/test_atomic_include.h: Regenerate. * tests/test_atomic_include.template [AO_HAVE_double_fetch_compare_and_swapXX && CPPCHECK] (test_atomicXX): Define `w` local variable; call `AO_double_fetch_compare_and_swapXX()`. --- tests/test_atomic_include.h | 54 +++++++++++++++++++++++++----- tests/test_atomic_include.template | 6 +++- 2 files changed, 50 insertions(+), 10 deletions(-) diff --git a/tests/test_atomic_include.h b/tests/test_atomic_include.h index 7a8fae70..ac369351 100644 --- a/tests/test_atomic_include.h +++ b/tests/test_atomic_include.h @@ -73,7 +73,8 @@ void test_atomic(void) # endif # if defined(AO_HAVE_compare_and_swap_double) \ || defined(AO_HAVE_compare_double_and_swap_double) \ - || defined(AO_HAVE_double_compare_and_swap) + || defined(AO_HAVE_double_compare_and_swap) \ + || defined(AO_HAVE_double_fetch_compare_and_swap) && defined(CPPCHECK) static AO_double_t w; /* static to avoid misalignment */ w.AO_val1 = 0; w.AO_val2 = 0; @@ -611,6 +612,9 @@ void test_atomic(void) # else MISSING(AO_double_compare_and_swap); # endif +# if defined(AO_HAVE_double_fetch_compare_and_swap) && defined(CPPCHECK) + (void)AO_double_fetch_compare_and_swap(&w, w, w); +# endif } /* * Copyright (c) 2003 by Hewlett-Packard Company. All rights reserved. @@ -687,7 +691,8 @@ void test_atomic_release(void) # endif # if defined(AO_HAVE_compare_and_swap_double_release) \ || defined(AO_HAVE_compare_double_and_swap_double_release) \ - || defined(AO_HAVE_double_compare_and_swap_release) + || defined(AO_HAVE_double_compare_and_swap_release) \ + || defined(AO_HAVE_double_fetch_compare_and_swap_release) && defined(CPPCHECK) static AO_double_t w; /* static to avoid misalignment */ w.AO_val1 = 0; w.AO_val2 = 0; @@ -1225,6 +1230,9 @@ void test_atomic_release(void) # else MISSING(AO_double_compare_and_swap); # endif +# if defined(AO_HAVE_double_fetch_compare_and_swap_release) && defined(CPPCHECK) + (void)AO_double_fetch_compare_and_swap_release(&w, w, w); +# endif } /* * Copyright (c) 2003 by Hewlett-Packard Company. All rights reserved. @@ -1301,7 +1309,8 @@ void test_atomic_acquire(void) # endif # if defined(AO_HAVE_compare_and_swap_double_acquire) \ || defined(AO_HAVE_compare_double_and_swap_double_acquire) \ - || defined(AO_HAVE_double_compare_and_swap_acquire) + || defined(AO_HAVE_double_compare_and_swap_acquire) \ + || defined(AO_HAVE_double_fetch_compare_and_swap_acquire) && defined(CPPCHECK) static AO_double_t w; /* static to avoid misalignment */ w.AO_val1 = 0; w.AO_val2 = 0; @@ -1839,6 +1848,9 @@ void test_atomic_acquire(void) # else MISSING(AO_double_compare_and_swap); # endif +# if defined(AO_HAVE_double_fetch_compare_and_swap_acquire) && defined(CPPCHECK) + (void)AO_double_fetch_compare_and_swap_acquire(&w, w, w); +# endif } /* * Copyright (c) 2003 by Hewlett-Packard Company. All rights reserved. @@ -1915,7 +1927,8 @@ void test_atomic_read(void) # endif # if defined(AO_HAVE_compare_and_swap_double_read) \ || defined(AO_HAVE_compare_double_and_swap_double_read) \ - || defined(AO_HAVE_double_compare_and_swap_read) + || defined(AO_HAVE_double_compare_and_swap_read) \ + || defined(AO_HAVE_double_fetch_compare_and_swap_read) && defined(CPPCHECK) static AO_double_t w; /* static to avoid misalignment */ w.AO_val1 = 0; w.AO_val2 = 0; @@ -2453,6 +2466,9 @@ void test_atomic_read(void) # else MISSING(AO_double_compare_and_swap); # endif +# if defined(AO_HAVE_double_fetch_compare_and_swap_read) && defined(CPPCHECK) + (void)AO_double_fetch_compare_and_swap_read(&w, w, w); +# endif } /* * Copyright (c) 2003 by Hewlett-Packard Company. All rights reserved. @@ -2529,7 +2545,8 @@ void test_atomic_write(void) # endif # if defined(AO_HAVE_compare_and_swap_double_write) \ || defined(AO_HAVE_compare_double_and_swap_double_write) \ - || defined(AO_HAVE_double_compare_and_swap_write) + || defined(AO_HAVE_double_compare_and_swap_write) \ + || defined(AO_HAVE_double_fetch_compare_and_swap_write) && defined(CPPCHECK) static AO_double_t w; /* static to avoid misalignment */ w.AO_val1 = 0; w.AO_val2 = 0; @@ -3067,6 +3084,9 @@ void test_atomic_write(void) # else MISSING(AO_double_compare_and_swap); # endif +# if defined(AO_HAVE_double_fetch_compare_and_swap_write) && defined(CPPCHECK) + (void)AO_double_fetch_compare_and_swap_write(&w, w, w); +# endif } /* * Copyright (c) 2003 by Hewlett-Packard Company. All rights reserved. @@ -3143,7 +3163,8 @@ void test_atomic_full(void) # endif # if defined(AO_HAVE_compare_and_swap_double_full) \ || defined(AO_HAVE_compare_double_and_swap_double_full) \ - || defined(AO_HAVE_double_compare_and_swap_full) + || defined(AO_HAVE_double_compare_and_swap_full) \ + || defined(AO_HAVE_double_fetch_compare_and_swap_full) && defined(CPPCHECK) static AO_double_t w; /* static to avoid misalignment */ w.AO_val1 = 0; w.AO_val2 = 0; @@ -3681,6 +3702,9 @@ void test_atomic_full(void) # else MISSING(AO_double_compare_and_swap); # endif +# if defined(AO_HAVE_double_fetch_compare_and_swap_full) && defined(CPPCHECK) + (void)AO_double_fetch_compare_and_swap_full(&w, w, w); +# endif } /* * Copyright (c) 2003 by Hewlett-Packard Company. All rights reserved. @@ -3757,7 +3781,8 @@ void test_atomic_release_write(void) # endif # if defined(AO_HAVE_compare_and_swap_double_release_write) \ || defined(AO_HAVE_compare_double_and_swap_double_release_write) \ - || defined(AO_HAVE_double_compare_and_swap_release_write) + || defined(AO_HAVE_double_compare_and_swap_release_write) \ + || defined(AO_HAVE_double_fetch_compare_and_swap_release_write) && defined(CPPCHECK) static AO_double_t w; /* static to avoid misalignment */ w.AO_val1 = 0; w.AO_val2 = 0; @@ -4295,6 +4320,9 @@ void test_atomic_release_write(void) # else MISSING(AO_double_compare_and_swap); # endif +# if defined(AO_HAVE_double_fetch_compare_and_swap_release_write) && defined(CPPCHECK) + (void)AO_double_fetch_compare_and_swap_release_write(&w, w, w); +# endif } /* * Copyright (c) 2003 by Hewlett-Packard Company. All rights reserved. @@ -4371,7 +4399,8 @@ void test_atomic_acquire_read(void) # endif # if defined(AO_HAVE_compare_and_swap_double_acquire_read) \ || defined(AO_HAVE_compare_double_and_swap_double_acquire_read) \ - || defined(AO_HAVE_double_compare_and_swap_acquire_read) + || defined(AO_HAVE_double_compare_and_swap_acquire_read) \ + || defined(AO_HAVE_double_fetch_compare_and_swap_acquire_read) && defined(CPPCHECK) static AO_double_t w; /* static to avoid misalignment */ w.AO_val1 = 0; w.AO_val2 = 0; @@ -4909,6 +4938,9 @@ void test_atomic_acquire_read(void) # else MISSING(AO_double_compare_and_swap); # endif +# if defined(AO_HAVE_double_fetch_compare_and_swap_acquire_read) && defined(CPPCHECK) + (void)AO_double_fetch_compare_and_swap_acquire_read(&w, w, w); +# endif } /* * Copyright (c) 2003 by Hewlett-Packard Company. All rights reserved. @@ -4985,7 +5017,8 @@ void test_atomic_dd_acquire_read(void) # endif # if defined(AO_HAVE_compare_and_swap_double_dd_acquire_read) \ || defined(AO_HAVE_compare_double_and_swap_double_dd_acquire_read) \ - || defined(AO_HAVE_double_compare_and_swap_dd_acquire_read) + || defined(AO_HAVE_double_compare_and_swap_dd_acquire_read) \ + || defined(AO_HAVE_double_fetch_compare_and_swap_dd_acquire_read) && defined(CPPCHECK) static AO_double_t w; /* static to avoid misalignment */ w.AO_val1 = 0; w.AO_val2 = 0; @@ -5523,4 +5556,7 @@ void test_atomic_dd_acquire_read(void) # else MISSING(AO_double_compare_and_swap); # endif +# if defined(AO_HAVE_double_fetch_compare_and_swap_dd_acquire_read) && defined(CPPCHECK) + (void)AO_double_fetch_compare_and_swap_dd_acquire_read(&w, w, w); +# endif } diff --git a/tests/test_atomic_include.template b/tests/test_atomic_include.template index e89ccb98..5f4bb39c 100644 --- a/tests/test_atomic_include.template +++ b/tests/test_atomic_include.template @@ -73,7 +73,8 @@ void test_atomicXX(void) # endif # if defined(AO_HAVE_compare_and_swap_doubleXX) \ || defined(AO_HAVE_compare_double_and_swap_doubleXX) \ - || defined(AO_HAVE_double_compare_and_swapXX) + || defined(AO_HAVE_double_compare_and_swapXX) \ + || defined(AO_HAVE_double_fetch_compare_and_swapXX) && defined(CPPCHECK) static AO_double_t w; /* static to avoid misalignment */ w.AO_val1 = 0; w.AO_val2 = 0; @@ -611,4 +612,7 @@ void test_atomicXX(void) # else MISSING(AO_double_compare_and_swap); # endif +# if defined(AO_HAVE_double_fetch_compare_and_swapXX) && defined(CPPCHECK) + (void)AO_double_fetch_compare_and_swapXX(&w, w, w); +# endif } From 0a8d8024efb8ecef38327b7d7d8cd25161f242e9 Mon Sep 17 00:00:00 2001 From: Ivan Maidanski Date: Fri, 25 Sep 2026 09:20:24 +0300 Subject: [PATCH 10/12] Travis CI: Reformat .yml file with yamllint 1.37.1 --- .travis.yml | 1161 ++++++++++++++++++++++++++------------------------- 1 file changed, 600 insertions(+), 561 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7a3fea8a..93b9ca92 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,3 +1,4 @@ +--- language: c os: linux dist: noble @@ -7,581 +8,619 @@ git: jobs: include: - - compiler: clang - - compiler: gcc - - env: - - MAKEFILE_TARGET=dist - - addons: - apt: - packages: - - lcov - compiler: gcc - env: - - CONF_OPTIONS="--enable-shared" - - CC_FOR_CHECK=gcc - - MAKEFILE_TARGET=all - - REPORT_COVERAGE=true - - CFLAGS_EXTRA="--coverage -O0 -fprofile-update=atomic -march=native -D DEBUG_RUN_ONE_TEST -D VERBOSE_STACK" - - compiler: clang - env: - - CONF_OPTIONS="--disable-gpl" - - arch: arm64 - compiler: clang - - arch: arm64 - compiler: gcc - - arch: arm64 - compiler: clang - env: - - CFLAGS_EXTRA="-O3 -D AO_STACK_USE_CPTR -D N_EXPERIMENTS=10" - - CONF_OPTIONS="--enable-assertions" - - arch: arm64 - compiler: gcc - env: - - CFLAGS_EXTRA="-O3" - - CONF_OPTIONS="--enable-assertions --disable-static" - - TESTS_CUSTOM_RUN=true - - arch: arm64 - compiler: clang - env: - - CFLAGS_EXTRA="-O3 -D AO_AARCH64_ASM_LOAD_STORE_CAS -D AO_PREFER_BUILTIN_ATOMICS" - - TESTS_CUSTOM_RUN=true - - arch: arm64 - compiler: gcc - env: - - CFLAGS_EXTRA="-O3 -march=armv8.2-a" - - CONF_OPTIONS="--enable-shared" - - TESTS_CUSTOM_RUN=true - - arch: arm64 - compiler: clang - dist: focal - env: - - CFLAGS_EXTRA="-fsanitize=address -fno-omit-frame-pointer" - - CONF_OPTIONS="--disable-atomic-intrinsics" - - TESTS_CUSTOM_RUN=true - - addons: - apt: - packages: - - musl-tools - arch: arm64 - compiler: musl-gcc - dist: focal - env: - - CFLAGS_EXTRA="-O3" - - TESTS_CUSTOM_RUN=true - - arch: arm64 - compiler: gcc - env: - - CMAKE_OPTIONS="-DCMAKE_BUILD_TYPE=Release -Denable_docs=OFF" - - arch: s390x - compiler: clang - - arch: s390x - compiler: gcc - - arch: s390x - compiler: clang - env: - - CFLAGS_EXTRA="-O3 -D AO_BL_SIZE=6" - - CONF_OPTIONS="--enable-assertions --enable-shared" - - TESTS_CUSTOM_RUN=true - - arch: s390x - compiler: gcc - env: - - CFLAGS_EXTRA="-O3" - - TESTS_CUSTOM_RUN=true - - os: freebsd - env: - - CMAKE_OPTIONS="-DCMAKE_BUILD_TYPE=Release -Denable_gpl=OFF" - - CMAKE_BUILD_OPTIONS="--verbose" - - compiler: clang - env: - - CMAKE_OPTIONS="-DCMAKE_BUILD_TYPE=Debug -Denable_atomic_intrinsics=OFF" - - compiler: gcc - env: - - CMAKE_OPTIONS="-DAO_BUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=MinSizeRel -Dinstall_headers=OFF" - - compiler: clang - env: - - CFLAGS_EXTRA="-O3 -march=native -funsigned-char -D NO_TIMES" - - CONF_OPTIONS="--enable-assertions" - - compiler: gcc - env: - - CFLAGS_EXTRA="-O3 -march=native" - - CONF_OPTIONS="--enable-assertions" - - compiler: clang - env: - - CFLAGS_EXTRA="-march=native -std=c11 -D AO_INITIAL_HEAP_CHUNKS=2" - - compiler: clang - env: - - CFLAGS_EXTRA="-O3 -march=native -std=c11 -D AO_BL_SIZE=4 -D DEFAULT_NTHREADS=32" - - compiler: gcc - env: - - CFLAGS_EXTRA="-march=native -D _FORTIFY_SOURCE=2 -std=c89" - - addons: - apt: - packages: - - gcc-multilib - compiler: clang - env: - - CFLAGS_EXTRA="-m32" - - CONF_OPTIONS="--enable-assertions" - - addons: - apt: - packages: - - gcc-multilib - compiler: clang - env: - - CFLAGS_EXTRA="-m32 -O3 -march=native" - - addons: - apt: - packages: - - gcc-multilib - compiler: clang - env: - - CFLAGS_EXTRA="-m32 -march=native" - - CONF_OPTIONS="--disable-atomic-intrinsics" - - addons: - apt: - packages: - - gcc-multilib - compiler: gcc - env: - - CFLAGS_EXTRA="-m32 -march=native -funsigned-char -D AO_USE_ALMOST_LOCK_FREE" - - CONF_OPTIONS="--enable-assertions" - - addons: - apt: - packages: - - gcc-multilib - compiler: gcc - env: - - CFLAGS_EXTRA="-m32 -march=native" - - CONF_OPTIONS="--disable-atomic-intrinsics" - - compiler: gcc - env: - - CFLAGS_EXTRA="-D AO_GENERALIZE_ASM_BOOL_CAS -D AO_USE_NANOSLEEP -D AO_USE_NO_SIGNALS" - - CONF_OPTIONS="--enable-assertions" - - compiler: clang - env: - - CFLAGS_EXTRA="-D AO_USE_PTHREAD_DEFS" - - CONF_OPTIONS="--enable-assertions" - - compiler: clang - env: - - CFLAGS_EXTRA="-D DONT_USE_MMAP -O3" - - CONF_OPTIONS="--enable-assertions --enable-shared" - - compiler: clang - env: - - CFLAGS_EXTRA="-O3 -march=native" - - compiler: gcc - env: - - CFLAGS_EXTRA="-O3 -march=native -fanalyzer -funsigned-char" - - CONF_OPTIONS="--enable-assertions --disable-static" - - addons: - apt: - packages: - - gcc-multilib - compiler: gcc - env: - - CFLAGS_EXTRA="-m32 -O3 -march=native" - - addons: - apt: - packages: - - gcc-multilib - compiler: gcc - dist: focal - env: - - CFLAGS_EXTRA="-mx32 -march=native -D _FORTIFY_SOURCE=2" - - CONF_OPTIONS="--enable-assertions --enable-shared" - - addons: - apt: - packages: - - gcc-multilib - compiler: gcc - dist: focal - env: - - CFLAGS_EXTRA="-mx32 -march=native" - - CONF_OPTIONS="--disable-atomic-intrinsics --disable-docs" - - compiler: clang - dist: jammy - env: - - CFLAGS_EXTRA="-fsanitize=address -D AO_USE_ALMOST_LOCK_FREE -fno-omit-frame-pointer" - - TESTS_CUSTOM_RUN=true - - compiler: clang - dist: jammy - env: - - CFLAGS_EXTRA="-fsanitize=address -march=native -fno-common -fno-omit-frame-pointer" - - CONF_OPTIONS="--enable-assertions" - - compiler: gcc - env: - - CFLAGS_EXTRA="-fsanitize=address -fno-omit-frame-pointer -D AO_USE_ALMOST_LOCK_FREE -D USE_STANDARD_MALLOC" - - CONF_OPTIONS="--enable-assertions" - - addons: - apt: - packages: - - gcc-multilib - compiler: gcc - env: - - CFLAGS_EXTRA="-fsanitize=address -m32 -march=native -fno-omit-frame-pointer" - - LDFLAGS="-fuse-ld=gold" - - compiler: clang - dist: jammy - env: - - CFLAGS_EXTRA="-fsanitize=memory,undefined -march=native -fno-omit-frame-pointer" - - TESTS_CUSTOM_RUN=true - - compiler: clang - dist: jammy - env: - - CFLAGS_EXTRA="-fsanitize=thread -D AO_USE_ALMOST_LOCK_FREE -fno-omit-frame-pointer" - - compiler: clang - dist: jammy - env: - - CFLAGS_EXTRA="-fsanitize=thread -march=native -fno-omit-frame-pointer" - - CONF_OPTIONS="--enable-assertions" - - compiler: clang - env: - - CONF_OPTIONS="--disable-atomic-intrinsics" - - CFLAGS_EXTRA="-march=native" - - compiler: clang - env: - - CFLAGS_EXTRA="-x c++ -march=native -D VERBOSE_STACK" - - CONF_OPTIONS="--enable-assertions" - - MAKEFILE_TARGET=all - - compiler: gcc - env: - - CC_FOR_CHECK=g++ - - MAKEFILE_TARGET=all - - addons: - apt: - packages: - - musl-tools - compiler: musl-gcc - env: - - CFLAGS_EXTRA="-march=native" - - CONF_OPTIONS="--enable-assertions" - - addons: - apt: - packages: - - gcc-mingw-w64 - compiler: x86_64-w64-mingw32-gcc - env: - - CONF_OPTIONS="--host=x86_64-w64-mingw32 --enable-shared --disable-static" - - MAKEFILE_TARGET=all - - addons: - apt: - packages: - - gcc-mingw-w64 - compiler: i686-w64-mingw32-gcc - env: - - CONF_OPTIONS="--host=i686-w64-mingw32" - - MAKEFILE_TARGET=all - - addons: - apt: - packages: - - gcc-multilib - env: - - CROSS_GCC_VER=8.1.0 - - NOLIBC_ARCH_ABI=aarch64-linux - - CFLAGS_EXTRA="-mabi=ilp32" - - addons: - apt: - packages: - - gcc-multilib - env: - - CROSS_GCC_VER=8.1.0 - - NOLIBC_ARCH_ABI=alpha-linux - - addons: - apt: - packages: - - gcc-multilib - env: - - CROSS_GCC_VER=8.1.0 - - NOLIBC_ARCH_ABI=arm-linux-gnueabi - - addons: - apt: - packages: - - gcc-multilib - env: - - CROSS_GCC_VER=8.1.0 - - NOLIBC_ARCH_ABI=arm-linux-gnueabi - - CFLAGS_EXTRA="-D AO_DISABLE_GCC_ATOMICS" - - addons: - apt: - packages: - - gcc-4.6 - - gcc-multilib - sources: - - ubuntu-toolchain-r-test - compiler: gcc-4.6 - dist: xenial - env: - - CROSS_GCC_VER=4.2.4 - - NOLIBC_ARCH_ABI=avr32-linux - - NOLIBC_DELIM=_ - - CFLAGS_EXTRA="-fno-strict-aliasing" - - addons: - apt: - packages: - - gcc-4.6 - - gcc-multilib - sources: - - ubuntu-toolchain-r-test - compiler: gcc-4.6 - dist: xenial - env: - - CROSS_GCC_VER=4.6.3 - - NOLIBC_ARCH_ABI=cris-linux - - NOLIBC_DELIM=_ - - addons: - apt: - packages: - - gcc-multilib - env: - - CROSS_GCC_VER=8.1.0 - - NOLIBC_ARCH_ABI=hppa-linux - - addons: - apt: - packages: - - gcc-multilib - env: - - CROSS_GCC_VER=8.1.0 - - NOLIBC_ARCH_ABI=ia64-linux - - addons: - apt: - packages: - - gcc-multilib - env: - - CROSS_GCC_VER=8.1.0 - - NOLIBC_ARCH_ABI=m68k-linux - - addons: - apt: - packages: - - gcc-multilib - env: - - CROSS_GCC_VER=8.1.0 - - NOLIBC_ARCH_ABI=mips-linux - - addons: - apt: - packages: - - gcc-multilib - env: - - CROSS_GCC_VER=8.1.0 - - NOLIBC_ARCH_ABI=mips-linux - - CFLAGS_EXTRA="-D AO_DISABLE_GCC_ATOMICS" - - addons: - apt: - packages: - - gcc-multilib - env: - - CROSS_GCC_VER=8.1.0 - - NOLIBC_ARCH_ABI=mips64-linux - - addons: - apt: - packages: - - gcc-multilib - env: - - CROSS_GCC_VER=8.1.0 - - NOLIBC_ARCH_ABI=nios2-linux - - addons: - apt: - packages: - - gcc-multilib - env: - - CROSS_GCC_VER=8.1.0 - - NOLIBC_ARCH_ABI=powerpc-linux - - addons: - apt: - packages: - - gcc-multilib - env: - - CROSS_GCC_VER=8.1.0 - - NOLIBC_ARCH_ABI=powerpc-linux - - CFLAGS_EXTRA="-D AO_DISABLE_GCC_ATOMICS" - - addons: - apt: - packages: - - gcc-multilib - env: - - CROSS_GCC_VER=8.1.0 - - NOLIBC_ARCH_ABI=powerpc64-linux - - addons: - apt: - packages: - - gcc-multilib - env: - - CROSS_GCC_VER=8.1.0 - - NOLIBC_ARCH_ABI=riscv32-linux - - addons: - apt: - packages: - - gcc-multilib - env: - - CROSS_GCC_VER=8.1.0 - - NOLIBC_ARCH_ABI=riscv64-linux - - addons: - apt: - packages: - - gcc-multilib - env: - - CROSS_GCC_VER=8.1.0 - - NOLIBC_ARCH_ABI=s390-linux - - addons: - apt: - packages: - - gcc-multilib - env: - - CROSS_GCC_VER=8.1.0 - - NOLIBC_ARCH_ABI=sh2-linux - - addons: - apt: - packages: - - gcc-multilib - env: - - CROSS_GCC_VER=8.1.0 - - NOLIBC_ARCH_ABI=sh4-linux - - addons: - apt: - packages: - - gcc-multilib - env: - - CROSS_GCC_VER=8.1.0 - - NOLIBC_ARCH_ABI=sparc-linux - - CFLAGS_EXTRA="-D AO_NO_SPARC_V9" - - addons: - apt: - packages: - - gcc-multilib - env: - - CROSS_GCC_VER=8.1.0 - - NOLIBC_ARCH_ABI=sparc64-linux - - addons: - apt: - packages: - - gcc-4.6 - - gcc-multilib - sources: - - ubuntu-toolchain-r-test - compiler: gcc-4.6 - dist: xenial - env: - - CROSS_GCC_VER=4.6.2 - - NOLIBC_ARCH_ABI=tilegx-linux - - NOLIBC_DELIM=_ - - env: - - MAKEFILE_TARGET=distcheck - - AUTOCONF_VER=2.73 - - AUTOMAKE_VER=1.19 - - LIBTOOL_VER=2.6.2 - - M4_VER=1.4.21 - - if: type != pull_request - addons: - coverity_scan: - project: - name: bdwgc/libatomic_ops - version: 7.11.0 - notification_email: ivmai@mail.ru - branch_pattern: master - build_command_prepend: CFLAGS=-march=native ./configure - build_command: make -j check CFLAGS_EXTRA=-DLINT2 - env: - - COVERITY_SCAN_BRANCH=1 + - compiler: clang + - compiler: gcc + - env: + - MAKEFILE_TARGET=dist + - addons: + apt: + packages: + - lcov + compiler: gcc + env: + - CONF_OPTIONS="--enable-shared" + - CC_FOR_CHECK=gcc + - MAKEFILE_TARGET=all + - REPORT_COVERAGE=true + - >- + CFLAGS_EXTRA="--coverage -O0 -fprofile-update=atomic -march=native + -D DEBUG_RUN_ONE_TEST -D VERBOSE_STACK" + - compiler: clang + env: + - CONF_OPTIONS="--disable-gpl" + - arch: arm64 + compiler: clang + - arch: arm64 + compiler: gcc + - arch: arm64 + compiler: clang + env: + - CFLAGS_EXTRA="-O3 -D AO_STACK_USE_CPTR -D N_EXPERIMENTS=10" + - CONF_OPTIONS="--enable-assertions" + - arch: arm64 + compiler: gcc + env: + - CFLAGS_EXTRA="-O3" + - CONF_OPTIONS="--enable-assertions --disable-static" + - TESTS_CUSTOM_RUN=true + - arch: arm64 + compiler: clang + env: + - >- + CFLAGS_EXTRA="-O3 -D AO_AARCH64_ASM_LOAD_STORE_CAS + -D AO_PREFER_BUILTIN_ATOMICS" + - TESTS_CUSTOM_RUN=true + - arch: arm64 + compiler: gcc + env: + - CFLAGS_EXTRA="-O3 -march=armv8.2-a" + - CONF_OPTIONS="--enable-shared" + - TESTS_CUSTOM_RUN=true + - arch: arm64 + compiler: clang + dist: focal + env: + - CFLAGS_EXTRA="-fsanitize=address -fno-omit-frame-pointer" + - CONF_OPTIONS="--disable-atomic-intrinsics" + - TESTS_CUSTOM_RUN=true + - addons: + apt: + packages: + - musl-tools + arch: arm64 + compiler: musl-gcc + dist: focal + env: + - CFLAGS_EXTRA="-O3" + - TESTS_CUSTOM_RUN=true + - arch: arm64 + compiler: gcc + env: + - CMAKE_OPTIONS="-DCMAKE_BUILD_TYPE=Release -Denable_docs=OFF" + - arch: s390x + compiler: clang + - arch: s390x + compiler: gcc + - arch: s390x + compiler: clang + env: + - CFLAGS_EXTRA="-O3 -D AO_BL_SIZE=6" + - CONF_OPTIONS="--enable-assertions --enable-shared" + - TESTS_CUSTOM_RUN=true + - arch: s390x + compiler: gcc + env: + - CFLAGS_EXTRA="-O3" + - TESTS_CUSTOM_RUN=true + - os: freebsd + env: + - CMAKE_OPTIONS="-DCMAKE_BUILD_TYPE=Release -Denable_gpl=OFF" + - CMAKE_BUILD_OPTIONS="--verbose" + - compiler: clang + env: + - >- + CMAKE_OPTIONS="-DCMAKE_BUILD_TYPE=Debug + -Denable_atomic_intrinsics=OFF" + - compiler: gcc + env: + - >- + CMAKE_OPTIONS="-DAO_BUILD_SHARED_LIBS=ON + -DCMAKE_BUILD_TYPE=MinSizeRel -Dinstall_headers=OFF" + - compiler: clang + env: + - CFLAGS_EXTRA="-O3 -march=native -funsigned-char -D NO_TIMES" + - CONF_OPTIONS="--enable-assertions" + - compiler: gcc + env: + - CFLAGS_EXTRA="-O3 -march=native" + - CONF_OPTIONS="--enable-assertions" + - compiler: clang + env: + - CFLAGS_EXTRA="-march=native -std=c11 -D AO_INITIAL_HEAP_CHUNKS=2" + - compiler: clang + env: + - >- + CFLAGS_EXTRA="-O3 -march=native -std=c11 -D AO_BL_SIZE=4 + -D DEFAULT_NTHREADS=32" + - compiler: gcc + env: + - CFLAGS_EXTRA="-march=native -D _FORTIFY_SOURCE=2 -std=c89" + - addons: + apt: + packages: + - gcc-multilib + compiler: clang + env: + - CFLAGS_EXTRA="-m32" + - CONF_OPTIONS="--enable-assertions" + - addons: + apt: + packages: + - gcc-multilib + compiler: clang + env: + - CFLAGS_EXTRA="-m32 -O3 -march=native" + - addons: + apt: + packages: + - gcc-multilib + compiler: clang + env: + - CFLAGS_EXTRA="-m32 -march=native" + - CONF_OPTIONS="--disable-atomic-intrinsics" + - addons: + apt: + packages: + - gcc-multilib + compiler: gcc + env: + - >- + CFLAGS_EXTRA="-m32 -march=native -funsigned-char + -D AO_USE_ALMOST_LOCK_FREE" + - CONF_OPTIONS="--enable-assertions" + - addons: + apt: + packages: + - gcc-multilib + compiler: gcc + env: + - CFLAGS_EXTRA="-m32 -march=native" + - CONF_OPTIONS="--disable-atomic-intrinsics" + - compiler: gcc + env: + - >- + CFLAGS_EXTRA="-D AO_GENERALIZE_ASM_BOOL_CAS -D AO_USE_NANOSLEEP + -D AO_USE_NO_SIGNALS" + - CONF_OPTIONS="--enable-assertions" + - compiler: clang + env: + - CFLAGS_EXTRA="-D AO_USE_PTHREAD_DEFS" + - CONF_OPTIONS="--enable-assertions" + - compiler: clang + env: + - CFLAGS_EXTRA="-D DONT_USE_MMAP -O3" + - CONF_OPTIONS="--enable-assertions --enable-shared" + - compiler: clang + env: + - CFLAGS_EXTRA="-O3 -march=native" + - compiler: gcc + env: + - CFLAGS_EXTRA="-O3 -march=native -fanalyzer -funsigned-char" + - CONF_OPTIONS="--enable-assertions --disable-static" + - addons: + apt: + packages: + - gcc-multilib + compiler: gcc + env: + - CFLAGS_EXTRA="-m32 -O3 -march=native" + - addons: + apt: + packages: + - gcc-multilib + compiler: gcc + dist: focal + env: + - CFLAGS_EXTRA="-mx32 -march=native -D _FORTIFY_SOURCE=2" + - CONF_OPTIONS="--enable-assertions --enable-shared" + - addons: + apt: + packages: + - gcc-multilib + compiler: gcc + dist: focal + env: + - CFLAGS_EXTRA="-mx32 -march=native" + - CONF_OPTIONS="--disable-atomic-intrinsics --disable-docs" + - compiler: clang + dist: jammy + env: + - >- + CFLAGS_EXTRA="-fsanitize=address -D AO_USE_ALMOST_LOCK_FREE + -fno-omit-frame-pointer" + - TESTS_CUSTOM_RUN=true + - compiler: clang + dist: jammy + env: + - >- + CFLAGS_EXTRA="-fsanitize=address -march=native -fno-common + -fno-omit-frame-pointer" + - CONF_OPTIONS="--enable-assertions" + - compiler: gcc + env: + - >- + CFLAGS_EXTRA="-fsanitize=address -fno-omit-frame-pointer + -D AO_USE_ALMOST_LOCK_FREE -D USE_STANDARD_MALLOC" + - CONF_OPTIONS="--enable-assertions" + - addons: + apt: + packages: + - gcc-multilib + compiler: gcc + env: + - >- + CFLAGS_EXTRA="-fsanitize=address -m32 -march=native + -fno-omit-frame-pointer" + - LDFLAGS="-fuse-ld=gold" + - compiler: clang + dist: jammy + env: + - >- + CFLAGS_EXTRA="-fsanitize=memory,undefined -march=native + -fno-omit-frame-pointer" + - TESTS_CUSTOM_RUN=true + - compiler: clang + dist: jammy + env: + - >- + CFLAGS_EXTRA="-fsanitize=thread -D AO_USE_ALMOST_LOCK_FREE + -fno-omit-frame-pointer" + - compiler: clang + dist: jammy + env: + - >- + CFLAGS_EXTRA="-fsanitize=thread -march=native + -fno-omit-frame-pointer" + - CONF_OPTIONS="--enable-assertions" + - compiler: clang + env: + - CONF_OPTIONS="--disable-atomic-intrinsics" + - CFLAGS_EXTRA="-march=native" + - compiler: clang + env: + - CFLAGS_EXTRA="-x c++ -march=native -D VERBOSE_STACK" + - CONF_OPTIONS="--enable-assertions" + - MAKEFILE_TARGET=all + - compiler: gcc + env: + - CC_FOR_CHECK=g++ + - MAKEFILE_TARGET=all + - addons: + apt: + packages: + - musl-tools + compiler: musl-gcc + env: + - CFLAGS_EXTRA="-march=native" + - CONF_OPTIONS="--enable-assertions" + - addons: + apt: + packages: + - gcc-mingw-w64 + compiler: x86_64-w64-mingw32-gcc + env: + - >- + CONF_OPTIONS="--host=x86_64-w64-mingw32 --enable-shared + --disable-static" + - MAKEFILE_TARGET=all + - addons: + apt: + packages: + - gcc-mingw-w64 + compiler: i686-w64-mingw32-gcc + env: + - CONF_OPTIONS="--host=i686-w64-mingw32" + - MAKEFILE_TARGET=all + - addons: + apt: + packages: + - gcc-multilib + env: + - CROSS_GCC_VER=8.1.0 + - NOLIBC_ARCH_ABI=aarch64-linux + - CFLAGS_EXTRA="-mabi=ilp32" + - addons: + apt: + packages: + - gcc-multilib + env: + - CROSS_GCC_VER=8.1.0 + - NOLIBC_ARCH_ABI=alpha-linux + - addons: + apt: + packages: + - gcc-multilib + env: + - CROSS_GCC_VER=8.1.0 + - NOLIBC_ARCH_ABI=arm-linux-gnueabi + - addons: + apt: + packages: + - gcc-multilib + env: + - CROSS_GCC_VER=8.1.0 + - NOLIBC_ARCH_ABI=arm-linux-gnueabi + - CFLAGS_EXTRA="-D AO_DISABLE_GCC_ATOMICS" + - addons: + apt: + packages: + - gcc-4.6 + - gcc-multilib + sources: + - ubuntu-toolchain-r-test + compiler: gcc-4.6 + dist: xenial + env: + - CROSS_GCC_VER=4.2.4 + - NOLIBC_ARCH_ABI=avr32-linux + - NOLIBC_DELIM=_ + - CFLAGS_EXTRA="-fno-strict-aliasing" + - addons: + apt: + packages: + - gcc-4.6 + - gcc-multilib + sources: + - ubuntu-toolchain-r-test + compiler: gcc-4.6 + dist: xenial + env: + - CROSS_GCC_VER=4.6.3 + - NOLIBC_ARCH_ABI=cris-linux + - NOLIBC_DELIM=_ + - addons: + apt: + packages: + - gcc-multilib + env: + - CROSS_GCC_VER=8.1.0 + - NOLIBC_ARCH_ABI=hppa-linux + - addons: + apt: + packages: + - gcc-multilib + env: + - CROSS_GCC_VER=8.1.0 + - NOLIBC_ARCH_ABI=ia64-linux + - addons: + apt: + packages: + - gcc-multilib + env: + - CROSS_GCC_VER=8.1.0 + - NOLIBC_ARCH_ABI=m68k-linux + - addons: + apt: + packages: + - gcc-multilib + env: + - CROSS_GCC_VER=8.1.0 + - NOLIBC_ARCH_ABI=mips-linux + - addons: + apt: + packages: + - gcc-multilib + env: + - CROSS_GCC_VER=8.1.0 + - NOLIBC_ARCH_ABI=mips-linux + - CFLAGS_EXTRA="-D AO_DISABLE_GCC_ATOMICS" + - addons: + apt: + packages: + - gcc-multilib + env: + - CROSS_GCC_VER=8.1.0 + - NOLIBC_ARCH_ABI=mips64-linux + - addons: + apt: + packages: + - gcc-multilib + env: + - CROSS_GCC_VER=8.1.0 + - NOLIBC_ARCH_ABI=nios2-linux + - addons: + apt: + packages: + - gcc-multilib + env: + - CROSS_GCC_VER=8.1.0 + - NOLIBC_ARCH_ABI=powerpc-linux + - addons: + apt: + packages: + - gcc-multilib + env: + - CROSS_GCC_VER=8.1.0 + - NOLIBC_ARCH_ABI=powerpc-linux + - CFLAGS_EXTRA="-D AO_DISABLE_GCC_ATOMICS" + - addons: + apt: + packages: + - gcc-multilib + env: + - CROSS_GCC_VER=8.1.0 + - NOLIBC_ARCH_ABI=powerpc64-linux + - addons: + apt: + packages: + - gcc-multilib + env: + - CROSS_GCC_VER=8.1.0 + - NOLIBC_ARCH_ABI=riscv32-linux + - addons: + apt: + packages: + - gcc-multilib + env: + - CROSS_GCC_VER=8.1.0 + - NOLIBC_ARCH_ABI=riscv64-linux + - addons: + apt: + packages: + - gcc-multilib + env: + - CROSS_GCC_VER=8.1.0 + - NOLIBC_ARCH_ABI=s390-linux + - addons: + apt: + packages: + - gcc-multilib + env: + - CROSS_GCC_VER=8.1.0 + - NOLIBC_ARCH_ABI=sh2-linux + - addons: + apt: + packages: + - gcc-multilib + env: + - CROSS_GCC_VER=8.1.0 + - NOLIBC_ARCH_ABI=sh4-linux + - addons: + apt: + packages: + - gcc-multilib + env: + - CROSS_GCC_VER=8.1.0 + - NOLIBC_ARCH_ABI=sparc-linux + - CFLAGS_EXTRA="-D AO_NO_SPARC_V9" + - addons: + apt: + packages: + - gcc-multilib + env: + - CROSS_GCC_VER=8.1.0 + - NOLIBC_ARCH_ABI=sparc64-linux + - addons: + apt: + packages: + - gcc-4.6 + - gcc-multilib + sources: + - ubuntu-toolchain-r-test + compiler: gcc-4.6 + dist: xenial + env: + - CROSS_GCC_VER=4.6.2 + - NOLIBC_ARCH_ABI=tilegx-linux + - NOLIBC_DELIM=_ + - env: + - MAKEFILE_TARGET=distcheck + - AUTOCONF_VER=2.73 + - AUTOMAKE_VER=1.19 + - LIBTOOL_VER=2.6.2 + - M4_VER=1.4.21 + - if: type != pull_request + addons: + coverity_scan: + project: + name: bdwgc/libatomic_ops + version: 7.11.0 + notification_email: ivmai@mail.ru + branch_pattern: master + build_command_prepend: CFLAGS=-march=native ./configure + build_command: make -j check CFLAGS_EXTRA=-DLINT2 + env: + - COVERITY_SCAN_BRANCH=1 before_install: -- if [[ "$CROSS_GCC_VER" != "" ]]; then - if [[ "$NOLIBC_DELIM" == "" ]]; then NOLIBC_DELIM=-; fi; - BUILD_ARCH=x86_64; - KERNEL_ORG_PUB_SITE=https://www.kernel.org/pub; - TAR_FOLDER_URL=$KERNEL_ORG_PUB_SITE/tools/crosstool/files/bin/$BUILD_ARCH/$CROSS_GCC_VER; - TARFILE=$BUILD_ARCH-gcc-$CROSS_GCC_VER-nolibc$NOLIBC_DELIM$NOLIBC_ARCH_ABI.tar.xz; - wget --no-check-certificate -O - $TAR_FOLDER_URL/$TARFILE | tar xf - --xz --directory ~; - CROSS_CC=~/gcc-$CROSS_GCC_VER-nolibc/$NOLIBC_ARCH_ABI/bin/$NOLIBC_ARCH_ABI-gcc; - export C_INCLUDE_PATH=/usr/include; - MAKEFILE_TARGET=check-nolink; - fi -- if [[ "$AUTOCONF_VER" != "" || "$AUTOMAKE_VER" != "" || "$LIBTOOL_VER" != "" || "$M4_VER" != "" ]]; then - GNUTOOLS_ROOT=`pwd`/../gnu-tools; - export PATH=$GNUTOOLS_ROOT/bin:$PATH; - GNU_DOWNLOAD_SITE=https://ftp.gnu.org/gnu; - fi -- if [[ "$M4_VER" != "" ]]; then - M4_XZ_URL=$GNU_DOWNLOAD_SITE/m4/m4-$M4_VER.tar.xz; - wget -O - $M4_XZ_URL | tar xf - --xz --directory ~; - (cd ~/m4-$M4_VER && ./configure --prefix=$GNUTOOLS_ROOT && make -j && make install); - fi -- if [[ "$LIBTOOL_VER" != "" ]]; then - LIBTOOL_XZ_URL=$GNU_DOWNLOAD_SITE/libtool/libtool-$LIBTOOL_VER.tar.xz; - wget -O - $LIBTOOL_XZ_URL | tar xf - --xz --directory ~; - (cd ~/libtool-$LIBTOOL_VER && ./configure --prefix=$GNUTOOLS_ROOT && make -j && make install); - fi -- if [[ "$AUTOCONF_VER" != "" ]]; then - AUTOCONF_XZ_URL=$GNU_DOWNLOAD_SITE/autoconf/autoconf-$AUTOCONF_VER.tar.xz; - wget -O - $AUTOCONF_XZ_URL | tar xf - --xz --directory ~; - (cd ~/autoconf-$AUTOCONF_VER && ./configure --prefix=$GNUTOOLS_ROOT && make -j && make install); - fi -- if [[ "$AUTOMAKE_VER" != "" ]]; then - AUTOMAKE_XZ_URL=$GNU_DOWNLOAD_SITE/automake/automake-$AUTOMAKE_VER.tar.xz; - wget -O - $AUTOMAKE_XZ_URL | tar xf - --xz --directory ~; - (cd ~/automake-$AUTOMAKE_VER && ./configure --prefix=$GNUTOOLS_ROOT && make -j && make install); - fi -- if [[ "$REPORT_COVERAGE" == true ]]; then - mkdir -p ../coveralls; - wget -O - https://coveralls.io/coveralls-linux.tar.gz | tar xf - --gz --directory ../coveralls; - export PATH=`pwd`/../coveralls:$PATH; - fi -- if [[ "$MAKEFILE_TARGET" == "dist"* ]]; then - autoconf --version; - automake --version; - m4 --version; - libtool --version || true; - fi -- if [[ "$CMAKE_OPTIONS" != "" ]]; then - cmake --version; - fi -- if [[ "$MAKEFILE_TARGET" == "" ]]; then MAKEFILE_TARGET=check; fi + - if [[ "$CROSS_GCC_VER" != "" ]]; then + if [[ "$NOLIBC_DELIM" == "" ]]; then NOLIBC_DELIM=-; fi; + BUILD_ARCH=x86_64; + KERNEL_ORG_PUB_SITE=https://www.kernel.org/pub; + TAR_FOLDER_URL=$KERNEL_ORG_PUB_SITE/tools/crosstool/files/bin/$BUILD_ARCH/$CROSS_GCC_VER; + TARFILE=$BUILD_ARCH-gcc-$CROSS_GCC_VER-nolibc$NOLIBC_DELIM$NOLIBC_ARCH_ABI.tar.xz; + wget --no-check-certificate -O - $TAR_FOLDER_URL/$TARFILE + | tar xf - --xz --directory ~; + CROSS_CC=~/gcc-$CROSS_GCC_VER-nolibc/$NOLIBC_ARCH_ABI/bin/$NOLIBC_ARCH_ABI-gcc; + export C_INCLUDE_PATH=/usr/include; + MAKEFILE_TARGET=check-nolink; + fi + - if [[ "$AUTOCONF_VER" != "" || "$AUTOMAKE_VER" != "" + || "$LIBTOOL_VER" != "" || "$M4_VER" != "" ]]; then + GNUTOOLS_ROOT=`pwd`/../gnu-tools; + export PATH=$GNUTOOLS_ROOT/bin:$PATH; + GNU_DOWNLOAD_SITE=https://ftp.gnu.org/gnu; + fi + - if [[ "$M4_VER" != "" ]]; then + M4_XZ_URL=$GNU_DOWNLOAD_SITE/m4/m4-$M4_VER.tar.xz; + wget -O - $M4_XZ_URL | tar xf - --xz --directory ~; + (cd ~/m4-$M4_VER && ./configure --prefix=$GNUTOOLS_ROOT + && make -j && make install); + fi + - if [[ "$LIBTOOL_VER" != "" ]]; then + LIBTOOL_XZ_URL=$GNU_DOWNLOAD_SITE/libtool/libtool-$LIBTOOL_VER.tar.xz; + wget -O - $LIBTOOL_XZ_URL | tar xf - --xz --directory ~; + (cd ~/libtool-$LIBTOOL_VER && ./configure --prefix=$GNUTOOLS_ROOT + && make -j && make install); + fi + - if [[ "$AUTOCONF_VER" != "" ]]; then + AUTOCONF_XZ_URL=$GNU_DOWNLOAD_SITE/autoconf/autoconf-$AUTOCONF_VER.tar.xz; + wget -O - $AUTOCONF_XZ_URL | tar xf - --xz --directory ~; + (cd ~/autoconf-$AUTOCONF_VER && ./configure --prefix=$GNUTOOLS_ROOT + && make -j && make install); + fi + - if [[ "$AUTOMAKE_VER" != "" ]]; then + AUTOMAKE_XZ_URL=$GNU_DOWNLOAD_SITE/automake/automake-$AUTOMAKE_VER.tar.xz; + wget -O - $AUTOMAKE_XZ_URL | tar xf - --xz --directory ~; + (cd ~/automake-$AUTOMAKE_VER && ./configure --prefix=$GNUTOOLS_ROOT + && make -j && make install); + fi + - if [[ "$REPORT_COVERAGE" == true ]]; then + mkdir -p ../coveralls; + wget -O - https://coveralls.io/coveralls-linux.tar.gz + | tar xf - --gz --directory ../coveralls; + export PATH=`pwd`/../coveralls:$PATH; + fi + - if [[ "$MAKEFILE_TARGET" == "dist"* ]]; then + autoconf --version; + automake --version; + m4 --version; + libtool --version || true; + fi + - if [[ "$CMAKE_OPTIONS" != "" ]]; then + cmake --version; + fi + - if [[ "$MAKEFILE_TARGET" == "" ]]; then MAKEFILE_TARGET=check; fi install: -- if [[ "$CMAKE_OPTIONS" == "" ]]; then - ./autogen.sh; - fi + - if [[ "$CMAKE_OPTIONS" == "" ]]; then + ./autogen.sh; + fi script: -- if [[ "$CMAKE_OPTIONS" == "" && "$COVERITY_SCAN_BRANCH" != 1 ]]; then - ./configure $CONF_OPTIONS --enable-werror; - fi -- if [[ "$CMAKE_OPTIONS" == "" && "$COVERITY_SCAN_BRANCH" != 1 ]]; then - cat src/config.h; - fi -- if [[ "$CROSS_GCC_VER" != "" ]]; then CC=$CROSS_CC; fi -- if [[ "$CMAKE_OPTIONS" == "" && "$COVERITY_SCAN_BRANCH" != 1 ]]; then - make -j $MAKEFILE_TARGET CC=$CC CFLAGS_EXTRA="$CFLAGS_EXTRA" - LDFLAGS="$LDFLAGS"; - fi -- if [[ "$CMAKE_OPTIONS" != "" ]]; then - cmake $CMAKE_OPTIONS -Denable_werror=ON -Werror=author . && - cmake --build . $CMAKE_BUILD_OPTIONS --parallel; - fi -- if [[ "$CMAKE_OPTIONS" != "" ]]; then - ctest --verbose --parallel 4; - fi -- if [[ "$CC_FOR_CHECK" != "" ]]; then - make check CC=$CC_FOR_CHECK CFLAGS_EXTRA="$CFLAGS_EXTRA"; - fi -- if [ -f tests/test_atomic.log ]; then cat tests/test_atomic*.log; fi -- if [ -f tests/test_stack.log ]; then cat tests/test_stack.log; fi -- if [[ "$TESTS_CUSTOM_RUN" == true ]]; then - ASAN_OPTIONS="detect_leaks=1" UBSAN_OPTIONS="halt_on_error=1" - make -C tests check-without-test-driver; - fi + - if [[ "$CMAKE_OPTIONS" == "" && "$COVERITY_SCAN_BRANCH" != 1 ]]; then + ./configure $CONF_OPTIONS --enable-werror; + fi + - if [[ "$CMAKE_OPTIONS" == "" && "$COVERITY_SCAN_BRANCH" != 1 ]]; then + cat src/config.h; + fi + - if [[ "$CROSS_GCC_VER" != "" ]]; then CC=$CROSS_CC; fi + - if [[ "$CMAKE_OPTIONS" == "" && "$COVERITY_SCAN_BRANCH" != 1 ]]; then + make -j $MAKEFILE_TARGET CC=$CC CFLAGS_EXTRA="$CFLAGS_EXTRA" + LDFLAGS="$LDFLAGS"; + fi + - if [[ "$CMAKE_OPTIONS" != "" ]]; then + cmake $CMAKE_OPTIONS -Denable_werror=ON -Werror=author . && + cmake --build . $CMAKE_BUILD_OPTIONS --parallel; + fi + - if [[ "$CMAKE_OPTIONS" != "" ]]; then + ctest --verbose --parallel 4; + fi + - if [[ "$CC_FOR_CHECK" != "" ]]; then + make check CC=$CC_FOR_CHECK CFLAGS_EXTRA="$CFLAGS_EXTRA"; + fi + - if [ -f tests/test_atomic.log ]; then cat tests/test_atomic*.log; fi + - if [ -f tests/test_stack.log ]; then cat tests/test_stack.log; fi + - if [[ "$TESTS_CUSTOM_RUN" == true ]]; then + ASAN_OPTIONS="detect_leaks=1" UBSAN_OPTIONS="halt_on_error=1" + make -C tests check-without-test-driver; + fi after_success: -- if [[ "$REPORT_COVERAGE" == true ]]; then - lcov --capture --directory src --directory tests --output-file coverage.info && - lcov --remove coverage.info 'tests/*' --output-file coverage.info && - lcov --list coverage.info && - coveralls report coverage.info -r ${COVERALLS_REPO_TOKEN}; - fi + - if [[ "$REPORT_COVERAGE" == true ]]; then + lcov --capture --directory src --directory tests + --output-file coverage.info && + lcov --remove coverage.info 'tests/*' --output-file coverage.info && + lcov --list coverage.info && + coveralls report coverage.info -r ${COVERALLS_REPO_TOKEN}; + fi deploy: provider: releases edge: true file: libatomic_ops-*.tar.gz file_glob: true - on: + "on": condition: $MAKEFILE_TARGET = distcheck repo: bdwgc/libatomic_ops tags: true From 6058f2a0b2464733239490d1d1880f5e06a1ef5f Mon Sep 17 00:00:00 2001 From: Ivan Maidanski Date: Thu, 24 Sep 2026 20:58:15 +0300 Subject: [PATCH 11/12] GH Actions: Check cmake, .md, .yml files format --- .github/workflows/format-check.yml | 45 ++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 .github/workflows/format-check.yml diff --git a/.github/workflows/format-check.yml b/.github/workflows/format-check.yml new file mode 100644 index 00000000..626ce2f6 --- /dev/null +++ b/.github/workflows/format-check.yml @@ -0,0 +1,45 @@ +--- +# Workflow for checking formatting of source code and documentation. +name: format check + +"on": [push, pull_request] + +jobs: + check: + name: ${{ matrix.type }} + runs-on: ubuntu-latest + + strategy: + # Deliver the feedback for all matrix combinations. + fail-fast: false + + matrix: + type: [cmake, md, yaml] + + steps: + - uses: actions/checkout@v6 + + - name: Install gersemi + if: ${{ matrix.type == 'cmake' }} + run: python3 -m pip install --upgrade gersemi + + - name: Install yamllint + if: ${{ matrix.type == 'yaml' }} + run: python3 -m pip install --upgrade yamllint + + - name: Dry-run gersemi (CMake files check) + if: ${{ matrix.type == 'cmake' }} + run: >- + python3 -m gersemi --check --diff CMakeLists.txt + Config.cmake.in + + - name: Dry-run markdownlint + if: ${{ matrix.type == 'md' }} + uses: DavidAnson/markdownlint-cli2-action@v17 + with: + globs: | + **/*.md + + - name: Dry-run yamllint + if: ${{ matrix.type == 'yaml' }} + run: yamllint --strict .*.yml .github/workflows/*.yml From 08b99857a51ab6b218d1e4de8ed36f44d0bc9256 Mon Sep 17 00:00:00 2001 From: Ivan Maidanski Date: Fri, 25 Sep 2026 09:26:45 +0300 Subject: [PATCH 12/12] Add cppcheck, format check, CSA check status badges to README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index dc6aeac5..69bbc613 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,9 @@ LIBRARY IN THIS PACKAGE. [![Travis-CI build status](https://app.travis-ci.com/bdwgc/libatomic_ops.svg?branch=master)](https://app.travis-ci.com/github/bdwgc/libatomic_ops) [![AppVeyor CI build status](https://img.shields.io/appveyor/build/bdwgc/libatomic-ops.svg?branch=master)](https://ci.appveyor.com/project/bdwgc/libatomic-ops) [![GitHub Actions build status](https://github.com/bdwgc/libatomic_ops/actions/workflows/cmake-build.yml/badge.svg?event=push)](https://github.com/bdwgc/libatomic_ops/actions?query=branch%3Amaster) +[![GitHub Actions status (cppcheck)](https://github.com/bdwgc/libatomic_ops/actions/workflows/cppcheck.yml/badge.svg?event=push)](https://github.com/bdwgc/libatomic_ops/actions/workflows/cppcheck.yml?query=branch%3Amaster) +[![GitHub Actions status (format check)](https://github.com/bdwgc/libatomic_ops/actions/workflows/format-check.yml/badge.svg?event=push)](https://github.com/bdwgc/libatomic_ops/actions/workflows/format-check.yml?query=branch%3Amaster) +[![GitHub Actions status (CSA check)](https://github.com/bdwgc/libatomic_ops/actions/workflows/csa-check.yml/badge.svg?event=push)](https://github.com/bdwgc/libatomic_ops/actions/workflows/csa-check.yml?query=branch%3Amaster) [![Coverage Status](https://coveralls.io/repos/github/bdwgc/libatomic_ops/badge.svg?branch=master)](https://coveralls.io/github/bdwgc/libatomic_ops?branch=master) [![Coverity Scan build status](https://scan.coverity.com/projects/32089/badge.svg)](https://scan.coverity.com/projects/bdwgc-libatomic_ops) [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fbdwgc%2Flibatomic_ops.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2Fbdwgc%2Flibatomic_ops/refs/branch/master?ref=badge_shield)