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