Building llvm and clang with mixed assertion modes

Hi,

I’d like to build llvm with assertions enabled, but build clang with assertions disabled. In other words, I’d like lvm in Release+Asserts mode, but clang in Release mode.

Is it possible to do this with one top level configure/make command? If not, any idea how much work would it be to add this feature to llvm? I’m not very familiar with llvm’s build system.

Thanks!

-David

– Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation

"David Peixotto" <dpeixott@codeaurora.org> writes:

I'd like to build llvm with assertions enabled, but build clang with
assertions disabled. In other words, I'd like lvm in Release+Asserts mode,
but clang in Release mode.

Is it possible to do this with one top level configure/make command? If not,
any idea how much work would it be to add this feature to llvm? I'm not very
familiar with llvm's build system.

Dunno about the configure&make build, but with the cmake build you can
do that by building clang standalone (build and install LLVM without
clang, then build clang using LLVM as an external library,
enabling/disabling assertions as you like).

You can also modify clang/CMakeLists.txt by changing

add_definitions( -D_GNU_SOURCE )

to

add_definitions( -D_GNU_SOURCE -U_DEBUG -DNDEBUG )

which disables assertions for clang. Then build LLVM+Clang using the
option for enabling assertions:

mkdir mybuilddir && cd mybuilddir
cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=ON path/to/llvm/src

(In the cmake build, assertions are disabled by default in Release mode)

Thanks for the suggestions Oscar! I have a few comments below.

"David Peixotto" <dpeixott@codeaurora.org> writes:

> I'd like to build llvm with assertions enabled, but build clang with
> assertions disabled. In other words, I'd like lvm in Release+Asserts
> mode, but clang in Release mode.
>
> Is it possible to do this with one top level configure/make command?
> If not, any idea how much work would it be to add this feature to
> llvm? I'm not very familiar with llvm's build system.

Dunno about the configure&make build, but with the cmake build you can do
that by building clang standalone (build and install LLVM without clang,

then

build clang using LLVM as an external library, enabling/disabling

assertions as

you like).

I'd prefer to have clang and llvm build together. I have a number of scripts
that assume llvm and clang are checked out together in the same source tree
and I don't think I can modify them easily to have separate build/install
steps.

You can also modify clang/CMakeLists.txt by changing

add_definitions( -D_GNU_SOURCE )

to

add_definitions( -D_GNU_SOURCE -U_DEBUG -DNDEBUG )

This looks like it will permanently disable assertions for clang. I'd prefer
a solution that can be controlled by a flag.

which disables assertions for clang. Then build LLVM+Clang using the

option

for enabling assertions:

mkdir mybuilddir && cd mybuilddir
cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=ON
path/to/llvm/src

(In the cmake build, assertions are disabled by default in Release mode)

I guess what I'd like to see is something like this:

    cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=ON
-DCLANG_ENABLE_ASSERTIONS=OFF

It sounds like this is not possible with the current build system. Would it
be possible to add something like this? I'm worried that the linking could
be a bit difficult because it would need to link clang objects in the
Release directory with llvm objects in the Release+Asserts directory.

Thanks again for your input.