mraa: update to version 0.8.1
[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 "${CMAKE_INSTALL_LIBDIR}" 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" OR "x_${VERSION}" STREQUAL "x_HEAD-HASH-NOTFOUND" OR "x_${VERSION}" STREQUAL "x_-128-NOTFOUND")
20   message (WARNING " - Install git to compile a production libmraa!")
21   set (VERSION "v0.8.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 (BUILDSWIGJAVA "Build Java API." OFF)
57 option (USBPLAT "Detection USB platform." OFF)
58 option (FTDI4222 "Build with FTDI FT4222 subplatform support." OFF)
59 option (IPK "Generate IPK using CPack" OFF)
60 option (RPM "Generate RPM using CPack" OFF)
61 option (BUILDPYTHON3 "Use python3 for building/installing" OFF)
62 option (ENABLEEXAMPLES "Disable building of examples" ON)
63 option (INSTALLGPIOTOOL "Install gpio tool" OFF)
64 option (BUILDARCH "Override architecture to build for - override" OFF)
65 option (TESTS "Override the addition of tests" ON)
66
67 if (NOT BUILDSWIG)
68   set (BUILDSWIGPYTHON OFF)
69   set (BUILDSWIGNODE OFF)
70   set (BUILDSWIGJAVA OFF)
71 endif()
72
73 if (NOT BUILDARCH)
74   include (TargetArch)
75   target_architecture (DETECTED_ARCH)
76   message( INFO " - Target arch is ${DETECTED_ARCH}")
77 else ()
78   set (DETECTED_ARCH ${BUILDARCH})
79   message( INFO " - Override arch is ${DETECTED_ARCH}")
80 endif()
81
82 if (DETECTED_ARCH STREQUAL "i586" OR DETECTED_ARCH STREQUAL "x86_64"
83     OR DETECTED_ARCH STREQUAL "i386")
84   set (X86PLAT ON)
85 elseif (DETECTED_ARCH MATCHES "arm.*")
86   set (ARMPLAT ON)
87 else ()
88   message(FATAL_ERROR "Only x86 and arm platforms currently supported")
89 endif()
90
91 if (BUILDSWIGPYTHON)
92   if (BUILDPYTHON3)
93     set (PYTHONBUILD_VERSION 3)
94   else ()
95     set (PYTHONBUILD_VERSION 2.7)
96   endif ()
97   find_package (PythonInterp ${PYTHONBUILD_VERSION} REQUIRED)
98   if (TESTS)
99     if (${PYTHONINTERP_FOUND})
100       enable_testing ()
101       add_subdirectory (tests)
102     endif ()
103   endif ()
104 endif ()
105
106 if (BUILDDOC)
107   # add a target to generate API documentation with Doxygen
108   find_package (Doxygen)
109   if (DOXYGEN_FOUND)
110     configure_file (${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
111     if (BUILDSWIGJAVA)
112       configure_file (${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.java.in ${CMAKE_CURRENT_BINARY_DIR}/src/java/Doxyfile @ONLY)
113     endif ()
114     add_custom_target (doc
115       ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
116       WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
117       COMMENT "Generating API documentation with Doxygen" VERBATIM
118     )
119   endif (DOXYGEN_FOUND)
120 endif ()
121
122 if (IPK)
123   # Get target package arch from Yocto ADT sysroot if set or host OS, mapping to Ubuntu name if necessary
124   if (DEFINED ENV{OECORE_TARGET_SYSROOT})
125     GET_FILENAME_COMPONENT (DETECTED_SYSROOT $ENV{OECORE_TARGET_SYSROOT} NAME)
126     string (REGEX REPLACE "-poky-linux" "" TARGET_ARCH "${DETECTED_SYSROOT}")
127   else ()
128     # debian uses amd64 to denote x86_64
129     if (DETECTED_ARCH STREQUAL "x86_64")
130       set (TARGET_ARCH "amd64")
131     else ()
132       set (TARGET_ARCH ${DETECTED_ARCH})
133     endif ()
134   endif ()
135   message (INFO " - Package arch is ${TARGET_ARCH}")
136
137   set(CPACK_GENERATOR "DEB" "TGZ")
138   set(OPKG_ARCH ${TARGET_ARCH})
139   set(CPACK_BINARY_DIR ${CMAKE_BINARY_DIR})
140   set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Intel IoT-Devkit") #required
141   set(mraa_PACKAGE_ON_TAG ".")
142   if ("${VERSION_COMMIT}" STREQUAL "")
143     set(mraa_PACKAGE_ON_TAG "")
144   endif()
145   set(CPACK_PACKAGE_VERSION 
146       "${mraa_VERSION_MAJOR}.${mraa_VERSION_MINOR}.${mraa_VERSION_PATCH}${mraa_PACKAGE_ON_TAG}${VERSION_COMMIT}")
147   set(CPACK_PACKAGE_NAME "mraa")
148   set(CPACK_DEBIAN_PACKAGE_SECTION "libs")
149   set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${TARGET_ARCH})
150   set(CPACK_SYSTEM_NAME ${TARGET_ARCH})
151   set(CPACK_DEBIAN_PACKAGE_PROVIDES "mraa-dev, mraa-dbg, mraa-doc")
152   set(CPACK_DEBIAN_PACKAGE_REPLACES "${CPACK_DEBIAN_PACKAGE_PROVIDES}, libmraa, libmraa-dev, libmraa-doc")
153   set(CPACK_DEBIAN_PACKAGE_CONFLICTS ${CPACK_DEBIAN_PACKAGE_PROVIDES})
154   set(WDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}")
155   include (CPack)
156 endif()
157
158 if (RPM)
159   message (INFO " - Enabled RPM packaging for ${DETECTED_ARCH}")
160   set(CMAKE_INSTALL_PREFIX "/usr")
161   set(CPACK_PACKAGE_VERSION ${VERSION})
162   set(CPACK_GENERATOR "RPM")
163   set(CPACK_PACKAGE_NAME "libmraa${mraa_VERSION_MAJOR}")
164   set(CPACK_PACKAGE_RELEASE 1)
165   set(CPACK_PACKAGE_VERSION
166       "${mraa_VERSION_MAJOR}.${mraa_VERSION_MINOR}.${mraa_VERSION_PATCH}${mraa_PACKAGE_ON_TAG}${VERSION_COMMIT}")
167   set(CPACK_PACKAGE_CONTACT "Intel IoT-Devkit")
168   set(CPACK_PACKAGE_VENDOR "Intel IoT-Devkit")
169   set(CPACK_RPM_PACKAGE_PROVIDES "${CPACK_PACKAGE_NAME}-devel")
170   # Get distro tag (e.g. 'fc20') by parsing output of rpm --showrc
171   EXECUTE_PROCESS(
172     COMMAND rpm --showrc
173     COMMAND grep -w dist
174     COMMAND sed -e "s/\\t./ /"
175     COMMAND awk "{printf \"%s\", \$NF}"
176     OUTPUT_VARIABLE DIST_TAG
177   )
178   set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_PACKAGE_RELEASE}.${DIST_TAG}.${DETECTED_ARCH}")
179   include(CPack)
180 endif()
181
182 add_subdirectory (src)
183 if (ENABLEEXAMPLES)
184   add_subdirectory (examples)
185 endif ()