Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

[INFRA] Drop gcc10, add gcc13 #3148

Merged
merged 1 commit into from
May 2, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/api.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ jobs:
strategy:
fail-fast: false
matrix:
compiler: [10, 11, 12]
compiler: [11, 12] #,13

steps:
- name: Checkout SeqAn3
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/avx2.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ jobs:
strategy:
fail-fast: false
matrix:
compiler: [10, 11, 12]
compiler: [11, 12] #,13
build: [unit, snippet, performance, header]

steps:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ci_coverage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ jobs:
name: ${{ matrix.name }}
runs-on: ubuntu-22.04
timeout-minutes: 120
if: github.repository_owner == 'seqan' || github.event_name == 'workflow_dispatch' || github.event.label.name == 'clang-format'
if: github.repository_owner == 'seqan' || github.event_name == 'workflow_dispatch' || github.event.label.name == 'lint'
strategy:
fail-fast: true
matrix:
Expand Down
File renamed without changes.
15 changes: 8 additions & 7 deletions .github/workflows/ci_linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,18 @@ jobs:
name: ${{ matrix.name }}
runs-on: ubuntu-22.04
timeout-minutes: 120
if: github.repository_owner == 'seqan' || github.event_name == 'workflow_dispatch' || github.event.label.name == 'clang-format'
if: github.repository_owner == 'seqan' || github.event_name == 'workflow_dispatch' || github.event.label.name == 'lint'
strategy:
fail-fast: true
matrix:
include:
# Not yet available: https://launchpad.net/~ubuntu-toolchain-r/+archive/ubuntu/test
# - name: "Unit gcc13"
# cxx: "g++-13"
# cc: "gcc-13"
# build: unit
# build_type: Release

- name: "Unit gcc12"
cxx: "g++-12"
cc: "gcc-12"
Expand All @@ -49,12 +56,6 @@ jobs:
build: unit
build_type: Release

- name: "Unit gcc10"
cxx: "g++-10"
cc: "gcc-10"
build: unit
build_type: Release

steps:
- name: Checkout SeqAn3
uses: actions/checkout@v3
Expand Down
17 changes: 7 additions & 10 deletions .github/workflows/ci_macos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,32 +32,29 @@ jobs:
name: ${{ matrix.name }}
runs-on: macos-12
timeout-minutes: 120
if: github.repository_owner == 'seqan' || github.event_name == 'workflow_dispatch' || github.event.label.name == 'clang-format'
if: github.repository_owner == 'seqan' || github.event_name == 'workflow_dispatch' || github.event.label.name == 'lint'
strategy:
fail-fast: true
matrix:
include:
- name: "Unit gcc13"
cxx: "g++-13"
cc: "gcc-13"
build: unit
build_type: Release

- name: "Unit gcc12"
os: macos-12
cxx: "g++-12"
cc: "gcc-12"
build: unit
build_type: Release

- name: "Unit gcc11"
os: macos-12
cxx: "g++-11"
cc: "gcc-11"
build: unit
build_type: Release

- name: "Unit gcc10"
os: macos-12
cxx: "g++-10"
cc: "gcc-10"
build: unit
build_type: Release

steps:
- name: Checkout SeqAn3
uses: actions/checkout@v3
Expand Down
29 changes: 15 additions & 14 deletions .github/workflows/ci_misc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,14 @@ jobs:
name: ${{ matrix.name }}
runs-on: ubuntu-22.04
timeout-minutes: 120
if: github.repository_owner == 'seqan' || github.event_name == 'workflow_dispatch' || github.event.label.name == 'clang-format'
if: github.repository_owner == 'seqan' || github.event_name == 'workflow_dispatch' || github.event.label.name == 'lint'
strategy:
fail-fast: false
matrix:
include:
- name: "Snippet gcc10"
cxx: "g++-10"
cc: "gcc-10"
- name: "Snippet gcc11"
cxx: "g++-11"
cc: "gcc-11"
build: snippet
build_type: Release
build_threads: 2
Expand All @@ -51,9 +51,9 @@ jobs:
skip_run_tests: false
use_include_dependencies: "OFF"

- name: "Performance gcc10"
cxx: "g++-10"
cc: "gcc-10"
- name: "Performance gcc11"
cxx: "g++-11"
cc: "gcc-11"
build: performance
build_type: Release
build_threads: 2
Expand All @@ -66,6 +66,7 @@ jobs:
skip_run_tests: false
use_include_dependencies: "OFF"

# 13 not yet available: https://launchpad.net/~ubuntu-toolchain-r/+archive/ubuntu/test
- name: "Header gcc12"
cxx: "g++-12"
cc: "gcc-12"
Expand All @@ -80,9 +81,9 @@ jobs:
skip_run_tests: false
use_include_dependencies: "OFF"

- name: "Header gcc10"
cxx: "g++-10"
cc: "gcc-10"
- name: "Header gcc11"
cxx: "g++-11"
cc: "gcc-11"
build: header
build_type: Release
build_threads: 2
Expand All @@ -96,8 +97,8 @@ jobs:
use_include_dependencies: "OFF"

- name: "Non-cyclic tests"
cxx: "g++-10"
cc: "gcc-10"
cxx: "g++-11"
cc: "gcc-11"
build: unit
build_type: Debug
build_threads: 2
Expand All @@ -111,8 +112,8 @@ jobs:
use_include_dependencies: "ON"

- name: "CMake external project"
cxx: "g++-10"
cc: "gcc-10"
cxx: "g++-11"
cc: "gcc-11"
build: external_project
build_type: Debug
build_threads: 1 # output is important to be in sequential order
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/latest_libraries.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ jobs:
strategy:
fail-fast: false
matrix:
compiler: [10, 11, 12]
compiler: [11, 12] #,13
build: [unit, snippet, performance, header]

steps:
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ Please see the [online documentation](https://docs.seqan.de/seqan/3-master-user/

| | requirement | version | comment |
|-------------------|------------------------------------------------------|----------|---------------------------------------------|
|**compiler** | [GCC](https://gcc.gnu.org) | ≥ 10 | no other compiler is currently supported! |
|**compiler** | [GCC](https://gcc.gnu.org) | ≥ 11 | no other compiler is currently supported! |
|**build system** | [CMake](https://cmake.org) | ≥ 3.4 | optional, but recommended |
|**required libs** | [SDSL](https://github.com/xxsds/sdsl-lite) | ≥ 3.0.1 | |
|**optional libs** | [cereal](https://github.com/USCiLab/cereal) | ≥ 1.3.1 | required for serialisation and CTD support |
Expand Down
6 changes: 3 additions & 3 deletions doc/about/api/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,10 +78,10 @@ a different (updated) on-disk format.
The main requirement for SeqAn3 is that your operating system provides one of the compilers supported by us.
In general, we only support the latest three major compiler versions.
We currently support the following compilers on 64-bit operating systems with little-endian CPU architectures:
* GCC7, GCC8, GCC9, GCC10, GCC11
* GCC11, GCC12, GCC13

\note Only the most recent minor release of a compiler is guaranteed to be supported, e.g. when `gcc-10.4` is released,
we may drop support for `gcc-10.3`. Since all platforms with an older version receive minor release updates,
\note Only the most recent minor release of a compiler is guaranteed to be supported, e.g. when `gcc-11.4` is released,
we may drop support for `gcc-11.3`. Since all platforms with an older version receive minor release updates,
this should not be a problem.

We promise to support the above compilers in the latest release of SeqAn3, or until all the following
Expand Down
4 changes: 2 additions & 2 deletions doc/setup/quickstart_cmake/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,13 @@ works.

# Software
Requirements:
- gcc >= 10
- gcc >= 11
- cmake >= 3.4
- git

## Installing GCC

SeqAn requires GCC >= 10. Current versions of LLVM/Clang and VisualStudio/MSVC are **not yet supported**.
SeqAn requires GCC >= 11. Current versions of LLVM/Clang and VisualStudio/MSVC are **not yet supported**.
We will briefly explain how to install GCC-11 (or the latest GCC if such an option is available) on some popular
operating systems. We recommend using the latest version of GCC available. For more information, refer to your
operating system's documentation.
Expand Down
84 changes: 2 additions & 82 deletions include/seqan3/core/configuration/detail/concept.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,77 +46,6 @@ inline constexpr std::array<std::array<void *, 0>, 0> compatibility_table{};
// Concept config_element
// ----------------------------------------------------------------------------

#if SEQAN3_WORKAROUND_GCC_PIPEABLE_CONFIG_CONCEPT
/*!\brief A helper class to check if a type has a static member called `id`.
* \ingroup core_configuration
*
* \details
*
* This class is needed for gcc versions older than 11. It adds a SFINAE check to test if a type
* has a static member called `id`, which is needed for the concept defintions around the
* pipeable configuration element concepts.
*/
struct config_id_accessor
{
private:
//!\brief Helper variable template to convert the configuration enum identifier to an integer.
template <typename config_t>
static constexpr int32_t as_int = static_cast<int32_t>(std::remove_cvref_t<config_t>::id);

//!\brief Helper function to check if static id member exists.
template <typename config_t>
static constexpr auto has_id_member(int) -> decltype((static_cast<void>(config_t::id), true))
{
return true;
}

//!\overload
template <typename config_t>
static constexpr bool has_id_member(...)
{
return false;
}

public:
//!\brief Type alias for the internal enumeration type that represents the id.
template <typename config_t>
using id_type = std::remove_cvref_t<decltype(config_t::id)>;

/*!\brief Checks if two configuration types are compatible.
*
* \tparam config1_t The type of the first configuration to check against the second.
* \tparam config2_t The type of the second configuration.
*
* \details
*
* Uses the seqan3::detail::compatibility_table of the corresponding configuration element domain to check
* if both configurations can be combined.
*/
template <typename config1_t, typename config2_t>
static constexpr auto is_compatible()
{
if constexpr (has_id_member<config1_t>(0) && has_id_member<config2_t>(0)) // needed for gcc <= 9
{
using config1_id_t = id_type<config1_t>;
using config2_id_t = id_type<config2_t>;

if constexpr (std::same_as<config1_id_t, config2_id_t>)
return std::bool_constant<compatibility_table<config1_id_t>[as_int<config1_t>][as_int<config2_t>]> {};
else
return std::false_type{};
}
else
{
return std::false_type{};
}
}

//!\brief Variable template that evaluates to `true` if the type has a static id member, otherwise `false`.
template <typename config_t>
static constexpr bool has_id = has_id_member<config_t>(0);
};
#endif // SEQAN3_WORKAROUND_GCC_PIPEABLE_CONFIG_CONCEPT

/*!\interface seqan3::detail::config_element <>
* \brief Concept for an algorithm configuration element.
* \ingroup core_configuration
Expand All @@ -139,13 +68,9 @@ template <typename config_t>
concept config_element = requires {
requires std::is_base_of_v<seqan3::pipeable_config_element, config_t>;
requires std::copyable<config_t>;
#if SEQAN3_WORKAROUND_GCC_PIPEABLE_CONFIG_CONCEPT
requires config_id_accessor::has_id<config_t>;
#else // ^^^ workaround / no workaround vvv
{
config_t::id
};
#endif // SEQAN3_WORKAROUND_GCC_PIPEABLE_CONFIG_CONCEPT
};
//!\endcond

Expand All @@ -167,15 +92,10 @@ concept config_element = requires {
//!\cond
template <typename config1_t, typename config2_t>
concept config_element_pipeable_with =
config_element<config1_t> && config_element<config2_t> &&
#if SEQAN3_WORKAROUND_GCC_PIPEABLE_CONFIG_CONCEPT
std::same_as<config_id_accessor::id_type<config1_t>, config_id_accessor::id_type<config2_t>>
&& decltype(config_id_accessor::is_compatible<config1_t, config2_t>())::value;
#else // ^^^ workaround / no workaround vvv
std::same_as<std::remove_cvref_t<decltype(config1_t::id)>, std::remove_cvref_t<decltype(config2_t::id)>>
config_element<config1_t> && config_element<config2_t>
&& std::same_as<std::remove_cvref_t<decltype(config1_t::id)>, std::remove_cvref_t<decltype(config2_t::id)>>
&& compatibility_table<std::remove_cvref_t<decltype(config1_t::id)>>
[static_cast<int32_t>(config1_t::id)][static_cast<int32_t>(config2_t::id)];
#endif // SEQAN3_WORKAROUND_GCC_PIPEABLE_CONFIG_CONCEPT
//!\endcond

} // namespace seqan3::detail
Expand Down
12 changes: 0 additions & 12 deletions include/seqan3/core/detail/iterator_traits.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,18 +56,6 @@ template <typename t>
concept has_iterator_category = requires () { typename t::iterator_category; };
//!\endcond

#if SEQAN3_WORKAROUND_GCC_96070
/*!\brief This is a workaround for gcc 10.x, x < 4. That version of the stdlib always expects an iterator_category
* to be defined. There are some view combinations that do not work with this "fix".
*/
template <typename underlying_iterator_t>
requires (!has_iterator_category<std::iterator_traits<underlying_iterator_t>>)
struct maybe_iterator_category<underlying_iterator_t>
{
using iterator_category = void;
};
#endif // SEQAN3_WORKAROUND_GCC_96070

//!\cond
template <typename underlying_iterator_t>
requires has_iterator_category<std::iterator_traits<underlying_iterator_t>>
Expand Down
Loading