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