java: Added Java SWIG binding creation
[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.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 (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 option (TESTS "Override the addition of tests" ON)
62
63 if (NOT BUILDARCH)
64   include (TargetArch)
65   target_architecture (DETECTED_ARCH)
66   message( INFO " - Target arch is ${DETECTED_ARCH}")
67 else ()
68   set (DETECTED_ARCH ${BUILDARCH})
69   message( INFO " - Override arch is ${DETECTED_ARCH}")
70 endif()
71
72 if (DETECTED_ARCH STREQUAL "i586" OR DETECTED_ARCH STREQUAL "x86_64"
73     OR DETECTED_ARCH STREQUAL "i386")
74   set (X86PLAT ON)
75 elseif (DETECTED_ARCH MATCHES "arm.*")
76   set (ARMPLAT ON)
77 else ()
78   message(FATAL_ERROR "Only x86 and arm platforms currently supported")
79 endif()
80
81 if (BUILDSWIGPYTHON)
82   if (BUILDPYTHON3)
83     set (PYTHONBUILD_VERSION 3)
84   else ()
85     set (PYTHONBUILD_VERSION 2.7)
86   endif ()
87   find_package (PythonInterp ${PYTHONBUILD_VERSION} REQUIRED)
88   if (TESTS)
89     if (${PYTHONINTERP_FOUND})
90       enable_testing ()
91       add_subdirectory (tests)
92     endif ()
93   endif ()
94 endif ()
95
96 if (BUILDDOC)
97   # add a target to generate API documentation with Doxygen
98   find_package (Doxygen)
99   if (DOXYGEN_FOUND)
100     configure_file (${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
101     add_custom_target (doc
102       ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
103       WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
104       COMMENT "Generating API documentation with Doxygen" VERBATIM
105     )
106   endif (DOXYGEN_FOUND)
107 endif ()
108
109 if (IPK)
110   # Get target package arch from Yocto ADT sysroot if set or host OS, mapping to Ubuntu name if necessary
111   if (DEFINED ENV{OECORE_TARGET_SYSROOT})
112     GET_FILENAME_COMPONENT (DETECTED_SYSROOT $ENV{OECORE_TARGET_SYSROOT} NAME)
113     string (REGEX REPLACE "-poky-linux" "" TARGET_ARCH "${DETECTED_SYSROOT}")
114   else ()
115     # debian uses amd64 to denote x86_64
116     if (DETECTED_ARCH STREQUAL "x86_64")
117       set (TARGET_ARCH "amd64")
118     else ()
119       set (TARGET_ARCH ${DETECTED_ARCH})
120     endif ()
121   endif ()
122   message (INFO " - Package arch is ${TARGET_ARCH}")
123
124   set(CPACK_GENERATOR "DEB" "TGZ")
125   set(OPKG_ARCH ${TARGET_ARCH})
126   set(CPACK_BINARY_DIR ${CMAKE_BINARY_DIR})
127   set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Intel IoT-Devkit") #required
128   set(mraa_PACKAGE_ON_TAG ".")
129   if ("${VERSION_COMMIT}" STREQUAL "")
130     set(mraa_PACKAGE_ON_TAG "")
131   endif()
132   set(CPACK_PACKAGE_VERSION 
133       "${mraa_VERSION_MAJOR}.${mraa_VERSION_MINOR}.${mraa_VERSION_PATCH}${mraa_PACKAGE_ON_TAG}${VERSION_COMMIT}")
134   set(CPACK_PACKAGE_NAME "libmraa${mraa_VERSION_MAJOR}")
135   set(CPACK_DEBIAN_PACKAGE_SECTION "libs")
136   set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${TARGET_ARCH})
137   set(CPACK_SYSTEM_NAME ${TARGET_ARCH})
138   set(CPACK_DEBIAN_PACKAGE_PROVIDES "libmraa-dev, libmraa-dbg, libmraa-doc")
139   set(CPACK_DEBIAN_PACKAGE_REPLACES ${CPACK_DEBIAN_PACKAGE_PROVIDES})
140   set(CPACK_DEBIAN_PACKAGE_CONFLICTS ${CPACK_DEBIAN_PACKAGE_PROVIDES})
141   set(WDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}")
142   include (CPack)
143 endif()
144
145 add_subdirectory (src)
146 add_subdirectory (examples)