diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 1dfd120..18728e3 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -5,9 +5,26 @@ project(examples VERSION 1.0 LANGUAGES CXX) # Flags set(CMAKE_CXX_STANDARD 20) -set(CMAKE_CXX_FLAGS "-Wall -Wextra -Wshadow") -set(CMAKE_CXX_FLAGS_DEBUG "-g") -set(CMAKE_CXX_FLAGS_RELEASE "-O3 -march=native -DNDEBUG") + +if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + # MSVC doesn't need -fPIC as it's the default behavior + # Equivalent of -Wall -Wextra + add_compile_options(/W3) +elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + add_compile_options(-fPIC -Wall -Wextra -Wshadow) +else() + message(FATAL_ERROR "Compiler not explicitly supported: ${CMAKE_CXX_COMPILER_ID}" ) +endif() + +if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + set(CMAKE_CXX_FLAGS_DEBUG "/Zi /Ob0 /Od /RTC1") + set(CMAKE_CXX_FLAGS_RELEASE "/O2 /DNDEBUG") +elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + set(CMAKE_CXX_FLAGS_DEBUG "-g") + set(CMAKE_CXX_FLAGS_RELEASE "-O3 -march=native -DNDEBUG") +else() + message(FATAL_ERROR "Compiler not explicitly supported: ${CMAKE_CXX_COMPILER_ID}" ) +endif () set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE) # Default build type diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 87c510a..71b0b84 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -3,11 +3,25 @@ cmake_minimum_required(VERSION 3.12) # Project project(Libataxx VERSION 1.0 LANGUAGES CXX) -# Flags -set(CMAKE_CXX_STANDARD 20) -set(CMAKE_CXX_FLAGS "-fPIC -Wall -Wextra -Wshadow") -set(CMAKE_CXX_FLAGS_DEBUG "-g") -set(CMAKE_CXX_FLAGS_RELEASE "-O3 -march=native -DNDEBUG") +if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + # MSVC doesn't need -fPIC as it's the default behavior + # Equivalent of -Wall -Wextra + add_compile_options(/W3) +elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + add_compile_options(-fPIC -Wall -Wextra -Wshadow) +else() + message(FATAL_ERROR "Compiler not explicitly supported: ${CMAKE_CXX_COMPILER_ID}" ) +endif() + +if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + set(CMAKE_CXX_FLAGS_DEBUG "/Zi /Ob0 /Od /RTC1") + set(CMAKE_CXX_FLAGS_RELEASE "/O2 /DNDEBUG") +elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + set(CMAKE_CXX_FLAGS_DEBUG "-g") + set(CMAKE_CXX_FLAGS_RELEASE "-O3 -march=native -DNDEBUG") +else() + message(FATAL_ERROR "Compiler not explicitly supported: ${CMAKE_CXX_COMPILER_ID}" ) +endif () set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE) # Default build type @@ -34,6 +48,8 @@ add_library( set_fen.cpp ) +target_compile_features(objlib PUBLIC cxx_std_20) + # Add the static library add_library( ataxx_static diff --git a/src/libataxx/bitboard.hpp b/src/libataxx/bitboard.hpp index 8478f78..6254b15 100644 --- a/src/libataxx/bitboard.hpp +++ b/src/libataxx/bitboard.hpp @@ -3,6 +3,7 @@ #include #include +#include #include "square.hpp" namespace libataxx { @@ -38,7 +39,7 @@ class BitboardIterator { } [[nodiscard]] constexpr Square operator*() const noexcept { - const int n = __builtin_ctzll(data_); + const int n = std::countr_zero(data_); return Square{File{n % 8}, Rank{n / 8}}; } @@ -69,7 +70,7 @@ class Bitboard { } [[nodiscard]] constexpr int count() const noexcept { - return __builtin_popcountll(data_); + return std::popcount(data_); } constexpr void set(const Square &sq) noexcept { @@ -195,7 +196,7 @@ class Bitboard { } [[nodiscard]] constexpr int lsbll() const noexcept { - return __builtin_ctzll(data_); + return std::countr_zero(data_); } [[nodiscard]] constexpr Bitboard flip_vertical() const noexcept { diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index e0e13df..8ea5f13 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -5,9 +5,26 @@ project(tests VERSION 1.0 LANGUAGES CXX) # Flags set(CMAKE_CXX_STANDARD 20) -set(CMAKE_CXX_FLAGS "-Wall -Wextra -Wshadow") -set(CMAKE_CXX_FLAGS_DEBUG "-g") -set(CMAKE_CXX_FLAGS_RELEASE "-O3 -march=native -DNDEBUG") + +if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + # MSVC doesn't need -fPIC as it's the default behavior + # Equivalent of -Wall -Wextra + add_compile_options(/W3) +elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + add_compile_options(-fPIC -Wall -Wextra -Wshadow) +else() + message(FATAL_ERROR "Compiler not explicitly supported: ${CMAKE_CXX_COMPILER_ID}" ) +endif() + +if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + set(CMAKE_CXX_FLAGS_DEBUG "/Zi /Ob0 /Od /RTC1") + set(CMAKE_CXX_FLAGS_RELEASE "/O2 /DNDEBUG") +elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + set(CMAKE_CXX_FLAGS_DEBUG "-g") + set(CMAKE_CXX_FLAGS_RELEASE "-O3 -march=native -DNDEBUG") +else() + message(FATAL_ERROR "Compiler not explicitly supported: ${CMAKE_CXX_COMPILER_ID}" ) +endif () set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE) # Default build type