Cmake: add override BUILDARCH for selecting arch
[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 (GTEST "Build all gtests." OFF)
53 option (BUILDDOC "Build all doc." OFF)
54 option (BUILDSWIG "Build swig modules." ON)
55 option (BUILDSWIGPYTHON "Build swig python modules." ON)
56 option (BUILDSWIGNODE "Build swig node modules." ON)
57 option (IPK "Generate IPK using CPack" OFF)
58 option (BUILDPYTHON3 "Use python3 for building/installing" OFF)
59 option (INSTALLGPIOTOOL "Install gpio tool" OFF)
60 option (BUILDARCH "Override architecture to build for - override" OFF)
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 (GTEST)
81   enable_testing ()
82   add_subdirectory (tests)
83 endif ()
84
85 if (BUILDDOC)
86   # add a target to generate API documentation with Doxygen
87   find_package (Doxygen)
88   if (DOXYGEN_FOUND)
89     configure_file (${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
90     add_custom_target (doc
91       ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
92       WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
93       COMMENT "Generating API documentation with Doxygen" VERBATIM
94     )
95   endif (DOXYGEN_FOUND)
96 endif ()
97
98 if (IPK)
99   # Get target package arch from Yocto ADT sysroot if set or host OS, mapping to Ubuntu name if necessary
100   if (DEFINED ENV{OECORE_TARGET_SYSROOT})
101     GET_FILENAME_COMPONENT (DETECTED_SYSROOT $ENV{OECORE_TARGET_SYSROOT} NAME)
102     string (REGEX REPLACE "-poky-linux" "" TARGET_ARCH "${DETECTED_SYSROOT}")
103   else ()
104     # debian uses amd64 to denote x86_64
105     if (DETECTED_ARCH STREQUAL "x86_64")
106       set (TARGET_ARCH "amd64")
107     else ()
108       set (TARGET_ARCH ${DETECTED_ARCH})
109     endif ()
110   endif ()
111   message (INFO " - Package arch is ${TARGET_ARCH}")
112
113   set(CPACK_GENERATOR "DEB" "TGZ")
114   set(OPKG_ARCH ${TARGET_ARCH})
115   set(CPACK_BINARY_DIR ${CMAKE_BINARY_DIR})
116   set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Intel IoT-Devkit") #required
117   set(mraa_PACKAGE_ON_TAG ".")
118   if ("${VERSION_COMMIT}" STREQUAL "")
119     set(mraa_PACKAGE_ON_TAG "")
120   endif()
121   set(CPACK_PACKAGE_VERSION 
122       "${mraa_VERSION_MAJOR}.${mraa_VERSION_MINOR}.${mraa_VERSION_PATCH}${mraa_PACKAGE_ON_TAG}${VERSION_COMMIT}")
123   set(CPACK_PACKAGE_NAME "libmraa${mraa_VERSION_MAJOR}")
124   set(CPACK_DEBIAN_PACKAGE_SECTION "libs")
125   set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${TARGET_ARCH})
126   set(CPACK_SYSTEM_NAME ${TARGET_ARCH})
127   set(CPACK_DEBIAN_PACKAGE_PROVIDES "libmraa-dev, libmraa-dbg, libmraa-doc")
128   set(CPACK_DEBIAN_PACKAGE_REPLACES ${CPACK_DEBIAN_PACKAGE_PROVIDES})
129   set(CPACK_DEBIAN_PACKAGE_CONFLICTS ${CPACK_DEBIAN_PACKAGE_PROVIDES})
130   set(WDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}")
131   include (CPack)
132 endif()
133
134 add_subdirectory (src)
135 add_subdirectory (examples)