1 cmake_minimum_required (VERSION 2.8)
4 FIND_PACKAGE (Threads REQUIRED)
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")
10 # Set CMAKE_LIB_INSTALL_DIR if not defined
11 include(GNUInstallDirs)
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})
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.2-dirty")
24 message (INFO " - libmraa Version ${VERSION}")
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}")
34 if ("${VERSION_COMMIT}" MATCHES "^v.*")
35 set (VERSION_COMMIT "")
38 configure_file (${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/version.c.in
39 ${CMAKE_CURRENT_BINARY_DIR}/src/version.c)
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})
47 set (CMAKE_SWIG_FLAGS "")
49 find_path (SYSTEM_USR_DIR "stdlib.h")
50 include_directories (${SYSTEM_USR_DIR})
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)
66 target_architecture (DETECTED_ARCH)
67 message( INFO " - Target arch is ${DETECTED_ARCH}")
69 set (DETECTED_ARCH ${BUILDARCH})
70 message( INFO " - Override arch is ${DETECTED_ARCH}")
73 if (DETECTED_ARCH STREQUAL "i586" OR DETECTED_ARCH STREQUAL "x86_64"
74 OR DETECTED_ARCH STREQUAL "i386")
76 elseif (DETECTED_ARCH MATCHES "arm.*")
79 message(FATAL_ERROR "Only x86 and arm platforms currently supported")
84 set (PYTHONBUILD_VERSION 3)
86 set (PYTHONBUILD_VERSION 2.7)
88 find_package (PythonInterp ${PYTHONBUILD_VERSION} REQUIRED)
90 if (${PYTHONINTERP_FOUND})
92 add_subdirectory (tests)
98 # add a target to generate API documentation with Doxygen
99 find_package (Doxygen)
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
107 endif (DOXYGEN_FOUND)
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}")
116 # debian uses amd64 to denote x86_64
117 if (DETECTED_ARCH STREQUAL "x86_64")
118 set (TARGET_ARCH "amd64")
120 set (TARGET_ARCH ${DETECTED_ARCH})
123 message (INFO " - Package arch is ${TARGET_ARCH}")
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 "")
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}")
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*\\.//"
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}")
167 add_subdirectory (src)
168 add_subdirectory (examples)