aballier    14/10/27 09:49:05

  Modified:             ChangeLog cmake-utils.eclass
  Log:
  improve/fix cross-compilation support, bug #503216 by James Le Cuirot and 
myself

Revision  Changes    Path
1.1393               eclass/ChangeLog

file : 
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/eclass/ChangeLog?rev=1.1393&view=markup
plain: 
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/eclass/ChangeLog?rev=1.1393&content-type=text/plain
diff : 
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/eclass/ChangeLog?r1=1.1392&r2=1.1393

Index: ChangeLog
===================================================================
RCS file: /var/cvsroot/gentoo-x86/eclass/ChangeLog,v
retrieving revision 1.1392
retrieving revision 1.1393
diff -u -r1.1392 -r1.1393
--- ChangeLog   26 Oct 2014 17:39:52 -0000      1.1392
+++ ChangeLog   27 Oct 2014 09:49:05 -0000      1.1393
@@ -1,6 +1,10 @@
 # ChangeLog for eclass directory
 # Copyright 1999-2014 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/eclass/ChangeLog,v 1.1392 2014/10/26 
17:39:52 ulm Exp $
+# $Header: /var/cvsroot/gentoo-x86/eclass/ChangeLog,v 1.1393 2014/10/27 
09:49:05 aballier Exp $
+
+  27 Oct 2014; Alexis Ballier <[email protected]> cmake-utils.eclass:
+  improve/fix cross-compilation support, bug #503216 by James Le Cuirot and
+  myself
 
   26 Oct 2014; Ulrich Müller <[email protected]> toolchain.eclass:
   [QA] Code from revisions 1.636 and 1.640 commented out. This causes several



1.112                eclass/cmake-utils.eclass

file : 
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/eclass/cmake-utils.eclass?rev=1.112&view=markup
plain: 
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/eclass/cmake-utils.eclass?rev=1.112&content-type=text/plain
diff : 
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/eclass/cmake-utils.eclass?r1=1.111&r2=1.112

Index: cmake-utils.eclass
===================================================================
RCS file: /var/cvsroot/gentoo-x86/eclass/cmake-utils.eclass,v
retrieving revision 1.111
retrieving revision 1.112
diff -u -r1.111 -r1.112
--- cmake-utils.eclass  15 Oct 2014 13:44:24 -0000      1.111
+++ cmake-utils.eclass  27 Oct 2014 09:49:05 -0000      1.112
@@ -1,6 +1,6 @@
 # Copyright 1999-2014 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/eclass/cmake-utils.eclass,v 1.111 
2014/10/15 13:44:24 kensington Exp $
+# $Header: /var/cvsroot/gentoo-x86/eclass/cmake-utils.eclass,v 1.112 
2014/10/27 09:49:05 aballier Exp $
 
 # @ECLASS: cmake-utils.eclass
 # @MAINTAINER:
@@ -106,6 +106,11 @@
 # used for optionality)
 : ${WANT_CMAKE:=always}
 
+# @ECLASS-VARIABLE: CMAKE_EXTRA_CACHE_FILE
+# @DESCRIPTION:
+# Specifies an extra cache file to pass to cmake. This is the analog of 
EXTRA_ECONF
+# for econf and is needed to pass TRY_RUN results when cross-compiling.
+# Should be set by user in a per-package basis in /etc/portage/package.env.
 
 CMAKEDEPEND=""
 case ${WANT_CMAKE} in
@@ -454,14 +459,44 @@
        cat > "${build_rules}" <<- _EOF_
                SET (CMAKE_AR $(type -P $(tc-getAR)) CACHE FILEPATH "Archive 
manager" FORCE)
                SET (CMAKE_ASM_COMPILE_OBJECT "<CMAKE_C_COMPILER> <DEFINES> 
${CFLAGS} <FLAGS> -o <OBJECT> -c <SOURCE>" CACHE STRING "ASM compile command" 
FORCE)
-               SET (CMAKE_C_COMPILER $(type -P $(tc-getCC)) CACHE FILEPATH "C 
compiler" FORCE)
                SET (CMAKE_C_COMPILE_OBJECT "<CMAKE_C_COMPILER> <DEFINES> 
${CPPFLAGS} <FLAGS> -o <OBJECT> -c <SOURCE>" CACHE STRING "C compile command" 
FORCE)
-               SET (CMAKE_CXX_COMPILER $(type -P $(tc-getCXX)) CACHE FILEPATH 
"C++ compiler" FORCE)
                SET (CMAKE_CXX_COMPILE_OBJECT "<CMAKE_CXX_COMPILER> <DEFINES> 
${CPPFLAGS} <FLAGS> -o <OBJECT> -c <SOURCE>" CACHE STRING "C++ compile command" 
FORCE)
                SET (CMAKE_RANLIB $(type -P $(tc-getRANLIB)) CACHE FILEPATH 
"Archive index generator" FORCE)
                SET (PKG_CONFIG_EXECUTABLE $(type -P $(tc-getPKG_CONFIG)) CACHE 
FILEPATH "pkg-config executable" FORCE)
        _EOF_
 
+       local toolchain_file=${BUILD_DIR}/gentoo_toolchain.cmake
+       cat > ${toolchain_file} <<- _EOF_
+               SET (CMAKE_C_COMPILER $(tc-getCC))
+               SET (CMAKE_CXX_COMPILER $(tc-getCXX))
+       _EOF_
+
+       if tc-is-cross-compiler; then
+               local sysname
+               case "${KERNEL:-linux}" in
+                       Cygwin) sysname="CYGWIN_NT-5.1" ;;
+                       HPUX) sysname="HP-UX" ;;
+                       linux) sysname="Linux" ;;
+                       Winnt) sysname="Windows" ;;
+                       *) sysname="${KERNEL}" ;;
+               esac
+
+               cat >> "${toolchain_file}" <<- _EOF_
+                       SET (CMAKE_SYSTEM_NAME "${sysname}")
+               _EOF_
+
+               if [ "${SYSROOT:-/}" != "/" ] ; then
+                       # When cross-compiling with a sysroot (e.g. with 
crossdev's emerge wrappers)
+                       # we need to tell cmake to use libs/headers from the 
sysroot but programs from / only.
+                       cat >> "${toolchain_file}" <<- _EOF_
+                               set(CMAKE_FIND_ROOT_PATH "${SYSROOT}")
+                               set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+                               set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+                               set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+                       _EOF_
+               fi
+       fi
+
        has "${EAPI:-0}" 0 1 2 && ! use prefix && EPREFIX=
 
        if [[ ${EPREFIX} ]]; then
@@ -523,9 +558,14 @@
                -DCMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE}"
                -DCMAKE_INSTALL_DO_STRIP=OFF
                -DCMAKE_USER_MAKE_RULES_OVERRIDE="${build_rules}"
+               -DCMAKE_TOOLCHAIN_FILE="${toolchain_file}"
                "${MYCMAKEARGS}"
        )
 
+       if [[ -n "${CMAKE_EXTRA_CACHE_FILE}" ]] ; then
+               cmakeargs+=( -C "${CMAKE_EXTRA_CACHE_FILE}" )
+       fi
+
        pushd "${BUILD_DIR}" > /dev/null
        debug-print "${LINENO} ${ECLASS} ${FUNCNAME}: mycmakeargs is 
${mycmakeargs_local[*]}"
        echo "${CMAKE_BINARY}" "${cmakeargs[@]}" "${CMAKE_USE_DIR}"




Reply via email to