From: Nikolai Merinov <n.merinov@inango-systems.com>
To: "Bach, Pascal" <pascal.bach@siemens.com>
Cc: openembedded-core@lists.openembedded.org
Subject: Re: [PATCH] cmake.bbclass: pass mandatory compiler flags through CMAKE_<LANG>_COMPILER_ARG1
Date: Wed, 15 May 2019 12:19:39 +0300 (IDT) [thread overview]
Message-ID: <151165355.247295.1557911979234.JavaMail.zimbra@inango-systems.com> (raw)
In-Reply-To: <355BE46A91031048906B695426A8D8E62EA61B2F@DENBGAT9EL2MSX.ww902.siemens.net>
Hi Pascal,
I very often saw in proprietary projects the following code
> set(CMAKE_C_FLAGS "list of flags that developer want to add")
where package developer overwrite default CMAKE_C_FLAGS or CMAKE_CXX_FLAGS variables.
There are several examples from github:
https://github.com/psi4/psi4archive/blob/1.0.x/cmake/compilers/CFlags.cmake
https://github.com/eloraiby/dna-cross-platform/blob/master/src/DNA/native/CMakeLists.txt
https://github.com/JWZepf/bfsdk/blob/master/cmake/CMakeFlags_Native_GCC.txt
https://github.com/redcurrant/metacd-http/blob/master/CMakeLists.txt
https://github.com/HabanaAI/hl-thunk/blob/master/CMakeLists.txt
https://github.com/chrisz/librain/blob/master/CMakeLists.txt
https://github.com/chrishoen/Dev_RisLibLx/blob/master/CMakeLists.txt
https://github.com/Farigh/yasc/blob/master/config/GccCompileOptions.cmake
I suggest my changes in order to reduce risk of failure with such CMake projects.
In same time suggested changes will logically tie this flags to the compiler in same manner as it tied in the CC and CXX variables.
Regards,
Nikolai
----- Original Message -----
From: "Bach, Pascal" <pascal.bach@siemens.com>
To: "n merinov" <n.merinov@inango-systems.com>, openembedded-core@lists.openembedded.org
Sent: Tuesday, May 14, 2019 8:49:57 PM
Subject: RE: [OE-core] [PATCH] cmake.bbclass: pass mandatory compiler flags through CMAKE_<LANG>_COMPILER_ARG1
Hi Nikolai,
I think this would work. However I would like to understand the problem you are trying to solve with this.
Do you have an example of a recipe this would be needed?
Pascal
> -----Original Message-----
> From: openembedded-core-bounces@lists.openembedded.org
> <openembedded-core-bounces@lists.openembedded.org> On Behalf Of
> Nikolai Merinov
> Sent: Dienstag, 14. Mai 2019 17:04
> To: openembedded-core@lists.openembedded.org
> Subject: [OE-core] [PATCH] cmake.bbclass: pass mandatory compiler flags
> through CMAKE_<LANG>_COMPILER_ARG1
>
> The CMake takes mandatory compiler arguments from the following
> variables:
> - CMAKE_SYSROOT -- path to sysroot that should be passed to compiler.
> - CMAKE_<LANG>_COMPILER_TARGET -- target architecture, used for
> compilers
> that supports several targets through command line options.
> e.g. "clang --target ${CMAKE_C_COMPILER_TARGET}".
> - CMAKE_<LANG>_COMPILER_EXTERNAL_TOOLCHAIN -- path to external
> toolchain,
> used for compilers that support build with external toolchain.
> e.g. "clang --gcc-toolchain
> ${CMAKE_C_COMPILER_EXTERNAL_TOOLCHAIN}".
> - CMAKE_<LANG>_COMPILER_ARG1 -- other mandatory arguments to a
> compiler
> command.
>
> CMAKE_<LANG>_COMPILER_ARG1 is the most suitable variable to pass
> mandatory arguments, that belongs to CC variable with other build systems,
> to a compiler.
>
> Additionally usage of CMAKE_<LANG>_COMPILER_ARG1 instead of
> CMAKE_<LANG>_FLAGS reduce the risk that a variable can be overrided by
> CMakeLists.txt files.
> ---
> meta/classes/cmake.bbclass | 21 +++++++++++++++------
> 1 file changed, 15 insertions(+), 6 deletions(-)
>
> diff --git a/meta/classes/cmake.bbclass b/meta/classes/cmake.bbclass index
> d3f0d70847..4da4c00a09 100644
> --- a/meta/classes/cmake.bbclass
> +++ b/meta/classes/cmake.bbclass
> @@ -27,27 +27,33 @@ python() {
> cc_list = d.getVar('CC').split()
> if cc_list[0] == 'ccache':
> d.setVar('OECMAKE_C_COMPILER', '%s %s' % (cc_list[0], cc_list[1]))
> + cc_arg1 = ' '.join(cc_list[2:])
> else:
> d.setVar('OECMAKE_C_COMPILER', cc_list[0])
> + cc_arg1 = ' '.join(cc_list[1:])
> + if not d.getVar('OECMAKE_C_COMPILER_ARG1'):
> + d.setVar('OECMAKE_C_COMPILER_ARG1', cc_arg1)
>
> if not d.getVar('OECMAKE_CXX_COMPILER'):
> cxx_list = d.getVar('CXX').split()
> if cxx_list[0] == 'ccache':
> d.setVar('OECMAKE_CXX_COMPILER', '%s %s' % (cxx_list[0],
> cxx_list[1]))
> + cxx_arg1 = ' '.join(cxx_list[2:])
> else:
> d.setVar('OECMAKE_CXX_COMPILER', cxx_list[0])
> + cxx_arg1 = ' '.join(cxx_list[1:])
> + if not d.getVar('OECMAKE_CXX_COMPILER_ARG1'):
> + d.setVar('OECMAKE_CXX_COMPILER_ARG1', cxx_arg1)
> }
> OECMAKE_AR ?= "${AR}"
>
> # Compiler flags
> -OECMAKE_C_FLAGS ?= "${HOST_CC_ARCH} ${TOOLCHAIN_OPTIONS}
> ${CFLAGS}"
> -OECMAKE_CXX_FLAGS ?= "${HOST_CC_ARCH} ${TOOLCHAIN_OPTIONS}
> ${CXXFLAGS}"
> +OECMAKE_C_FLAGS ?= "${CFLAGS}"
> +OECMAKE_CXX_FLAGS ?= "${CXXFLAGS}"
> OECMAKE_C_FLAGS_RELEASE ?= "-DNDEBUG"
> OECMAKE_CXX_FLAGS_RELEASE ?= "-DNDEBUG"
> -OECMAKE_C_LINK_FLAGS ?= "${HOST_CC_ARCH} ${TOOLCHAIN_OPTIONS}
> ${CPPFLAGS} ${LDFLAGS}"
> -OECMAKE_CXX_LINK_FLAGS ?= "${HOST_CC_ARCH}
> ${TOOLCHAIN_OPTIONS} ${CXXFLAGS} ${LDFLAGS}"
> -CXXFLAGS += "${HOST_CC_ARCH} ${TOOLCHAIN_OPTIONS}"
> -CFLAGS += "${HOST_CC_ARCH} ${TOOLCHAIN_OPTIONS}"
> +OECMAKE_C_LINK_FLAGS ?= "${CPPFLAGS} ${LDFLAGS}"
> +OECMAKE_CXX_LINK_FLAGS ?= "${CXXFLAGS} ${LDFLAGS}"
>
> OECMAKE_RPATH ?= ""
> OECMAKE_PERLNATIVE_DIR ??= ""
> @@ -85,8 +91,11 @@ $cmake_crosscompiling set( CMAKE_SYSTEM_NAME
> `echo ${TARGET_OS} | sed -e 's/^./\u&/' -e 's/^\(Linux\).*/\1/'` ) set(
> CMAKE_SYSTEM_PROCESSOR
> ${@map_target_arch_to_uname_arch(d.getVar('TARGET_ARCH'))} ) set(
> CMAKE_C_COMPILER ${OECMAKE_C_COMPILER} )
> +set( CMAKE_C_COMPILER_ARG1 "${OECMAKE_C_COMPILER_ARG1}" )
> set( CMAKE_CXX_COMPILER ${OECMAKE_CXX_COMPILER} )
> +set( CMAKE_CXX_COMPILER_ARG1 "${OECMAKE_CXX_COMPILER_ARG1}"
> )
> set( CMAKE_ASM_COMPILER ${OECMAKE_C_COMPILER} )
> +set( CMAKE_ASM_COMPILER_ARG1 "${OECMAKE_C_COMPILER_ARG1}" )
> set( CMAKE_AR ${OECMAKE_AR} CACHE FILEPATH "Archiver" ) set(
> CMAKE_C_FLAGS "${OECMAKE_C_FLAGS}" CACHE STRING "CFLAGS" ) set(
> CMAKE_CXX_FLAGS "${OECMAKE_CXX_FLAGS}" CACHE STRING "CXXFLAGS"
> )
> --
> 2.17.1
>
> --
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core@lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core
next prev parent reply other threads:[~2019-05-15 9:19 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-14 15:04 [PATCH] cmake.bbclass: pass mandatory compiler flags through CMAKE_<LANG>_COMPILER_ARG1 Nikolai Merinov
2019-05-14 15:49 ` Bach, Pascal
2019-05-15 9:19 ` Nikolai Merinov [this message]
2019-05-20 20:41 ` Khem Raj
2019-06-20 14:16 ` [PATCHv2] " Nikolai Merinov
2019-06-24 10:24 ` [PATCHv3] " Nikolai Merinov
2019-06-25 8:03 ` Richard Purdie
2019-06-25 12:39 ` Nikolai Merinov
2019-06-20 14:30 ` ✗ patchtest: failure for cmake.bbclass: pass mandatory compiler flags through CMAKE_<LANG>_COMPILER_ARG1 (rev2) Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=151165355.247295.1557911979234.JavaMail.zimbra@inango-systems.com \
--to=n.merinov@inango-systems.com \
--cc=openembedded-core@lists.openembedded.org \
--cc=pascal.bach@siemens.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox