iio: Add initial module
[contrib/mraa.git] / src / CMakeLists.txt
1 set (mraa_LIB_INCLUDE_DIRS
2   ${PROJECT_SOURCE_DIR}/api
3   ${PROJECT_SOURCE_DIR}/api/mraa
4   ${PROJECT_SOURCE_DIR}/include
5 )
6
7 include_directories(
8   ${mraa_LIB_INCLUDE_DIRS}
9 )
10
11 set (mraa_LIB_SRCS_NOAUTO
12   ${PROJECT_SOURCE_DIR}/src/mraa.c
13   ${PROJECT_SOURCE_DIR}/src/gpio/gpio.c
14   ${PROJECT_SOURCE_DIR}/src/i2c/i2c.c
15   ${PROJECT_SOURCE_DIR}/src/pwm/pwm.c
16   ${PROJECT_SOURCE_DIR}/src/spi/spi.c
17   ${PROJECT_SOURCE_DIR}/src/aio/aio.c
18   ${PROJECT_SOURCE_DIR}/src/uart/uart.c
19   ${PROJECT_SOURCE_DIR}/src/iio/iio.c
20 )
21
22 set (mraa_LIB_X86_SRCS_NOAUTO
23   ${PROJECT_SOURCE_DIR}/src/x86/x86.c
24   ${PROJECT_SOURCE_DIR}/src/x86/intel_galileo_rev_d.c
25   ${PROJECT_SOURCE_DIR}/src/x86/intel_galileo_rev_g.c
26   ${PROJECT_SOURCE_DIR}/src/x86/intel_edison_fab_c.c
27   ${PROJECT_SOURCE_DIR}/src/x86/intel_de3815.c
28   ${PROJECT_SOURCE_DIR}/src/x86/intel_nuc5.c
29   ${PROJECT_SOURCE_DIR}/src/x86/intel_minnow_byt_compatible.c
30 )
31
32 message (INFO " - Adding support for platform ${MRAAPLATFORMFORCE}")
33
34 #keywords in if statements are case sensitive
35 if (NOT ${MRAAPLATFORMFORCE} STREQUAL "ALL")
36   set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Dx${MRAAPLATFORMFORCE} -DMRAA_PLATFORM_FORCE=${MRAAPLATFORMFORCE}")
37   if (${MRAAPLATFORMFORCE} STREQUAL "MRAA_INTEL_GALILEO_GEN2")
38     set (mraa_LIB_X86_SRCS_NOAUTO ${PROJECT_SOURCE_DIR}/src/x86/x86.c ${PROJECT_SOURCE_DIR}/src/x86/intel_galileo_rev_g.c)
39   elseif (${MRAAPLATFORMFORCE} STREQUAL "MRAA_INTEL_GALILEO_GEN1")
40     set (mraa_LIB_X86_SRCS_NOAUTO ${PROJECT_SOURCE_DIR}/src/x86/x86.c ${PROJECT_SOURCE_DIR}/src/x86/intel_galileo_rev_d.c)
41   elseif (${MRAAPLATFORMFORCE} STREQUAL "MRAA_INTEL_DE3815")
42     set (mraa_LIB_X86_SRCS_NOAUTO ${PROJECT_SOURCE_DIR}/src/x86/x86.c ${PROJECT_SOURCE_DIR}/src/x86/intel_de3815.c)
43   elseif (${MRAAPLATFORMFORCE} STREQUAL "MRAA_INTEL_EDISON_FAB_C")
44     set (mraa_LIB_X86_SRCS_NOAUTO ${PROJECT_SOURCE_DIR}/src/x86/x86.c ${PROJECT_SOURCE_DIR}/src/x86/intel_edison_fab_c.c)
45   elseif (${MRAAPLATFORMFORCE} STREQUAL "MRAA_INTEL_MINNOWBOARD_MAX")
46     set (mraa_LIB_X86_SRCS_NOAUTO ${PROJECT_SOURCE_DIR}/src/x86/x86.c ${PROJECT_SOURCE_DIR}/src/x86/intel_minnow_byt_compatible.c)
47   elseif (${MRAAPLATFORMFORCE} STREQUAL "MRAA_INTEL_NUC5")
48     set (mraa_LIB_X86_SRCS_NOAUTO ${PROJECT_SOURCE_DIR}/src/x86/x86.c ${PROJECT_SOURCE_DIR}/src/x86/intel_nuc5.c)
49   else ()
50     message (ERROR " - Unknown x86 platform enabled!")
51   endif ()
52 else ()
53     message (INFO " - Adding support for all platforms")
54 endif ()
55
56 set (mraa_LIB_ARM_SRCS_NOAUTO
57   ${PROJECT_SOURCE_DIR}/src/arm/arm.c
58   ${PROJECT_SOURCE_DIR}/src/arm/96boards.c
59   ${PROJECT_SOURCE_DIR}/src/arm/raspberry_pi.c
60   ${PROJECT_SOURCE_DIR}/src/arm/beaglebone.c
61   ${PROJECT_SOURCE_DIR}/src/arm/banana.c
62 )
63
64 set (mraa_LIBS ${CMAKE_THREAD_LIBS_INIT})
65
66 if (X86PLAT)
67   add_subdirectory(x86)
68   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DX86PLAT=1")
69 endif()
70
71 if (ARMPLAT)
72   add_subdirectory(arm)
73   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DARMPLAT=1")
74 endif()
75
76 if (USBPLAT)
77   message (INFO " - Adding USB platforms")
78   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DUSBPLAT=1")
79   if (FTDID2xx)
80     find_package (Ftd2xx)
81     if (${LIBFTD2XX_FOUND})
82       set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DFTDID2XX=1")
83       set (mraa_LIBS ${mraa_LIBS} ${LIBFTD2XX_LIBRARIES})
84     else ()
85       message (WARNING " - Enabled FTDID2xx support but library not found")
86     endif ()
87   endif ()
88   if (FTDI4222)
89     find_package (Ftd4222)
90     if (${LIBFT4222_FOUND})
91       set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DFTDI4222=1")
92       set (mraa_LIBS ${mraa_LIBS} ${LIBFT4222_LIBRARIES})
93     else ()
94       message (WARNING " - Enabled FTDI4222 support but library not found")
95     endif ()
96   endif ()
97   add_subdirectory(usb)
98 endif ()
99
100 set (mraa_LIB_SRCS
101   ${mraa_LIB_PLAT_SRCS_NOAUTO}
102 # autogenerated version file
103   ${CMAKE_CURRENT_BINARY_DIR}/version.c
104 )
105
106 set (mraa_LIB_GLOB_HEADERS
107   ${PROJECT_SOURCE_DIR}/api/mraa.h
108   ${PROJECT_SOURCE_DIR}/api/mraa.hpp
109 )
110
111 add_library (mraa SHARED ${mraa_LIB_SRCS})
112
113
114 target_link_libraries (mraa ${mraa_LIBS})
115
116 set_target_properties(
117    mraa
118    PROPERTIES
119    SOVERSION ${mraa_VERSION_MAJOR}
120    VERSION ${mraa_VERSION_STRING}
121 )
122 install (FILES ${mraa_LIB_GLOB_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
123 install (DIRECTORY ${PROJECT_SOURCE_DIR}/api/mraa/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/mraa)
124
125 macro (mraa_CREATE_INSTALL_PKGCONFIG generated_file install_location)
126   configure_file (${generated_file}.cmake ${CMAKE_CURRENT_BINARY_DIR}/${generated_file} @ONLY)
127   install (FILES ${CMAKE_CURRENT_BINARY_DIR}/${generated_file} DESTINATION ${install_location})
128 endmacro (mraa_CREATE_INSTALL_PKGCONFIG)
129 mraa_create_install_pkgconfig (mraa.pc ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
130
131 install(TARGETS mraa DESTINATION ${CMAKE_INSTALL_LIBDIR})
132
133 if (DOXYGEN_FOUND)
134   set (CMAKE_SWIG_FLAGS -DDOXYGEN=${DOXYGEN_FOUND})
135   set (DOCCLASSES aio gpio i2c pwm spi uart)
136   # CPP class headers
137   foreach (_file ${DOCCLASSES})
138     add_custom_command (OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_file}_class_doc.i
139       COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/doxy2swig.py -n
140         ${CMAKE_BINARY_DIR}/xml/classmraa_1_1_${_file}.xml
141         ${CMAKE_CURRENT_BINARY_DIR}/${_file}_class_doc.i
142       DEPENDS ${CMAKE_BINARY_DIR}/xml/classmraa_1_1_${_file}.xml
143     )
144     add_custom_target (${_file}class_doc_i DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${_file}_class_doc.i)
145     add_dependencies (${_file}class_doc_i doc)
146   endforeach ()
147   # C header files
148   set (DOCFILES common ${DOCCLASSES})
149   foreach (_file ${DOCFILES})
150     add_custom_command (OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_file}_doc.i
151       COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/doxy2swig.py -n
152         ${CMAKE_BINARY_DIR}/xml/${_file}_8h.xml
153         ${CMAKE_CURRENT_BINARY_DIR}/${_file}_doc.i
154       DEPENDS ${CMAKE_BINARY_DIR}/xml/${_file}_8h.xml
155     )
156     add_custom_target (${_file}doc_i DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${_file}_doc.i)
157     add_dependencies (${_file}doc_i doc)
158   endforeach ()
159   # CPP common header
160   add_custom_command (OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/common_hpp_doc.i
161     COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/doxy2swig.py -n
162       ${CMAKE_BINARY_DIR}/xml/common_8hpp.xml
163       ${CMAKE_CURRENT_BINARY_DIR}//common_hpp_doc.i
164     DEPENDS ${CMAKE_BINARY_DIR}/xml/common_8hpp.xml
165   )
166   add_custom_target (common_hpp_doc_i DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/common_hpp_doc.i)
167   add_dependencies (common_hpp_doc_i doc)
168 endif ()
169
170 if (BUILDSWIG)
171   find_package (SWIG)
172   if (SWIG_FOUND)
173     include (${SWIG_USE_FILE})
174     set_source_files_properties (mraa.i PROPERTIES SWIG_FLAGS "-I${CMAKE_BINARY_DIR}/src")
175
176     if (BUILDSWIGPYTHON)
177       add_subdirectory (python)
178     endif ()
179     if (BUILDSWIGJAVA)
180       add_subdirectory (java)
181     endif ()
182     if (BUILDSWIGNODE)
183       if (SWIG_VERSION VERSION_GREATER 3.0.4)
184         add_subdirectory (javascript)
185       else ()
186         message ("WARN - SWIG is ${SWIG_VERSION}. Please upgrade to 3.0.5+ to build nodejs addon")
187       endif ()
188     endif ()
189   endif ()
190 endif ()