CMakeLists.txt: Added option to install mraa-gpio tool
[contrib/mraa.git] / CMakeLists.txt
1 cmake_minimum_required (VERSION 2.8)
2 project (mraa)
3
4 FIND_PACKAGE (Threads REQUIRED)
5
6 set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall -fno-omit-frame-pointer")
7 set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall")
8 set (LIB_INSTALL_DIR "lib${LIB_SUFFIX}" CACHE PATH "Installation path for libraries")
9
10 # Set CMAKE_LIB_INSTALL_DIR if not defined
11 include(GNUInstallDirs)
12
13 # Appends the cmake/modules path to MAKE_MODULE_PATH variable.
14 set (CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH})
15
16 # Make a version file containing the current version from git.
17 include (GetGitRevisionDescription)
18 git_describe (VERSION "--tags")
19 if ("x_${VERSION}" STREQUAL "x_GIT-NOTFOUND")
20   message (WARNING " - Install git to compile a production libmraa!")
21   set (VERSION "v0.6.1-dirty")
22 endif ()
23
24 message (INFO " - libmraa Version ${VERSION}")
25
26 #parse the version information into pieces.
27 string (REGEX REPLACE "^v([0-9]+)\\..*" "\\1" VERSION_MAJOR "${VERSION}")
28 string (REGEX REPLACE "^v[0-9]+\\.([0-9]+).*" "\\1" VERSION_MINOR "${VERSION}")
29 string (REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" VERSION_PATCH "${VERSION}")
30 string (REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.[0-9]+\\-([0-9]+).*" "\\1" VERSION_COMMIT "${VERSION}")
31 string (REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.[0-9]+-[0-9]+\\-(.*)" "\\1" VERSION_SHA1 "${VERSION}")
32 set (VERSION_SHORT "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
33
34 if ("${VERSION_COMMIT}" MATCHES "^v.*")
35   set (VERSION_COMMIT "")
36 endif()
37
38 configure_file (${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/version.c.in
39                 ${CMAKE_CURRENT_BINARY_DIR}/src/version.c)
40
41 # this is the library version, independant of git revision
42 set (mraa_VERSION_MAJOR ${VERSION_MAJOR})
43 set (mraa_VERSION_MINOR ${VERSION_MINOR})
44 set (mraa_VERSION_PATCH ${VERSION_PATCH})
45 set (mraa_VERSION_STRING ${mraa_VERSION_MAJOR}.${mraa_VERSION_MINOR}.${mraa_VERSION_PATCH})
46
47 set (CMAKE_SWIG_FLAGS "")
48
49 find_path (SYSTEM_USR_DIR "stdlib.h")
50 include_directories (${SYSTEM_USR_DIR})
51
52 option (GTEST "Build all gtests." OFF)
53 option (BUILDDOC "Build all doc." OFF)
54 option (BUILDSWIG "Build swig modules." ON)
55 option (BUILDSWIGPYTHON "Build swig python modules." ON)
56 option (BUILDSWIGNODE "Build swig node modules." ON)
57 option (IPK "Generate IPK using CPack" OFF)
58 option (BUILDPYTHON3 "Use python3 for building/installing" OFF)
59 option (INSTALLGPIOTOOL "Install gpio tool" OFF)
60
61 include (TargetArch)
62 target_architecture (DETECTED_ARCH)
63 message( INFO " - Target arch is ${DETECTED_ARCH}")
64
65 if (DETECTED_ARCH STREQUAL "i586" OR DETECTED_ARCH STREQUAL "x86_64"
66     OR DETECTED_ARCH STREQUAL "i386")
67   set (X86PLAT ON)
68 elseif (DETECTED_ARCH MATCHES "arm.*")
69   set (ARMPLAT ON)
70 else ()
71   message(FATAL_ERROR "Only x86 and arm platforms currently supported")
72 endif()
73
74 if (GTEST)
75   enable_testing ()
76   add_subdirectory (tests)
77 endif ()
78
79 if (BUILDDOC)
80   # add a target to generate API documentation with Doxygen
81   find_package (Doxygen)
82   if (DOXYGEN_FOUND)
83     configure_file (${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
84     add_custom_target (doc
85       ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
86       WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
87       COMMENT "Generating API documentation with Doxygen" VERBATIM
88     )
89   endif (DOXYGEN_FOUND)
90 endif ()
91
92 if (IPK)
93   # Get target package arch from Yocto ADT sysroot if set or host OS, mapping to Ubuntu name if necessary
94   if (DEFINED ENV{OECORE_TARGET_SYSROOT})
95     GET_FILENAME_COMPONENT (DETECTED_SYSROOT $ENV{OECORE_TARGET_SYSROOT} NAME)
96     string (REGEX REPLACE "-poky-linux" "" TARGET_ARCH "${DETECTED_SYSROOT}")
97   else ()
98     # debian uses amd64 to denote x86_64
99     if (DETECTED_ARCH STREQUAL "x86_64")
100       set (TARGET_ARCH "amd64")
101     else ()
102       set (TARGET_ARCH ${DETECTED_ARCH})
103     endif ()
104   endif ()
105   message (INFO " - Package arch is ${TARGET_ARCH}")
106
107   set(CPACK_GENERATOR "DEB" "TGZ")
108   set(OPKG_ARCH ${TARGET_ARCH})
109   set(CPACK_BINARY_DIR ${CMAKE_BINARY_DIR})
110   set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Intel IoT-Devkit") #required
111   set(mraa_PACKAGE_ON_TAG ".")
112   if ("${VERSION_COMMIT}" STREQUAL "")
113     set(mraa_PACKAGE_ON_TAG "")
114   endif()
115   set(CPACK_PACKAGE_VERSION 
116       "${mraa_VERSION_MAJOR}.${mraa_VERSION_MINOR}.${mraa_VERSION_PATCH}${mraa_PACKAGE_ON_TAG}${VERSION_COMMIT}")
117   set(CPACK_PACKAGE_NAME "libmraa${mraa_VERSION_MAJOR}")
118   set(CPACK_DEBIAN_PACKAGE_SECTION "libs")
119   set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${TARGET_ARCH})
120   set(CPACK_SYSTEM_NAME ${TARGET_ARCH})
121   set(CPACK_DEBIAN_PACKAGE_PROVIDES "libmraa-dev, libmraa-dbg, libmraa-doc")
122   set(CPACK_DEBIAN_PACKAGE_REPLACES ${CPACK_DEBIAN_PACKAGE_PROVIDES})
123   set(CPACK_DEBIAN_PACKAGE_CONFLICTS ${CPACK_DEBIAN_PACKAGE_PROVIDES})
124   set(WDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}")
125   include (CPack)
126 endif()
127
128 add_subdirectory (src)
129 add_subdirectory (examples)