[llvm-dev] Extra space in LLVM_DEFINITIONS causes CMake 3.1 to fail

Mueller-Roemer, Johannes Sebastian via llvm-dev llvm-dev at lists.llvm.org
Wed Oct 7 23:42:34 PDT 2015


I share the oppinion that a newer CMake version would be better. In any case, D13432 resolved the issue. As I mentioned in the comments on it, LLVM_DEFINITIONS can also contain non-definition flags, so for now I switched my code to

separate_arguments(LLVM_DEFINITIONS_LIST UNIX_COMMAND ${LLVM_DEFINITIONS})
set(LLVM_DEFINITIONS)
set(LLVM_FLAGS)
foreach(DEF ${LLVM_DEFINITIONS_LIST})
                string(REGEX MATCH "^[-/]D" DEF_MATCH ${DEF})
                if(DEF_MATCH)
                               string(SUBSTRING ${DEF} 2 -1 DEF)
                               list(APPEND LLVM_DEFINITIONS ${DEF})
                else()
                               list(APPEND LLVM_FLAGS ${DEF})
                endif()
endforeach()

[…]

target_compile_definitions(
                ${PROJECT_NAME}
                PUBLIC
                ${LLVM_DEFINITIONS}
)
target_compile_options(
                ${PROJECT_NAME}
                PUBLIC
                ${LLVM_FLAGS}
)

This solves both the issue of any extraneous flags that are in there as well as separating everything properly into separate list entries (each list entry in compile definitions is either prefixed with –D or /D depending on compiler unless it begins with –D or /D and the remainder is copied verbatim, which explains the breakage if an entry starts with a space).

--
Johannes S. Mueller-Roemer, MSc
Wiss. Mitarbeiter - Interactive Engineering Technologies (IET)

Fraunhofer-Institut für Graphische Datenverarbeitung IGD
Fraunhoferstr. 5  |  64283 Darmstadt  |  Germany
Tel +49 6151 155-606  |  Fax +49 6151 155-139
johannes.mueller-roemer at igd.fraunhofer.de  |  www.igd.fraunhofer.de

From: cbieneman at apple.com [mailto:cbieneman at apple.com] On Behalf Of Chris Bieneman
Sent: Wednesday, October 07, 2015 18:29
To: Mueller-Roemer, Johannes Sebastian
Cc: llvm-dev at lists.llvm.org
Subject: Re: [llvm-dev] Extra space in LLVM_DEFINITIONS causes CMake 3.1 to fail

I don’t think there is any reason why we would want to push people to any particular version of CMake. Personally I’d love to make CMake 3.2 our minimum version, but at the moment our minimum required (and supported) version of CMake is 2.8.12.2.

It looks to me like the issue you’re reporting was an unintended side effect of r248884. We will of course welcome patches to resolve the issue.

-Chris


On Oct 6, 2015, at 12:50 AM, Mueller-Roemer, Johannes Sebastian via llvm-dev <llvm-dev at lists.llvm.org<mailto:llvm-dev at lists.llvm.org>> wrote:

Correction, I was accidentally testing with an old version for my CMake 3.2+ tests. They fail just the same with the current version.

--
Johannes S. Mueller-Roemer, MSc
Wiss. Mitarbeiter - Interactive Engineering Technologies (IET)

Fraunhofer-Institut für Graphische Datenverarbeitung IGD
Fraunhoferstr. 5  |  64283 Darmstadt  |  Germany
Tel +49 6151 155-606  |  Fax +49 6151 155-139
johannes.mueller-roemer at igd.fraunhofer.de<mailto:johannes.mueller-roemer at igd.fraunhofer.de>  |  www.igd.fraunhofer.de<http://www.igd.fraunhofer.de/>

From: llvm-dev [mailto:llvm-dev-bounces at lists.llvm.org] On Behalf Of Mueller-Roemer, Johannes Sebastian via llvm-dev
Sent: Tuesday, October 06, 2015 09:36
To: llvm-dev at lists.llvm.org<mailto:llvm-dev at lists.llvm.org>
Subject: [llvm-dev] Extra space in LLVM_DEFINITIONS causes CMake 3.1 to fail

LLVM_DEFINITIONS used to be defined as

set(LLVM_DEFINITIONS "-D__STDC_LIMIT_MACROS" "-D__STDC_CONSTANT_MACROS")

Now it is defined as

set(LLVM_DEFINITIONS " -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS")

(note that it is no longer a cmake list but a string, and the string contains a leading space!)

This causes CMake 3.1 to emit

g++  -D -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS […]

when LLVM_DEFINITIONS is used via target_compile_definitions. Which, unsurprisingly, fails.

Although this issue is fixed in current CMake versions (3.2+), do we really want to require these versions just to have LLVM_DEFINITIONS defined as a string instead of a list? A simple check if LLVM_DEFINITIONS is empty in add_llvm_definitions might solve the issue.

--
Johannes S. Mueller-Roemer, MSc
Wiss. Mitarbeiter - Interactive Engineering Technologies (IET)

Fraunhofer-Institut für Graphische Datenverarbeitung IGD
Fraunhoferstr. 5  |  64283 Darmstadt  |  Germany
Tel +49 6151 155-606  |  Fax +49 6151 155-139
johannes.mueller-roemer at igd.fraunhofer.de<mailto:johannes.mueller-roemer at igd.fraunhofer.de>  |  www.igd.fraunhofer.de<http://www.igd.fraunhofer.de/>

_______________________________________________
LLVM Developers mailing list
llvm-dev at lists.llvm.org<mailto:llvm-dev at lists.llvm.org>
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20151008/6949adb5/attachment-0001.html>


More information about the llvm-dev mailing list