From: Nikolai Merinov <n.merinov@inango-systems.com>
To: Khem Raj <raj.khem@gmail.com>
Cc: openembedded-core <openembedded-core@lists.openembedded.org>
Subject: [PATCHv2] cmake.bbclass: pass mandatory compiler flags through CMAKE_<LANG>_COMPILER_ARG1
Date: Thu, 20 Jun 2019 17:16:07 +0300 (IDT) [thread overview]
Message-ID: <1186752783.2036656.1561040167582.JavaMail.zimbra@inango-systems.com> (raw)
In-Reply-To: <75cc94f6-8e4c-68ff-3c65-a2b8f98e8842@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 4751 bytes --]
Hi,
Updated patch for the current "master" branch is attached.
> have you also tried building SDK and see if these changes are reflected in SDK as well ?
I checked that the changes reflected in the Extensible SDK for the "core-image-sato" image of the poky.
Regards,
Nikolai
----- Original Message -----
From: "Khem Raj" <raj.khem@gmail.com>
To: "n merinov" <n.merinov@inango-systems.com>, "openembedded-core" <openembedded-core@lists.openembedded.org>
Sent: Tuesday, May 21, 2019 1:41:46 AM
Subject: Re: [OE-core] [PATCH] cmake.bbclass: pass mandatory compiler flags through CMAKE_<LANG>_COMPILER_ARG1
On 5/14/19 8:04 AM, Nikolai Merinov wrote:
> 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" )
>
these changes look ok, have you also tried building SDK and see if these
changes are reflected in SDK as well ?
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-cmake.bbclass-pass-mandatory-compiler-flags-through-.patch --]
[-- Type: text/x-patch; name=0001-cmake.bbclass-pass-mandatory-compiler-flags-through-.patch, Size: 4086 bytes --]
From 07dcf522cb4cadf211e76cd66f1897f6e22ca6e1 Mon Sep 17 00:00:00 2001
From: Nikolai Merinov <n.merinov@inango-systems.com>
Date: Thu, 20 Jun 2019 14:15:14 +0500
Subject: [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 | 19 +++++++++++++++----
1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/meta/classes/cmake.bbclass b/meta/classes/cmake.bbclass
index f80a7e2f1d..034735bc13 100644
--- a/meta/classes/cmake.bbclass
+++ b/meta/classes/cmake.bbclass
@@ -28,26 +28,34 @@ python() {
if cc_list[0] == 'ccache':
d.setVar('OECMAKE_C_COMPILER_LAUNCHER', cc_list[0])
d.setVar('OECMAKE_C_COMPILER', 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_LAUNCHER', cxx_list[0])
d.setVar('OECMAKE_CXX_COMPILER', 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}"
+OECMAKE_C_LINK_FLAGS ?= "${CPPFLAGS} ${LDFLAGS}"
+OECMAKE_CXX_LINK_FLAGS ?= "${CPPFLAGS} ${LDFLAGS}"
CXXFLAGS += "${HOST_CC_ARCH} ${TOOLCHAIN_OPTIONS}"
CFLAGS += "${HOST_CC_ARCH} ${TOOLCHAIN_OPTIONS}"
@@ -90,10 +98,13 @@ $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_C_COMPILER_LAUNCHER ${OECMAKE_C_COMPILER_LAUNCHER} )
set( CMAKE_CXX_COMPILER_LAUNCHER ${OECMAKE_CXX_COMPILER_LAUNCHER} )
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
next prev parent reply other threads:[~2019-06-20 14:25 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
2019-05-20 20:41 ` Khem Raj
2019-06-20 14:16 ` Nikolai Merinov [this message]
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=1186752783.2036656.1561040167582.JavaMail.zimbra@inango-systems.com \
--to=n.merinov@inango-systems.com \
--cc=openembedded-core@lists.openembedded.org \
--cc=raj.khem@gmail.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