diff options
author | Famiu Haque <famiuhaque@proton.me> | 2024-04-05 07:56:35 +0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-05 09:56:35 +0800 |
commit | 75b80516d5133202b1e6848ad0c6d640543b313c (patch) | |
tree | 3bac75b2c058015c92667affef28527cdbe2d2a9 | |
parent | dc69c475a5804c6c01987722f4cf6298d4e33e64 (diff) | |
download | rneovim-75b80516d5133202b1e6848ad0c6d640543b313c.tar.gz rneovim-75b80516d5133202b1e6848ad0c6d640543b313c.tar.bz2 rneovim-75b80516d5133202b1e6848ad0c6d640543b313c.zip |
build: fix link error for `_BitScanForward64` (#28173)
Problem: The usage of `_BitScanForward64` causes linking to fail on some systems.
Solution: Correctly check if it exists using `check_c_source_compiles`.
-rw-r--r-- | cmake.config/CMakeLists.txt | 11 | ||||
-rw-r--r-- | cmake.config/config.h.in | 1 | ||||
-rw-r--r-- | src/nvim/math.c | 2 |
3 files changed, 13 insertions, 1 deletions
diff --git a/cmake.config/CMakeLists.txt b/cmake.config/CMakeLists.txt index f3cc803cf5..d30c522aa2 100644 --- a/cmake.config/CMakeLists.txt +++ b/cmake.config/CMakeLists.txt @@ -79,6 +79,17 @@ int main(void) } " HAVE_PWD_FUNCS) +check_c_source_compiles(" +#include <intrin.h> + +int main(void) +{ + unsigned long index; + unsigned char mask = 0x8000; + _BitScanForward64(&index, mask); + return 0; +} +" HAVE_BITSCANFORWARD64) if(CMAKE_SYSTEM_NAME STREQUAL "SunOS") check_c_source_compiles(" diff --git a/cmake.config/config.h.in b/cmake.config/config.h.in index 47fbb5bafe..af4e13fc11 100644 --- a/cmake.config/config.h.in +++ b/cmake.config/config.h.in @@ -52,3 +52,4 @@ #cmakedefine HAVE_EXECINFO_BACKTRACE #cmakedefine HAVE_BUILTIN_ADD_OVERFLOW #cmakedefine HAVE_WIMPLICIT_FALLTHROUGH_FLAG +#cmakedefine HAVE_BITSCANFORWARD64 diff --git a/src/nvim/math.c b/src/nvim/math.c index 39d166bb53..2fd9cd6ce7 100644 --- a/src/nvim/math.c +++ b/src/nvim/math.c @@ -56,7 +56,7 @@ int xctz(uint64_t x) // Use compiler builtin if possible. #if defined(__clang__) || (defined(__GNUC__) && (__GNUC__ >= 4)) return __builtin_ctzll(x); -#elif defined(_MSC_VER) +#elif defined(HAVE_BITSCANFORWARD64) unsigned long index; _BitScanForward64(&index, x); return (int)index; |