<html dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style id="owaParaStyle" type="text/css">P {margin-top:0;margin-bottom:0;}</style>
</head>
<body ocsi="0" fpstyle="1">
<div style="direction: ltr;font-family: Tahoma;color: #000000;font-size: 10pt;">Yes I'm setting these variables.<br>
<br>
See my toolchain configuration below:<br>
<br>
<blockquote><font face="Courier New">cmake_minimum_required(VERSION 3.0) # CMAKE_SYSROOT<br>
<br>
set(CMAKE_SYSTEM_NAME Linux)<br>
set(CMAKE_SYSTEM_PROCESSOR armv7l)<br>
<br>
set(LINARO_PACKAGE_ROOT /opt/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/)<br>
set(CMAKE_SYSROOT /home/user/my-project/my-custom-sysroot/)<br>
<br>
set(ONLY_CMAKE_FIND_ROOT_PATH TRUE)<br>
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)<br>
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)<br>
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)<br>
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)<br>
<br>
set(CMAKE_C_COMPILER ${LINARO_PACKAGE_ROOT}/bin/arm-linux-gnueabihf-gcc)<br>
set(CMAKE_CXX_COMPILER ${LINARO_PACKAGE_ROOT}/bin/arm-linux-gnueabihf-g++)<br>
<br>
set(TOOLCHAIN_COMPILE_FLAGS<br>
  "-mtune=cortex-a15 -march=armv7-a -mthumb -mfloat-abi=hard -mfpu=neon-vfpv4")<br>
<br>
set(CMAKE_C_FLAGS "${TOOLCHAIN_COMPILE_FLAGS}" CACHE STRING<br>
  "Flags used by the compiler during all build types." FORCE)<br>
set(CMAKE_CXX_FLAGS "${TOOLCHAIN_COMPILE_FLAGS} -std=c++11" CACHE STRING<br>
  "Flags used by the compiler during all build types." FORCE)</font><br>
</blockquote>
- Guillaume<br>
<br>
<div style="font-family: Times New Roman; color: #000000; font-size: 16px">
<hr tabindex="-1">
<div style="direction: ltr;" id="divRpF385250"><font color="#000000" face="Tahoma" size="2"><b>From:</b> Chuck Atkins [chuck.atkins@kitware.com]<br>
<b>Sent:</b> 15 October 2014 16:40<br>
<b>To:</b> Guillaume Papin<br>
<b>Cc:</b> cmake-developers@cmake.org<br>
<b>Subject:</b> Re: [cmake-developers] FindBoost.cmake cannot find some libraries when cross-compiling<br>
</font><br>
</div>
<div></div>
<div>
<div dir="ltr">Can you post your toolchain file as well?  Does it set any of the CMAKE_FIND_ROOT_PATHG_MODE_{INCLUDE,PROGRAM,LIBRARY,PACKAGE} variables to anything?<br>
</div>
<div class="gmail_extra"><br clear="all">
<div>
<div dir="ltr">- Chuck<br>
</div>
</div>
<br>
<div class="gmail_quote">On Wed, Oct 15, 2014 at 10:04 AM, Guillaume Papin <span dir="ltr">
<<a href="mailto:guillaume.papin@parrot.com" target="_blank">guillaume.papin@parrot.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex; border-left:1px #ccc solid; padding-left:1ex">
Hello CMake developers,<br>
<br>
I have a cross-compiled version of Boost and some other libraries under ~/my-project/CrossThirdPartyPrefix.<br>
<br>
I invoke CMake with a CMAKE_TOOLCHAIN_FILE and also I sets CMAKE_FIND_ROOT_PATH<br>
to the directory where my cross-compiled Boost is installed.<br>
<br>
    cmake -DCMAKE_TOOLCHAIN_FILE=$HOME/my-project/plateforms/arm-toolchain.cmake \<br>
        -DCMAKE_FIND_ROOT_PATH=$HOME/my-project/CrossThirdPartyPrefix \<br>
        ~/my-projects/src/<br>
<br>
But I have an error when using FindBoost.cmake:<br>
<br>
In my project's CMakeLists.txt:<br>
    find_package(Boost 1.53.0 REQUIRED COMPONENTS atomic thread system)<br>
<br>
The error:<br>
     CMake Error at .../share/cmake-3.0/Modules/FindBoost.cmake:1179 (message):<br>
       Unable to find the requested Boost libraries.<br>
<br>
       Boost version: 1.55.0<br>
<br>
       Boost include path:<br>
       ~/myproject/CrossThirdPartyPrefix/include<br>
<br>
<br>
       Could not find the following Boost libraries:<br>
<br>
               boost_thread<br>
               boost_system<br>
<br>
       Some (but not all) of the required Boost libraries were found.  You may<br>
       need to install these additional Boost libraries.  Alternatively, set<br>
       BOOST_LIBRARYDIR to the directory containing Boost libraries or BOOST_ROOT<br>
       to the location of Boost.<br>
<br>
<br>
So the first component library (atomic) is found but not the other ones.<br>
<br>
Looking at the code, when the first library is found, Boost_LIBRARY_DIR is set<br>
to the directory that contains the library and then change the further calls of<br>
find_library to use Boost_LIBRARY_DIR as the unique HINTS, and with the<br>
NO_DEFAULT_PATH options set.<br>
<br>
    macro(_Boost_FIND_LIBRARY var)<br>
      find_library(${var} ${ARGN})<br>
<br>
      if(${var})<br>
        # If this is the first library found then save Boost_LIBRARY_DIR.<br>
        if(NOT Boost_LIBRARY_DIR)<br>
          get_filename_component(_dir "${${var}}" PATH)<br>
          set(Boost_LIBRARY_DIR "${_dir}" CACHE PATH "Boost library directory" FORCE)<br>
        endif()<br>
      elseif(_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT)<br>
        # Try component-specific hints but do not save Boost_LIBRARY_DIR.<br>
        find_library(${var} HINTS ${_Boost_FIND_LIBRARY_HINTS_FOR_COMPONENT} ${ARGN})<br>
      endif()<br>
<br>
      # If Boost_LIBRARY_DIR is known then search only there.<br>
      if(Boost_LIBRARY_DIR)<br>
        set(_boost_LIBRARY_SEARCH_DIRS ${Boost_LIBRARY_DIR} NO_DEFAULT_PATH)<br>
      endif()<br>
    endmacro()<br>
<br>
* <a href="https://github.com/Kitware/CMake/blob/1b3495d32e1523648da08e138482a654f8765333/Modules/FindBoost.cmake#L322-L325" target="_blank">
https://github.com/Kitware/CMake/blob/1b3495d32e1523648da08e138482a654f8765333/Modules/FindBoost.cmake#L322-L325</a><br>
<br>
The issue is that, when using CMAKE_FIND_ROOT_PATH, the Boost_LIBRARY_DIR of the<br>
host (~/myproject/CrossThirdPartyPrefix/lib/ in my case), will be expanded against the root paths.<br>
<br>
To find my libraries I can apply the following fix but I'm not sure if it's the<br>
right solution or not.<br>
<br>
    diff --git a/Modules/FindBoost.cmake b/Modules/FindBoost.cmake<br>
    index 3642b3e..aad6575 100644<br>
    --- a/Modules/FindBoost.cmake<br>
    +++ b/Modules/FindBoost.cmake<br>
    @@ -321,7 +321,7 @@ macro(_Boost_FIND_LIBRARY var)<br>
<br>
       # If Boost_LIBRARY_DIR is known then search only there.<br>
       if(Boost_LIBRARY_DIR)<br>
    -    set(_boost_LIBRARY_SEARCH_DIRS ${Boost_LIBRARY_DIR} NO_DEFAULT_PATH)<br>
    +    set(_boost_LIBRARY_SEARCH_DIRS ${Boost_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)<br>
       endif()<br>
     endmacro()<br>
<br>
    @@ -855,7 +855,7 @@ if(_Boost_CHANGE_LIBDIR AND NOT _Boost_LIBRARY_DIR_CHANGED)<br>
     endif()<br>
<br>
     if(Boost_LIBRARY_DIR)<br>
    -  set(_boost_LIBRARY_SEARCH_DIRS ${Boost_LIBRARY_DIR} NO_DEFAULT_PATH)<br>
    +  set(_boost_LIBRARY_SEARCH_DIRS ${Boost_LIBRARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)<br>
     else()<br>
       set(_boost_LIBRARY_SEARCH_DIRS "")<br>
       if(BOOST_LIBRARYDIR)<br>
<br>
<br>
What I'm wondering is, whether or not Boost_LIBRARY_DIR should be a path on the target or on the host?<br>
<br>
Right now, the workaround I have that doesn't require to modify FindBoost.cmake<br>
is to set Boost_LIBRARY_DIR to /lib/, which will be expanded against the CMAKE_FIND_ROOT_PATH.<br>
<br>
By the way, I'm a happy CMake user, thanks for all the work!<br>
Guillaume<br>
--<br>
<br>
Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
<br>
Please keep messages on-topic and check the CMake FAQ at: <a href="http://www.cmake.org/Wiki/CMake_FAQ" target="_blank">
http://www.cmake.org/Wiki/CMake_FAQ</a><br>
<br>
Kitware offers various services to support the CMake community. For more information on each offering, please visit:<br>
<br>
CMake Support: <a href="http://cmake.org/cmake/help/support.html" target="_blank">
http://cmake.org/cmake/help/support.html</a><br>
CMake Consulting: <a href="http://cmake.org/cmake/help/consulting.html" target="_blank">
http://cmake.org/cmake/help/consulting.html</a><br>
CMake Training Courses: <a href="http://cmake.org/cmake/help/training.html" target="_blank">
http://cmake.org/cmake/help/training.html</a><br>
<br>
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">
http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://public.kitware.com/mailman/listinfo/cmake-developers" target="_blank">http://public.kitware.com/mailman/listinfo/cmake-developers</a><br>
</blockquote>
</div>
<br>
</div>
</div>
</div>
</div>
</body>
</html>