96602017c8343852099f0f8bd79416c065aa40d5
[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 (BUILDDOC "Build all doc." OFF)
53 option (BUILDSWIG "Build swig modules." ON)
54 option (BUILDSWIGPYTHON "Build swig python modules." ON)
55 option (BUILDSWIGNODE "Build swig node modules." ON)
56 option (IPK "Generate IPK using CPack" OFF)
57 option (BUILDPYTHON3 "Use python3 for building/installing" OFF)
58 option (INSTALLGPIOTOOL "Install gpio tool" OFF)
59 option (BUILDARCH "Override architecture to build for - override" OFF)
60 option (TESTS "Override the addition of tests" ON)
61
62 if (NOT BUILDARCH)
63   include (TargetArch)
64   target_architecture (DETECTED_ARCH)
65   message( INFO " - Target arch is ${DETECTED_ARCH}")
66 else ()
67   set (DETECTED_ARCH ${BUILDARCH})
68   message( INFO " - Override arch is ${DETECTED_ARCH}")
69 endif()
70
71 if (DETECTED_ARCH STREQUAL "i586" OR DETECTED_ARCH STREQUAL "x86_64"
72     OR DETECTED_ARCH STREQUAL "i386")
73   set (X86PLAT ON)
74 elseif (DETECTED_ARCH MATCHES "arm.*")
75   set (ARMPLAT ON)
76 else ()
77   message(FATAL_ERROR "Only x86 and arm platforms currently supported")
78 endif()
79
80 if (BUILDSWIGPYTHON)
81   if (BUILDPYTHON3)
82     set (PYTHONBUILD_VERSION 3)
83   else ()
84     set (PYTHONBUILD_VERSION 2.7)
85   endif ()
86   find_package (PythonInterp ${PYTHONBUILD_VERSION} REQUIRED)
87   if (TESTS)
88     if (${PYTHONINTERP_FOUND})
89       enable_testing ()
90       add_subdirectory (tests)
91     endif ()
92   endif ()
93 endif ()
94
95 if (BUILDDOC)
96   # add a target to generate API documentation with Doxygen
97   find_package (Doxygen)
98   if (DOXYGEN_FOUND)
99     configure_file (${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
100     add_custom_target (doc
101       ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
102       WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
103       COMMENT "Generating API documentation with Doxygen" VERBATIM
104     )
105   endif (DOXYGEN_FOUND)
106 endif ()
107
108 if (IPK)
109   # Get target package arch from Yocto ADT sysroot if set or host OS, mapping to Ubuntu name if necessary
110   if (DEFINED ENV{OECORE_TARGET_SYSROOT})
111     GET_FILENAME_COMPONENT (DETECTED_SYSROOT $ENV{OECORE_TARGET_SYSROOT} NAME)
112     string (REGEX REPLACE "-poky-linux" "" TARGET_ARCH "${DETECTED_SYSROOT}")
113   else ()
114     # debian uses amd64 to denote x86_64
115     if (DETECTED_ARCH STREQUAL "x86_64")
116       set (TARGET_ARCH "amd64")
117     else ()
118       set (TARGET_ARCH ${DETECTED_ARCH})
119     endif ()
120   endif ()
121   message (INFO " - Package arch is ${TARGET_ARCH}")
122
123   set(CPACK_GENERATOR "DEB" "TGZ")
124   set(OPKG_ARCH ${TARGET_ARCH})
125   set(CPACK_BINARY_DIR ${CMAKE_BINARY_DIR})
126   set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Intel IoT-Devkit") #required
127   set(mraa_PACKAGE_ON_TAG ".")
128   if ("${VERSION_COMMIT}" STREQUAL "")
129     set(mraa_PACKAGE_ON_TAG "")
130   endif()
131   set(CPACK_PACKAGE_VERSION 
132       "${mraa_VERSION_MAJOR}.${mraa_VERSION_MINOR}.${mraa_VERSION_PATCH}${mraa_PACKAGE_ON_TAG}${VERSION_COMMIT}")
133   set(CPACK_PACKAGE_NAME "libmraa${mraa_VERSION_MAJOR}")
134   set(CPACK_DEBIAN_PACKAGE_SECTION "libs")
135   set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${TARGET_ARCH})
136   set(CPACK_SYSTEM_NAME ${TARGET_ARCH})
137   set(CPACK_DEBIAN_PACKAGE_PROVIDES "libmraa-dev, libmraa-dbg, libmraa-doc")
138   set(CPACK_DEBIAN_PACKAGE_REPLACES ${CPACK_DEBIAN_PACKAGE_PROVIDES})
139   set(CPACK_DEBIAN_PACKAGE_CONFLICTS ${CPACK_DEBIAN_PACKAGE_PROVIDES})
140   set(WDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}")
141   include (CPack)
142 endif()
143
144 add_subdirectory (src)
145 add_subdirectory (examples)