shakkar23 / ShakTrisLib

StakTris implementation
MIT License
0 stars 1 forks source link

Compilation Error: _pext_u32 Not Declared in Scope on GNU 13.2.1 with CPython 3.10 (musl i686) #1

Closed lunathanael closed 1 month ago

lunathanael commented 1 month ago

Issue Description:

Compiling within manylinux docker image with i686. I am having an issue with one specific file: utils/pext.cpp

During the compilation process, the following error occurs:

[20/25] Building CXX object src/botris/_core/ShakTrisLib/src/CMakeFiles/ShakTris.dir/engine/Game.cpp.o
FAILED: src/botris/_core/ShakTrisLib/src/CMakeFiles/ShakTris.dir/engine/Game.cpp.o
/project/src/botris/_core/ShakTrisLib/src/util/pext.hpp: In instantiation of 'constexpr T pext(T, T) [with T = unsigned int]':
/project/src/botris/_core/ShakTrisLib/src/engine/Board.hpp:64:26: required from here
/project/src/botris/_core/ShakTrisLib/src/util/pext.hpp:50:25: error: '_pext_u32' was not declared in this scope
   50 |         return _pext_u32(src, mask);

Environment:

Affected File:

template <std::integral T>
constexpr T pext(const T src, const T mask) {
    if (std::is_constant_evaluated()) {
        return pext_impl(src, mask);
    }

#if defined(__BMI2__)
    if constexpr (std::same_as<T, std::uint64_t>) {
        return _pext_u64(src, mask);
    }
    else if constexpr (std::same_as<T, std::uint32_t>) {
        return _pext_u32(src, mask);
    }
    else {
        return pext_impl(src, mask);
    }

Possible Cause:

The error suggests that the _pext_u32 intrinsic, used for bit field extraction, is not recognized in this scope. This could be related to how the BMI2 instruction set is being detected or the environment setup.

Steps to Reproduce:

Compile the project using GNU 13.2.1 with the provided build command. Observe the compilation failure related to _pext_u32 in utils/pext.hpp.

Additional Context:

Switching to a different compiler or adjusting the compilation flags might be necessary if the problem is tied to how BMI2 instructions are handled in this environment.

lunathanael commented 1 month ago

@shakkar23 pls fix :)

lunathanael commented 1 month ago

New error:

FAILED: CMakeFiles/_core.dir/src/botris/_core/board.cpp.o
    /opt/rh/gcc-toolset-12/root/usr/bin/g++  -pthread -DVERSION_INFO=0.1.22 -D_core_EXPORTS -I/opt/python/cp310-cp310/include/python3.10 -I/tmp/pip-build-env-9kqwhxdf/overlay/lib/python3.10/site-packages/nanobind/include -I/project/src/botris/_core/ShakTrisLib/src -O3 -DNDEBUG -std=gnu++20 -flto=auto -fno-fat-lto-objects -fPIC -fvisibility=hidden -fno-stack-protector -ffunction-sections -fdata-sections -MD -MT CMakeFiles/_core.dir/src/botris/_core/board.cpp.o -MF CMakeFiles/_core.dir/src/botris/_core/board.cpp.o.d -o CMakeFiles/_core.dir/src/botris/_core/board.cpp.o -c /project/src/botris/_core/board.cpp
    In file included from /opt/rh/gcc-toolset-12/root/usr/lib/gcc/x86_64-redhat-linux/12/include/x86gprintrin.h:43,
                     from /project/src/botris/_core/ShakTrisLib/src/util/pext.hpp:11,
                     from /project/src/botris/_core/ShakTrisLib/src/engine/Board.hpp:10,
                     from /project/src/botris/_core/board.cpp:3:
    /opt/rh/gcc-toolset-12/root/usr/lib/gcc/x86_64-redhat-linux/12/include/bmi2intrin.h: In function ‘pext<unsigned int>(unsigned int, unsigned int)unsigned int’:
    /opt/rh/gcc-toolset-12/root/usr/lib/gcc/x86_64-redhat-linux/12/include/bmi2intrin.h:53:1: error: inlining failed in call to ‘always_inline’ ‘_pext_u32(unsigned int, unsigned int)’: target specific option mismatch
       53 | _pext_u32 (unsigned int __X, unsigned int __Y)
          | ^~~~~~~~~
    /project/src/botris/_core/ShakTrisLib/src/util/pext.hpp:48:25: note: called from here
       48 |         return _pext_u32(src, mask);
          |                ~~~~~~~~~^~~~~~~~~~~
    /opt/rh/gcc-toolset-12/root/usr/lib/gcc/x86_64-redhat-linux/12/include/bmi2intrin.h:53:1: error: inlining failed in call to ‘always_inline’ ‘_pext_u32(unsigned int, unsigned int)’: target specific option mismatch
       53 | _pext_u32 (unsigned int __X, unsigned int __Y)
          | ^~~~~~~~~
    /project/src/botris/_core/ShakTrisLib/src/util/pext.hpp:48:25: note: called from here
       48 |         return _pext_u32(src, mask);
          |                ~~~~~~~~~^~~~~~~~~~~
    [4/25] Building CXX object CMakeFiles/_core.dir/src/botris/_core/constants.cpp.o
    [5/25] Building CXX object CMakeFiles/_core.dir/src/botris/_core/piece.cpp.o
    [6/25] Building CXX object CMakeFiles/_core.dir/src/botris/_core/game.cpp.o
    [7/25] Building CXX object CMakeFiles/nanobind-static.dir/tmp/pip-build-env-9kqwhxdf/overlay/lib/python3.10/site-packages/nanobind/src/nb_internals.cpp.o
    [8/25] Building CXX object CMakeFiles/nanobind-static.dir/tmp/pip-build-env-9kqwhxdf/overlay/lib/python3.10/site-packages/nanobind/src/nb_func.cpp.o
    ninja: build stopped: subcommand failed.
lunathanael commented 1 month ago

 *** Building project with Ninja...
    [1/25] Building CXX object CMakeFiles/_core.dir/src/botris/_core/constants.cpp.o
    [2/25] Building CXX object CMakeFiles/_core.dir/src/botris/_core/main_module.cpp.o
    [3/25] Building CXX object CMakeFiles/_core.dir/src/botris/_core/board.cpp.o
    FAILED: CMakeFiles/_core.dir/src/botris/_core/board.cpp.o
    /opt/rh/gcc-toolset-12/root/usr/bin/g++  -pthread -DVERSION_INFO=0.2.0 -D_core_EXPORTS -I/opt/python/cp310-cp310/include/python3.10 -I/tmp/pip-build-env-4yga2r_1/overlay/lib/python3.10/site-packages/nanobind/include -I/project/src/botris/_core/ShakTrisLib/src -O3 -DNDEBUG -std=gnu++20 -flto=auto -fno-fat-lto-objects -fPIC -fvisibility=hidden -fno-stack-protector -ffunction-sections -fdata-sections -MD -MT CMakeFiles/_core.dir/src/botris/_core/board.cpp.o -MF CMakeFiles/_core.dir/src/botris/_core/board.cpp.o.d -o CMakeFiles/_core.dir/src/botris/_core/board.cpp.o -c /project/src/botris/_core/board.cpp
    In file included from /project/src/botris/_core/ShakTrisLib/src/engine/Board.hpp:10,
                     from /project/src/botris/_core/board.cpp:3:
    /project/src/botris/_core/ShakTrisLib/src/util/pext.hpp:12:86: error: missing binary operator before token "("
       12 | #elif defined(__clang__) && !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
          |                                                                                      ^
    [4/25] Building CXX object CMakeFiles/_core.dir/src/botris/_core/mode.cpp.o
    [5/25] Building CXX object CMakeFiles/_core.dir/src/botris/_core/piece.cpp.o
    [6/25] Building CXX object CMakeFiles/_core.dir/src/botris/_core/game.cpp.o
    FAILED: CMakeFiles/_core.dir/src/botris/_core/game.cpp.o
    /opt/rh/gcc-toolset-12/root/usr/bin/g++  -pthread -DVERSION_INFO=0.2.0 -D_core_EXPORTS -I/opt/python/cp310-cp310/include/python3.10 -I/tmp/pip-build-env-4yga2r_1/overlay/lib/python3.10/site-packages/nanobind/include -I/project/src/botris/_core/ShakTrisLib/src -O3 -DNDEBUG -std=gnu++20 -flto=auto -fno-fat-lto-objects -fPIC -fvisibility=hidden -fno-stack-protector -ffunction-sections -fdata-sections -MD -MT CMakeFiles/_core.dir/src/botris/_core/game.cpp.o -MF CMakeFiles/_core.dir/src/botris/_core/game.cpp.o.d -o CMakeFiles/_core.dir/src/botris/_core/game.cpp.o -c /project/src/botris/_core/game.cpp
    In file included from /project/src/botris/_core/ShakTrisLib/src/engine/Board.hpp:10,
                     from /project/src/botris/_core/ShakTrisLib/src/engine/Game.hpp:9,
                     from /project/src/botris/_core/game.cpp:5:
    /project/src/botris/_core/ShakTrisLib/src/util/pext.hpp:12:86: error: missing binary operator before token "("
       12 | #elif defined(__clang__) && !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
          |                                                                                      ^
    [7/25] Building CXX object CMakeFiles/nanobind-static.dir/tmp/pip-build-env-4yga2r_1/overlay/lib/python3.10/site-packages/nanobind/src/nb_internals.cpp.o
    [8/25] Building CXX object CMakeFiles/nanobind-static.dir/tmp/pip-build-env-4yga2r_1/overlay/lib/python3.10/site-packages/nanobind/src/nb_func.cpp.o
    ninja: build stopped: subcommand failed.

    *** CMake build failed
lunathanael commented 1 month ago

    FAILED: CMakeFiles/_core.dir/src/botris/_core/board.cpp.o
    /opt/rh/gcc-toolset-12/root/usr/bin/g++  -pthread -DVERSION_INFO=0.2.0 -D_core_EXPORTS -I/opt/python/cp310-cp310/include/python3.10 -I/tmp/pip-build-env-8phys4wx/overlay/lib/python3.10/site-packages/nanobind/include -I/project/src/botris/_core/ShakTrisLib/src -O3 -DNDEBUG -std=gnu++20 -flto=auto -fno-fat-lto-objects -fPIC -fvisibility=hidden -fno-stack-protector -ffunction-sections -fdata-sections -MD -MT CMakeFiles/_core.dir/src/botris/_core/board.cpp.o -MF CMakeFiles/_core.dir/src/botris/_core/board.cpp.o.d -o CMakeFiles/_core.dir/src/botris/_core/board.cpp.o -c /project/src/botris/_core/board.cpp
    In file included from /project/src/botris/_core/ShakTrisLib/src/engine/Board.hpp:10,
                     from /project/src/botris/_core/board.cpp:3:
    /project/src/botris/_core/ShakTrisLib/src/util/pext.hpp:12:86: error: missing binary operator before token "("
       12 | #elif defined(__clang__) && !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
          |                                                                                      ^
    [5/25] Building CXX object CMakeFiles/_core.dir/src/botris/_core/piece.cpp.o
    [6/25] Building CXX object CMakeFiles/_core.dir/src/botris/_core/game.cpp.o
    FAILED: CMakeFiles/_core.dir/src/botris/_core/game.cpp.o
    /opt/rh/gcc-toolset-12/root/usr/bin/g++  -pthread -DVERSION_INFO=0.2.0 -D_core_EXPORTS -I/opt/python/cp310-cp310/include/python3.10 -I/tmp/pip-build-env-8phys4wx/overlay/lib/python3.10/site-packages/nanobind/include -I/project/src/botris/_core/ShakTrisLib/src -O3 -DNDEBUG -std=gnu++20 -flto=auto -fno-fat-lto-objects -fPIC -fvisibility=hidden -fno-stack-protector -ffunction-sections -fdata-sections -MD -MT CMakeFiles/_core.dir/src/botris/_core/game.cpp.o -MF CMakeFiles/_core.dir/src/botris/_core/game.cpp.o.d -o CMakeFiles/_core.dir/src/botris/_core/game.cpp.o -c /project/src/botris/_core/game.cpp
    In file included from /project/src/botris/_core/ShakTrisLib/src/engine/Board.hpp:10,
                     from /project/src/botris/_core/ShakTrisLib/src/engine/Game.hpp:9,
                     from /project/src/botris/_core/game.cpp:5:
    /project/src/botris/_core/ShakTrisLib/src/util/pext.hpp:12:86: error: missing binary operator before token "("
       12 | #elif defined(__clang__) && !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \
          |                                                                                      ^
    [7/25] Building CXX object CMakeFiles/nanobind-static.dir/tmp/pip-build-env-8phys4wx/overlay/lib/python3.10/site-packages/nanobind/src/nb_internals.cpp.o
    [8/25] Building CXX object CMakeFiles/nanobind-static.dir/tmp/pip-build-env-8phys4wx/overlay/lib/python3.10/site-packages/nanobind/src/nb_func.cpp.o
    [9/25] Building CXX object CMakeFiles/nanobind-static.dir/tmp/pip-build-env-8phys4wx/overlay/lib/python3.10/site-packages/nanobind/src/nb_type.cpp.o
    ninja: build stopped: subcommand failed.

    *** CMake build failed    
lunathanael commented 1 month ago

oopsie

lunathanael commented 1 month ago

This has been fixed via #2 .