2010/4/13 Alexander Neundorf <[email protected]> > On Tuesday 13 April 2010, Diego wrote: > > Hello, > > I'm trying to cross-compiling a library for the PSP platform, this is my > > toolchain: > > > > *# The name of the target operating system. > > set(CMAKE_SYSTEM_NAME Generic) > > > > # Which compilers to use for C and C++. > > set(CMAKE_C_COMPILER /usr/local/pspdev/bin/psp-gcc) > > set(CMAKE_CXX_COMPILER /usr/local/pspdev/bin/psp-g++) > > > > set(CMAKE_FIND_ROOT_PATH /usr/local/pspdev/psp) > > > > # Adjust the default behaviour of the FIND_XXX() commands: > > # search headers and libraries in the target environment, search > > # programs in the host environment. > > set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) > > set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) > > set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)* > > > > > > And this is the code (from CmakeLists.txt) to find the zlib.h header > > located in /usr/local/pspdev/psp/include: > > > > *cmake_minimum_required(VERSION 2.6 FATAL_ERROR) > > if(COMMAND cmake_policy) > > cmake_policy(SET CMP0003 NEW) > > endif(COMMAND cmake_policy) > > > > if(NOT CMAKE_BUILD_TYPE) > > set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING > > "Choose the type of build, options are: > > None Debug Release RelWithDebInfo MinSizeRel Profile." > > FORCE) > > endif() > > # Restrict configuration types to the selected build type. > > # Note: This needs to be done before the project command > > set(CMAKE_CONFIGURATION_TYPES "${CMAKE_BUILD_TYPE}" CACHE INTERNAL > > "internal") > > > > # Set the project name. > > project(MyLibrary C CXX) > > > > FIND_PATH(ZLIB_INCLUDE_DIR zlib.h) > > > > message(STATUS "zlib include dir ${ZLIB_INCLUDE_DIR}")* > > > > It returns not found but it should. > > > > Setting *CMAKE INCLUDE_PATH* to */usr/local/pspdev/psp/include *(and > > commenting the line set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) works as > > expected. > > > > What I'm doing wrong? > > Without testing it... > > You set CMAKE_SYSTEM_NAME to "Generic", so Modules/Platforms/Generic.cmake > is > loaded. This file looks like this: > > ---------8<----------------8<-----------------------8<--------------- > # This is a platform definition file for platforms without > # operating system, typically embedded platforms. > # It is used when CMAKE_SYSTEM_NAME is set to "Generic" > # > # It is intentionally empty, since nothing is known > # about the platform. So everything has to be specified > # in the system/compiler files > ${CMAKE_SYSTEM_NAME}-<compiler_basename>.cmake > # and/or > ${CMAKE_SYSTEM_NAME}-<compiler_basename>-${CMAKE_SYSTEM_PROCESSOR}.cmake > > # (embedded) targets without operating system usually don't support shared > libraries > SET_PROPERTY(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS FALSE) > > ---------8<----------------8<-----------------------8<--------------- > > IOW, it doesn't load e.g. UnixPaths.cmake, so CMAKE_SYSTEM_INCLUDE_PATH is > empty. > Maybe it would be a good idea to add at least include/, lib/ and bin/ as > default search paths in Generic.cmake. > > Can you append the following code to Generic.cmake and see if it works then > ? > > SET(CMAKE_SYSTEM_INCLUDE_PATH /include "${CMAKE_INSTALL_PREFIX}/include") > SET(CMAKE_SYSTEM_LIBRARY_PATH /lib "${CMAKE_INSTALL_PREFIX}/lib") > SET(CMAKE_SYSTEM_PROGRAM_PATH /bin "${CMAKE_INSTALL_PREFIX}/bin") > > > Alex >
Yes, it works now! The CMAKE_FIND_ROOT_PATH variable it seems isn't really necessary (??). Thank you very much by the info about the Modules/Platform/ directory :) and by your help. Best regards.
_______________________________________________ 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
