Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 614844 - sys-devel/llvm: llvm-config --assertion-mode is wrong (was: >=sys-devel/clang-4.0.0 always build without NDEBUG)
Summary: sys-devel/llvm: llvm-config --assertion-mode is wrong (was: >=sys-devel/clang...
Status: RESOLVED FIXED
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: Current packages (show other bugs)
Hardware: All Linux
: Normal normal (vote)
Assignee: LLVM support project
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2017-04-06 12:32 UTC by Johannes Hirte
Modified: 2023-09-23 09:22 UTC (History)
3 users (show)

See Also:
Package list:
Runtime testing required: ---


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Johannes Hirte 2017-04-06 12:32:55 UTC
Since sys-devel/clang-4.0.0 the build doesn't define NDEBUG anymore. Despite -DCMAKE_BUILD_TYPE=RelWithDebInfo is set, clang is build with assertions. This breaks the cpp-parser from kdevelop:

https://bugs.kde.org/show_bug.cgi?id=376149

Not tested, but sys-devel/llvm could be affected too.
Comment 2 Michał Górny archtester Gentoo Infrastructure gentoo-dev Security 2017-04-08 07:59:47 UTC
I'll need to check whether LLVM_ENABLE_ASSERTIONS is propagated correctly.
Comment 3 Michał Górny archtester Gentoo Infrastructure gentoo-dev Security 2017-04-14 13:48:32 UTC
$ grep LLVM_ENABLE_ASSERT CMakeCache.txt 
LLVM_ENABLE_ASSERTIONS:BOOL=ON

So I suppose it doesn't get the value from LLVMConfig. I'm going to check 5 as well, and commit a fix in a few minutes.
Comment 4 Michał Górny archtester Gentoo Infrastructure gentoo-dev Security 2017-04-14 14:52:01 UTC
commit 9e3db5e62f63c3c169e9c60f5ac5acc43ae87160
Author:     Michał Górny <mgorny@gentoo.org>
AuthorDate: Fri Apr 14 16:31:14 2017
Commit:     Michał Górny <mgorny@gentoo.org>
CommitDate: Fri Apr 14 16:51:21 2017

    sys-devel/clang: Fix respecting USE=debug for asserts, #614844
Comment 5 Michał Górny archtester Gentoo Infrastructure gentoo-dev Security 2017-04-14 22:01:59 UTC
Actually, the issue seems to be deeper:

$ llvm-config --assertion-mode
ON

It seems that the logic is based on state of NDEBUG in llvm-config, which makes me worry the cflag magic around cmake and llvm fails at some point.
Comment 6 Johannes Hirte 2017-04-14 22:31:00 UTC
$ llvm-config --assertion-mode
OFF

but when building llvm or clang, NDEBUG is not set:

[1/1599] /usr/lib64/distcc/bin/x86_64-pc-linux-gnu-g++ -m32 -DLLVM_BUILD_GLOBAL_ISEL -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -Iutils/TableGen -I/var/tmp/portage/sys-devel/llvm-9999/work/llvm-9999/utils/TableGen -Iinclude -I/var/tmp/portage/sys-devel/llvm-9999/work/llvm-9999/include  -O2 -march=bdver4 -mmmx -mno-3dnow -msse -msse2 -msse3 -mssse3 -msse4a -mcx16 -msahf -mmovbe -maes -mno-sha -mpclmul -mpopcnt -mabm -mlwp -mfma -mfma4 -mxop -mbmi -mbmi2 -mtbm -mavx -mavx2 -msse4.2 -msse4.1 -mlzcnt -mno-rtm -mno-hle -mrdrnd -mf16c -mfsgsbase -mno-rdseed -mprfchw -mno-adx -mfxsr -mxsave -mxsaveopt -mno-avx512f -mno-avx512er -mno-avx512cd -mno-avx512pf -mno-prefetchwt1 -mno-clflushopt -mno-xsavec -mno-xsaves -mno-avx512dq -mno-avx512bw -mno-avx512vl -mno-avx512ifma -mno-avx512vbmi -mno-clwb -mmwaitx -mno-clzero -mno-pku --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=1024 -mtune=bdver4 -ftree-vectorize -fvect-cost-model -pipe -fPIC -fvisibility-inlines-hidden -Werror=date-time -std=c++11 -Wall -W -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wno-maybe-uninitialized -Wdelete-non-virtual-dtor -Wno-comment -ffunction-sections -fdata-sections -MD -MT utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/AsmWriterInst.cpp.o -MF utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/AsmWriterInst.cpp.o.d -o utils/TableGen/CMakeFiles/obj.llvm-tblgen.dir/AsmWriterInst.cpp.o -c /var/tmp/portage/sys-devel/llvm-9999/work/llvm-9999/utils/TableGen/AsmWriterInst.cpp

[1/858] /usr/lib64/distcc/bin/x86_64-pc-linux-gnu-g++ -m32 -DCLANG_ENABLE_ARCMT -DCLANG_ENABLE_OBJC_REWRITER -DCLANG_ENABLE_STATIC_ANALYZER -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -Iutils/TableGen -I/var/tmp/portage/sys-devel/clang-9999/work/x/y/clang-9999/utils/TableGen -I/var/tmp/portage/sys-devel/clang-9999/work/x/y/clang-9999/include -Iinclude -I/usr/lib64/llvm/5/include  -O2 -march=bdver4 -mmmx -mno-3dnow -msse -msse2 -msse3 -mssse3 -msse4a -mcx16 -msahf -mmovbe -maes -mno-sha -mpclmul -mpopcnt -mabm -mlwp -mfma -mfma4 -mxop -mbmi -mbmi2 -mtbm -mavx -mavx2 -msse4.2 -msse4.1 -mlzcnt -mno-rtm -mno-hle -mrdrnd -mf16c -mfsgsbase -mno-rdseed -mprfchw -mno-adx -mfxsr -mxsave -mxsaveopt -mno-avx512f -mno-avx512er -mno-avx512cd -mno-avx512pf -mno-prefetchwt1 -mno-clflushopt -mno-xsavec -mno-xsaves -mno-avx512dq -mno-avx512bw -mno-avx512vl -mno-avx512ifma -mno-avx512vbmi -mno-clwb -mmwaitx -mno-clzero -mno-pku --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=1024 -mtune=bdver4 -ftree-vectorize -fvect-cost-model -pipe -fPIC -fvisibility-inlines-hidden -Werror=date-time -std=c++11 -Wall -W -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -Wdelete-non-virtual-dtor -Wno-comment -ffunction-sections -fdata-sections -fno-common -Woverloaded-virtual -fno-strict-aliasing -pedantic -Wno-long-long -MD -MT utils/TableGen/CMakeFiles/obj.clang-tblgen.dir/ClangCommentHTMLNamedCharacterReferenceEmitter.cpp.o -MF utils/TableGen/CMakeFiles/obj.clang-tblgen.dir/ClangCommentHTMLNamedCharacterReferenceEmitter.cpp.o.d -o utils/TableGen/CMakeFiles/obj.clang-tblgen.dir/ClangCommentHTMLNamedCharacterReferenceEmitter.cpp.o -c /var/tmp/portage/sys-devel/clang-9999/work/x/y/clang-9999/utils/TableGen/ClangCommentHTMLNamedCharacterReferenceEmitter.cpp

building llvm-3.9.1-r1, NDEBUG is set by the build-system:

[1/3151] /usr/lib64/distcc/bin/x86_64-pc-linux-gnu-g++ -m32 -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -Ilib/Support -I/var/tmp/portage/sys-devel/llvm-3.9.1/work/llvm-3.9.1.src/lib/Support -Iinclude -I/var/tmp/portage/sys-devel/llvm-3.9.1/work/llvm-3.9.1.src/include  -DNDEBUG -O2 -march=bdver4 -mmmx -mno-3dnow -msse -msse2 -msse3 -mssse3 -msse4a -mcx16 -msahf -mmovbe -maes -mno-sha -mpclmul -mpopcnt -mabm -mlwp -mfma -mfma4 -mxop -mbmi -mbmi2 -mtbm -mavx -mavx2 -msse4.2 -msse4.1 -mlzcnt -mno-rtm -mno-hle -mrdrnd -mf16c -mfsgsbase -mno-rdseed -mprfchw -mno-adx -mfxsr -mxsave -mxsaveopt -mno-avx512f -mno-avx512er -mno-avx512cd -mno-avx512pf -mno-prefetchwt1 -mno-clflushopt -mno-xsavec -mno-xsaves -mno-avx512dq -mno-avx512bw -mno-avx512vl -mno-avx512ifma -mno-avx512vbmi -mno-clwb -mmwaitx -mno-clzero -mno-pku --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=1024 -mtune=bdver4 -ftree-vectorize -fvect-cost-model -pipe -fPIC -fvisibility-inlines-hidden -Wall -W -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wno-maybe-uninitialized -Wdelete-non-virtual-dtor -Wno-comment -Werror=date-time -std=c++11 -ffunction-sections -fdata-sections -fPIC -MD -MT lib/Support/CMakeFiles/LLVMSupport.dir/ARMBuildAttrs.cpp.o -MF lib/Support/CMakeFiles/LLVMSupport.dir/ARMBuildAttrs.cpp.o.d -o lib/Support/CMakeFiles/LLVMSupport.dir/ARMBuildAttrs.cpp.o -c /var/tmp/portage/sys-devel/llvm-3.9.1/work/llvm-3.9.1.src/lib/Support/ARMBuildAttrs.cpp
Comment 7 Michał Górny archtester Gentoo Infrastructure gentoo-dev Security 2017-04-14 22:39:57 UTC
These two should be more correct.


commit 98f46d0de5bc6d9d608e3453c8e435d2e49e1a65
Author:     Michał Górny <mgorny@gentoo.org>
AuthorDate: Sat Apr 15 00:36:37 2017
Commit:     Michał Górny <mgorny@gentoo.org>
CommitDate: Sat Apr 15 00:38:54 2017

    sys-devel/clang: Fix passing -DNDEBUG to build, #614844

commit 4a072e71088b37888ae219b3aa0ae490938b9a5d
Author:     Michał Górny <mgorny@gentoo.org>
AuthorDate: Sat Apr 15 00:34:11 2017
Commit:     Michał Górny <mgorny@gentoo.org>
CommitDate: Sat Apr 15 00:38:53 2017

    sys-devel/llvm: Fix passing -DNDEBUG to build, #614844
Comment 8 Johannes Hirte 2017-04-15 13:28:55 UTC
works now, but I think the real root cause is in cmake-utils.eclass:

    # Wipe the default optimization flags out of CMake
    if [[ ${CMAKE_BUILD_TYPE} != Gentoo ]] && ! has "${EAPI}" 2 3 4 5; then
        cat >> ${common_config} <<- _EOF_ || die
            SET (CMAKE_ASM_FLAGS_${CMAKE_BUILD_TYPE^^} "" CACHE STRING "")
            SET (CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE^^} "" CACHE STRING "")
            SET (CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE^^} "" CACHE STRING "")
            SET (CMAKE_Fortran_FLAGS_${CMAKE_BUILD_TYPE^^} "" CACHE STRING "")
            SET (CMAKE_EXE_LINKER_FLAGS_${CMAKE_BUILD_TYPE^^} "" CACHE STRING "")
            SET (CMAKE_MODULE_LINKER_FLAGS_${CMAKE_BUILD_TYPE^^} "" CACHE STRING "")
            SET (CMAKE_SHARED_LINKER_FLAGS_${CMAKE_BUILD_TYPE^^} "" CACHE STRING "")
            SET (CMAKE_STATIC_LINKER_FLAGS_${CMAKE_BUILD_TYPE^^} "" CACHE STRING "")
        _EOF_
    fi


llvm/clang-ebuilds earlier than 4.0.0 are setting BUILD_TYPE to Gentoo, so the initial cache is not modified here. With version 4.0.0, BUILD_TYPE is set to RelWithDebInfo. This way, portage is modifying the defaults from llvm/clang with initial_cache settings:

initial cache for llvm-3.9.1-r1

SET (CMAKE_GENTOO_BUILD ON CACHE BOOL "Indicate Gentoo package build")
SET (LIB_SUFFIX 64 CACHE STRING "library path suffix" FORCE)
SET (CMAKE_INSTALL_LIBDIR lib64 CACHE PATH "Output directory for libraries")

initial cache for llvm-9999

SET (CMAKE_GENTOO_BUILD ON CACHE BOOL "Indicate Gentoo package build")
SET (LIB_SUFFIX 64 CACHE STRING "library path suffix" FORCE)
SET (CMAKE_INSTALL_LIBDIR lib64 CACHE PATH "Output directory for libraries")
SET (CMAKE_ASM_FLAGS_RELWITHDEBINFO "" CACHE STRING "")
SET (CMAKE_C_FLAGS_RELWITHDEBINFO "" CACHE STRING "")
SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO "" CACHE STRING "")
SET (CMAKE_Fortran_FLAGS_RELWITHDEBINFO "" CACHE STRING "")
SET (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "" CACHE STRING "")
SET (CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO "" CACHE STRING "")
SET (CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "" CACHE STRING "")
SET (CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO "" CACHE STRING "")

I don't know if EAPI 6 is omitted intentionally in the check above. If not, it should just added there, and the llvm-/clang-ebuilds should be fine without further modifications.