Closed mingodad closed 1 month ago
When building with g++-9.4
it builds fine but I have a project that uses it but requires g++-13
:
mycmake ..
-- CMake version: 3.24.2
-- The CXX compiler identification is GNU 9.4.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- {fmt} version: 10.2.2
-- Build type: Release
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE
-- Looking for strptime
-- Looking for strptime - found
-- FMT_PEDANTIC: OFF
-- Configuring done
-- Generating done
-- Build files have been written to: /home/mingo/dev/c/A_libs/fmt/build0
mingo@mingo-X550VX:~/dev/c/A_libs/fmt/build0$ make
[ 1%] Building CXX object CMakeFiles/fmt.dir/src/format.cc.o
[ 2%] Building CXX object CMakeFiles/fmt.dir/src/os.cc.o
[ 4%] Linking CXX static library libfmt.a
[ 4%] Built target fmt
[ 5%] Building CXX object test/gtest/CMakeFiles/gtest.dir/gmock-gtest-all.cc.o
[ 7%] Linking CXX static library libgtest.a
[ 7%] Built target gtest
[ 8%] Building CXX object test/CMakeFiles/test-main.dir/test-main.cc.o
[ 9%] Building CXX object test/CMakeFiles/test-main.dir/gtest-extra.cc.o
[ 11%] Building CXX object test/CMakeFiles/test-main.dir/util.cc.o
[ 12%] Linking CXX static library libtest-main.a
[ 12%] Built target test-main
[ 14%] Building CXX object test/CMakeFiles/args-test.dir/args-test.cc.o
[ 15%] Linking CXX executable ../bin/args-test
[ 15%] Built target args-test
[ 16%] Building CXX object test/CMakeFiles/base-test.dir/base-test.cc.o
[ 18%] Linking CXX executable ../bin/base-test
[ 18%] Built target base-test
[ 19%] Building CXX object test/CMakeFiles/assert-test.dir/assert-test.cc.o
[ 21%] Linking CXX executable ../bin/assert-test
[ 21%] Built target assert-test
[ 22%] Building CXX object test/CMakeFiles/chrono-test.dir/chrono-test.cc.o
[ 23%] Linking CXX executable ../bin/chrono-test
[ 23%] Built target chrono-test
[ 25%] Building CXX object test/CMakeFiles/color-test.dir/color-test.cc.o
[ 26%] Linking CXX executable ../bin/color-test
[ 26%] Built target color-test
[ 28%] Building CXX object test/CMakeFiles/gtest-extra-test.dir/gtest-extra-test.cc.o
[ 29%] Linking CXX executable ../bin/gtest-extra-test
[ 29%] Built target gtest-extra-test
[ 30%] Building CXX object test/CMakeFiles/format-test.dir/format-test.cc.o
[ 32%] Linking CXX executable ../bin/format-test
[ 32%] Built target format-test
[ 33%] Building CXX object test/CMakeFiles/format-impl-test.dir/format-impl-test.cc.o
[ 35%] Building CXX object test/CMakeFiles/format-impl-test.dir/header-only-test.cc.o
[ 36%] Building CXX object test/CMakeFiles/format-impl-test.dir/test-main.cc.o
[ 38%] Building CXX object test/CMakeFiles/format-impl-test.dir/gtest-extra.cc.o
[ 39%] Building CXX object test/CMakeFiles/format-impl-test.dir/util.cc.o
[ 40%] Building CXX object test/CMakeFiles/format-impl-test.dir/__/src/os.cc.o
[ 42%] Linking CXX executable ../bin/format-impl-test
[ 42%] Built target format-impl-test
[ 43%] Building CXX object test/CMakeFiles/ostream-test.dir/ostream-test.cc.o
[ 45%] Linking CXX executable ../bin/ostream-test
[ 45%] Built target ostream-test
[ 46%] Building CXX object test/CMakeFiles/compile-test.dir/compile-test.cc.o
[ 47%] Linking CXX executable ../bin/compile-test
[ 47%] Built target compile-test
[ 49%] Building CXX object test/CMakeFiles/compile-fp-test.dir/compile-fp-test.cc.o
[ 50%] Building CXX object test/CMakeFiles/compile-fp-test.dir/test-main.cc.o
[ 52%] Building CXX object test/CMakeFiles/compile-fp-test.dir/gtest-extra.cc.o
[ 53%] Building CXX object test/CMakeFiles/compile-fp-test.dir/util.cc.o
[ 54%] Building CXX object test/CMakeFiles/compile-fp-test.dir/__/src/os.cc.o
[ 56%] Linking CXX executable ../bin/compile-fp-test
[ 56%] Built target compile-fp-test
[ 57%] Building CXX object test/CMakeFiles/printf-test.dir/printf-test.cc.o
[ 59%] Linking CXX executable ../bin/printf-test
[ 59%] Built target printf-test
[ 60%] Building CXX object test/CMakeFiles/ranges-test.dir/ranges-test.cc.o
[ 61%] Building CXX object test/CMakeFiles/ranges-test.dir/ranges-odr-test.cc.o
[ 63%] Linking CXX executable ../bin/ranges-test
[ 63%] Built target ranges-test
[ 64%] Building CXX object test/CMakeFiles/scan-test.dir/scan-test.cc.o
[ 66%] Building CXX object test/CMakeFiles/scan-test.dir/test-main.cc.o
[ 67%] Building CXX object test/CMakeFiles/scan-test.dir/gtest-extra.cc.o
[ 69%] Building CXX object test/CMakeFiles/scan-test.dir/util.cc.o
[ 70%] Building CXX object test/CMakeFiles/scan-test.dir/__/src/os.cc.o
[ 71%] Linking CXX executable ../bin/scan-test
[ 71%] Built target scan-test
[ 73%] Building CXX object test/CMakeFiles/std-test.dir/std-test.cc.o
[ 74%] Linking CXX executable ../bin/std-test
[ 74%] Built target std-test
[ 76%] Building CXX object test/CMakeFiles/unicode-test.dir/unicode-test.cc.o
[ 77%] Building CXX object test/CMakeFiles/unicode-test.dir/test-main.cc.o
[ 78%] Building CXX object test/CMakeFiles/unicode-test.dir/gtest-extra.cc.o
[ 80%] Building CXX object test/CMakeFiles/unicode-test.dir/util.cc.o
[ 81%] Building CXX object test/CMakeFiles/unicode-test.dir/__/src/os.cc.o
[ 83%] Linking CXX executable ../bin/unicode-test
[ 83%] Built target unicode-test
[ 84%] Building CXX object test/CMakeFiles/xchar-test.dir/xchar-test.cc.o
[ 85%] Linking CXX executable ../bin/xchar-test
[ 85%] Built target xchar-test
[ 87%] Building CXX object test/CMakeFiles/enforce-checks-test.dir/enforce-checks-test.cc.o
[ 88%] Linking CXX executable ../bin/enforce-checks-test
[ 88%] Built target enforce-checks-test
[ 90%] Building CXX object test/CMakeFiles/posix-mock-test.dir/posix-mock-test.cc.o
[ 91%] Building CXX object test/CMakeFiles/posix-mock-test.dir/__/src/format.cc.o
[ 92%] Building CXX object test/CMakeFiles/posix-mock-test.dir/test-main.cc.o
[ 94%] Building CXX object test/CMakeFiles/posix-mock-test.dir/gtest-extra.cc.o
[ 95%] Building CXX object test/CMakeFiles/posix-mock-test.dir/util.cc.o
[ 97%] Linking CXX executable ../bin/posix-mock-test
[ 97%] Built target posix-mock-test
[ 98%] Building CXX object test/CMakeFiles/os-test.dir/os-test.cc.o
[100%] Linking CXX executable ../bin/os-test
[100%] Built target os-test
Are you sure there isn't something funky with your custom gcc install or with gcc 13.2?
Here's a dockerfile running ubuntu 18, installing gcc13.1, and cloning the latest fmtlib.
It builds fmtlib successfully and runs the fmtlib tests succesfully.
Seems unlikely (but not impossible) much has changed regarding these __builtin_isfinite
functions from gcc 13.1 -> 13.2. Something about your gcc build not having the right include dirs maybe?
# syntax=docker/dockerfile:1
FROM ubuntu:18.04
RUN apt-get update
RUN apt-get -y install wget make software-properties-common git
RUN add-apt-repository ppa:ubuntu-toolchain-r/test
RUN apt-get -y upgrade
RUN apt-get -y install g++-13
RUN wget -O - https://github.com/Kitware/CMake/releases/download/v3.29.2/cmake-3.29.2-linux-x86_64.sh > cmake_install_script.sh
RUN chmod u+x cmake_install_script.sh
RUN ./cmake_install_script.sh --skip-license
WORKDIR /app
RUN git clone https://github.com/fmtlib/fmt.git fmt
RUN mkdir -p build
CMD cmake -S fmt -B build -DCMAKE_CXX_COMPILER=g++-13 && cmake --build build && ctest --test-dir build
Thank you for reply !
I'm still investigating why it's not working on my machine, I even tested with g++-12.2
and it builds fine but not with g++-13.2
:
gcc-12-env mycmake ..
-- CMake version: 3.29.3
-- The CXX compiler identification is GNU 12.2.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /home/mingo/local/gcc-12/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- {fmt} version: 10.2.2
-- Build type: Release
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE
-- Looking for strptime
-- Looking for strptime - found
-- FMT_PEDANTIC: OFF
-- Configuring done (1.3s)
-- Generating done (0.0s)
-- Build files have been written to: /tmp/fmtlib/fmt/build-12
mingo@mingo-X550VX:/tmp/fmtlib/fmt/build-12$ gcc-12-env make
[ 1%] Building CXX object CMakeFiles/fmt.dir/src/format.cc.o
[ 2%] Building CXX object CMakeFiles/fmt.dir/src/os.cc.o
[ 4%] Linking CXX static library libfmt.a
[ 4%] Built target fmt
[ 5%] Building CXX object test/gtest/CMakeFiles/gtest.dir/gmock-gtest-all.cc.o
[ 7%] Linking CXX static library libgtest.a
[ 7%] Built target gtest
[ 8%] Building CXX object test/CMakeFiles/test-main.dir/test-main.cc.o
[ 9%] Building CXX object test/CMakeFiles/test-main.dir/gtest-extra.cc.o
[ 11%] Building CXX object test/CMakeFiles/test-main.dir/util.cc.o
[ 12%] Linking CXX static library libtest-main.a
[ 12%] Built target test-main
[ 14%] Building CXX object test/CMakeFiles/args-test.dir/args-test.cc.o
[ 15%] Linking CXX executable ../bin/args-test
[ 15%] Built target args-test
[ 16%] Building CXX object test/CMakeFiles/base-test.dir/base-test.cc.o
[ 18%] Linking CXX executable ../bin/base-test
[ 18%] Built target base-test
[ 19%] Building CXX object test/CMakeFiles/assert-test.dir/assert-test.cc.o
[ 21%] Linking CXX executable ../bin/assert-test
[ 21%] Built target assert-test
[ 22%] Building CXX object test/CMakeFiles/chrono-test.dir/chrono-test.cc.o
[ 23%] Linking CXX executable ../bin/chrono-test
[ 23%] Built target chrono-test
[ 25%] Building CXX object test/CMakeFiles/color-test.dir/color-test.cc.o
[ 26%] Linking CXX executable ../bin/color-test
[ 26%] Built target color-test
[ 28%] Building CXX object test/CMakeFiles/gtest-extra-test.dir/gtest-extra-test.cc.o
[ 29%] Linking CXX executable ../bin/gtest-extra-test
[ 29%] Built target gtest-extra-test
[ 30%] Building CXX object test/CMakeFiles/format-test.dir/format-test.cc.o
[ 32%] Linking CXX executable ../bin/format-test
[ 32%] Built target format-test
[ 33%] Building CXX object test/CMakeFiles/format-impl-test.dir/format-impl-test.cc.o
[ 35%] Building CXX object test/CMakeFiles/format-impl-test.dir/header-only-test.cc.o
[ 36%] Building CXX object test/CMakeFiles/format-impl-test.dir/test-main.cc.o
[ 38%] Building CXX object test/CMakeFiles/format-impl-test.dir/gtest-extra.cc.o
[ 39%] Building CXX object test/CMakeFiles/format-impl-test.dir/util.cc.o
[ 40%] Building CXX object test/CMakeFiles/format-impl-test.dir/__/src/os.cc.o
[ 42%] Linking CXX executable ../bin/format-impl-test
[ 42%] Built target format-impl-test
[ 43%] Building CXX object test/CMakeFiles/ostream-test.dir/ostream-test.cc.o
...
Just in case someone can help I'm attaching the preprocessed files from clang-17
, g++-9.4
, g++-12.2
and g++-13.2
that is the problematic one.
If I manually add -DCMAKE_CXX_FLAGS="-D_GLIBCXX_USE_C99_MATH=1
then it builds with g++-13.2
:
gcc-13-env mycmake -DCMAKE_CXX_FLAGS="-D_GLIBCXX_USE_C99_MATH=1" ..
-- CMake version: 3.29.3
-- The CXX compiler identification is GNU 13.2.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /home/mingo/local/gcc-13/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- {fmt} version: 10.2.2
-- Build type: Release
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE
-- Looking for strptime
-- Looking for strptime - found
-- FMT_PEDANTIC: OFF
-- Configuring done (1.2s)
-- Generating done (0.0s)
-- Build files have been written to: /tmp/fmtlib/fmt/build2
mingo@mingo-X550VX:/tmp/fmtlib/fmt/build2$ make
[ 1%] Building CXX object CMakeFiles/fmt.dir/src/format.cc.o
[ 2%] Building CXX object CMakeFiles/fmt.dir/src/os.cc.o
[ 4%] Linking CXX static library libfmt.a
[ 4%] Built target fmt
[ 5%] Building CXX object test/gtest/CMakeFiles/gtest.dir/gmock-gtest-all.cc.o
[ 7%] Linking CXX static library libgtest.a
[ 7%] Built target gtest
[ 8%] Building CXX object test/CMakeFiles/test-main.dir/test-main.cc.o
[ 9%] Building CXX object test/CMakeFiles/test-main.dir/gtest-extra.cc.o
[ 11%] Building CXX object test/CMakeFiles/test-main.dir/util.cc.o
[ 12%] Linking CXX static library libtest-main.a
[ 12%] Built target test-main
[ 14%] Building CXX object test/CMakeFiles/args-test.dir/args-test.cc.o
Comparing the two compilers (g++12.2
and g++-13.2
) I've noticed that the significant difference is this one:
/home/mingo/local/gcc-12/include/c++/12.2.0/x86_64-pc-linux-gnu/bits/c++config.h:1774:#define _GLIBCXX_USE_C99_MATH_TR1 1
/home/mingo/local/gcc-13/include/c++/13.2.0/x86_64-pc-linux-gnu/bits/c++config.h:1807:/* #undef _GLIBCXX_USE_C99_MATH_TR1 */
I wasn't able to repro this on gcc 13.2 on godbolt: https://www.godbolt.org/z/hnfEx1asv. Most likely the issue is with your configuration of gcc that causes incorrect definition of isfinite
as a macro. {fmt} requires std::isfinite
to work.
Thank you again for all help !
With a fresh clone of this repository: