CMake

From ArmadeusWiki
Jump to: navigation, search

Page under construction... Construction.png Informations on this page are not guaranteed !!

Forewords

Cmake is a utility that generate Makefile for your projects. Therefore, it does not need to be cross-compiled.

Configure a project using CMake

The toolchain file

This file describes the (cross-)toolchain required to compile projects managed with CMake.

Copy-paste the following lines in a *.cmake file and set the variables of "Armadeus subsection" accordingly to your configuration.

##
## toolchain.cmake
##

## ==== Settings Section ====

## ---- Armadeus subsection ----
# set the Armadeus board (comments/uncomment according to your board)
set(ARMADEUS_BOARD            "APF27")
# set(ARMADEUS_BOARD            "APF9328")

# set the uClibc version
set(ARMADEUS_UCLIBC_VERSION   "0.9.29")

# set the Armadeus root path
set(ARMADEUS_ROOT             "/path/to/your/armadeus/sdk")

## ---- CMake subsection ----
# this one is important
set(CMAKE_SYSTEM_NAME         "Linux")
# this one not so much
set(CMAKE_SYSTEM_VERSION      "1")


## ==== CMake Variables ====

if(ARMADEUS_BOARD STREQUAL "APF27")
  set(ARMADEUS_MARCH          "armv5te")
elseif(ARMADEUS_BOARD STREQUAL "APF9328")
  set(ARMADEUS_MARCH          "armv4t")
else(ARMADEUS_BOARD STREQUAL "APF27")
  message("\n"
    "===========================================================\n"
    "= Cannot determine the target                             =\n"
    "===========================================================\n"
    )
endif(ARMADEUS_BOARD STREQUAL "APF27")

set(ARMADEUS_ROOT_BR          ${ARMADEUS_ROOT}/buildroot)
set(ARMADEUS_ROOT_CTC         ${ARMADEUS_ROOT_BR}/build_${ARMADEUS_MARCH}/staging_dir)
set(ARMADEUS_ROOT_CTC_BINDIR  ${ARMADEUS_ROOT_CTC}/usr/bin)
set(ARMADEUS_CTC_PREFIX       "arm-linux-")

# specify the cross-toolchain (compiler, header and library directories)
set(CMAKE_C_COMPILER          ${ARMADEUS_ROOT_CTC_BINDIR}/${ARMADEUS_CTC_PREFIX}gcc)
set(CMAKE_CXX_COMPILER        ${ARMADEUS_ROOT_CTC_BINDIR}/${ARMADEUS_CTC_PREFIX}g++)
set(CMAKE_INCLUDE_PATH        ${ARMADEUS_ROOT_BR}/toolchain_build_${ARMADEUS_MARCH}/uClibc-${ARMADEUS_UCLIBC_VERSION}/include)
set(CMAKE_LIBRARY_PATH        ${ARMADEUS_ROOT_CTC})

set(CMAKE_FIND_ROOT_PATH      ${ARMADEUS_ROOT_CTC} ${CMAKE_INCLUDE_PATH})

# search for programs in the build host directories
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
# for libraries and headers in the target directories
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

This file should be generated by Buildroot at the time of the Armadeus SDK setup.

Run CMake

TODO

Goto here for an example (step #5)

Use CMake in your a project

TODO

Goto here for an example

See also


Thanks

Thanks to Ctaf42 for his help about CMake.