Alexander Neundorf wrote: > On Wednesday 23 June 2010, Todd Gamblin wrote: >> 3a. First, using this setup, FindMPI fails because the last library it >> needs is in /bgsys/drivers/ppcfloor/runtime/SPI, not >> /bgsys/drivers/ppcfloor/runtime/SPI/lib. CMAKE_FIND_ROOT_PATH seems to >> assume that its elements are just above a lib directory, but that's not how >> things are structured on BG/P (you can blame IBM). So, if I just use the >> root path for searching, find_library fails for libs in runtime/SPI. > > I guess you need a special Platform/BlueGeneP.cmake file, which not simply > includes UnixPaths.cmake, but sets some special directories. > Please add a bug report for this on http://public.kitware.com/Bug/ too.
Good idea. There is a distinction to understand here: (1) CMAKE_FIND_ROOT_PATH is meant for cross-compiling and should appear only in toolchain files. It re-roots all search paths. Usually the goal is to find libraries only from the target platform SDK (and not the host), which is why we suggest using set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) Typically CMAKE_FIND_ROOT_PATH should be set to the *top* of the SDK tree, such as "/bgsys/drivers/ppcfloor" in your case. (2) CMAKE_SYSTEM_PREFIX_PATH, CMAKE_SYSTEM_LIBRARY_PATH, and similar variables are meant for controlling the search *within* the target platform SDK to find different types of files. See help for find_library, find_program, and find_path for specific details. This is where the "<prefix>/lib" assumption occurs: - find_library looks in <CMAKE_SYSTEM_PREFIX_PATH>/lib - find_library looks in CMAKE_SYSTEM_LIBRARY_PATH, but the Modules/Platform/UnixPaths.cmake file sets this variable with "/lib" at the end of most of its paths. What Alex suggests is to create a Modules/Platform/BlueGeneP.cmake file that defines CMAKE_SYSTEM_LIBRARY_PATH to something like /runtime/SPI and other paths relative to CMAKE_FIND_ROOT_PATH entries. This tells CMake how to find libraries within the target platform SDK. IIRC, you can try this out by setting CMAKE_SYSTEM_LIBRARY_PATH directly in your toolchain file, but I do not remember for sure if it works there. -Brad _______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake