Statistics
| Branch: | Tag: | Revision:

root / host / CMakeLists.txt @ 2033713d

History | View | Annotate | Download (9.8 KB)

1
#
2
# Copyright 2010-2012 Ettus Research LLC
3
#
4
# This program is free software: you can redistribute it and/or modify
5
# it under the terms of the GNU General Public License as published by
6
# the Free Software Foundation, either version 3 of the License, or
7
# (at your option) any later version.
8
#
9
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
# GNU General Public License for more details.
13
#
14
# You should have received a copy of the GNU General Public License
15
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
16
#
17

    
18
########################################################################
19
#IF(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
20
#    MESSAGE(FATAL_ERROR "Prevented in-tree built. This is bad practice.")
21
#ENDIF(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
22

    
23
########################################################################
24
# Project setup
25
########################################################################
26
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
27
PROJECT(UHD CXX)
28
ENABLE_TESTING()
29
LIST(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules)
30
INCLUDE(UHDComponent) #enable components
31
INCLUDE(UHDPackage)   #setup cpack
32

    
33
########################################################################
34
# Install Dirs
35
########################################################################
36
#when the library suffix should be 64 (applies to redhat linux family)
37
IF(NOT DEFINED LIB_SUFFIX AND REDHAT AND CMAKE_SYSTEM_PROCESSOR MATCHES "64$")
38
    SET(LIB_SUFFIX 64)
39
ENDIF()
40
SET(LIB_SUFFIX ${LIB_SUFFIX} CACHE STRING "lib directory suffix")
41
SET(RUNTIME_DIR bin)
42
SET(LIBRARY_DIR lib${LIB_SUFFIX})
43
SET(INCLUDE_DIR include)
44
SET(PKG_DATA_DIR share/uhd)
45
IF(NOT DEFINED PKG_LIB_DIR)
46
    SET(PKG_LIB_DIR ${PKG_DATA_DIR})
47
ENDIF()
48
SET(PKG_DOC_DIR share/doc/uhd)
49

    
50
########################################################################
51
# Local Include Dir
52
########################################################################
53
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include)
54

    
55
########################################################################
56
# Optional Compiler Flags
57
########################################################################
58
INCLUDE(CheckCXXCompilerFlag)
59
MACRO(UHD_ADD_OPTIONAL_CXX_COMPILER_FLAG flag have)
60
    CHECK_CXX_COMPILER_FLAG(${flag} ${have})
61
    IF(${have})
62
        ADD_DEFINITIONS(${flag})
63
    ENDIF(${have})
64
ENDMACRO(UHD_ADD_OPTIONAL_CXX_COMPILER_FLAG)
65

    
66
#select the release build type by default to get optimization flags
67
IF(NOT CMAKE_BUILD_TYPE)
68
   SET(CMAKE_BUILD_TYPE "Release")
69
   MESSAGE(STATUS "Build type not specified: defaulting to release.")
70
ENDIF(NOT CMAKE_BUILD_TYPE)
71
SET(CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE}" CACHE STRING "")
72

    
73
IF(CMAKE_COMPILER_IS_GNUCXX)
74
    ADD_DEFINITIONS(-Wall)
75
    ADD_DEFINITIONS(-Wextra)
76
    ADD_DEFINITIONS(-Wsign-compare)
77
    #ADD_DEFINITIONS(-Wconversion)
78
    #ADD_DEFINITIONS(-pedantic)
79
    #ADD_DEFINITIONS(-ansi)
80
    IF(NOT WIN32)
81
        #only export symbols that are declared to be part of the uhd api (non dll platforms)
82
        UHD_ADD_OPTIONAL_CXX_COMPILER_FLAG(-fvisibility=hidden HAVE_VISIBILITY_HIDDEN)
83
        UHD_ADD_OPTIONAL_CXX_COMPILER_FLAG(-fvisibility-inlines-hidden HAVE_VISIBILITY_INLINES_HIDDEN)
84
    ENDIF(NOT WIN32)
85
ENDIF(CMAKE_COMPILER_IS_GNUCXX)
86

    
87
IF(MSVC)
88
    INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/cmake/msvc)
89
    ADD_DEFINITIONS( #stop all kinds of compatibility warnings
90
        -D_SCL_SECURE_NO_WARNINGS
91
        -D_SCL_SECURE_NO_DEPRECATE
92
        -D_CRT_SECURE_NO_WARNINGS
93
        -D_CRT_SECURE_NO_DEPRECATE
94
        -D_CRT_NONSTDC_NO_WARNINGS
95
        -D_CRT_NONSTDC_NO_DEPRECATE
96
    )
97
ENDIF(MSVC)
98

    
99
IF(CYGWIN)
100
    ADD_DEFINITIONS(-D__USE_W32_SOCKETS) #boost asio says we need this
101
ENDIF(CYGWIN)
102

    
103
IF(WIN32)
104
    ADD_DEFINITIONS(-D_WIN32_WINNT=0x0501) #minimum version required is windows xp
105
    ADD_DEFINITIONS(-DNOMINMAX) #disables stupidity and enables std::min and std::max
106
ENDIF(WIN32)
107

    
108
########################################################################
109
# Setup Boost
110
########################################################################
111
MESSAGE(STATUS "")
112
MESSAGE(STATUS "Configuring Boost C++ Libraries...")
113
SET(BOOST_REQUIRED_COMPONENTS
114
    date_time
115
    filesystem
116
    program_options
117
    regex
118
    system
119
    thread
120
    unit_test_framework
121
)
122

    
123
IF(UNIX AND EXISTS "/usr/lib64")
124
    LIST(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix
125
ENDIF(UNIX AND EXISTS "/usr/lib64")
126

    
127
IF(MSVC)
128
    SET(BOOST_ALL_DYN_LINK "${BOOST_ALL_DYN_LINK}" CACHE BOOL "boost enable dynamic linking")
129
    IF(BOOST_ALL_DYN_LINK)
130
        ADD_DEFINITIONS(-DBOOST_ALL_DYN_LINK) #setup boost auto-linking in msvc
131
    ELSE(BOOST_ALL_DYN_LINK)
132
        UNSET(BOOST_REQUIRED_COMPONENTS) #empty components list for static link
133
    ENDIF(BOOST_ALL_DYN_LINK)
134
ENDIF(MSVC)
135

    
136
SET(Boost_ADDITIONAL_VERSIONS
137
    "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" "1.39"
138
    "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" "1.44"
139
    "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" "1.49"
140
    "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" "1.54"
141
    "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" "1.59"
142
    "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"
143
    "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"
144
)
145
FIND_PACKAGE(Boost 1.36 COMPONENTS ${BOOST_REQUIRED_COMPONENTS})
146

    
147
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
148
LINK_DIRECTORIES(${Boost_LIBRARY_DIRS})
149

    
150
MESSAGE(STATUS "Boost include directories: ${Boost_INCLUDE_DIRS}")
151
MESSAGE(STATUS "Boost library directories: ${Boost_LIBRARY_DIRS}")
152
MESSAGE(STATUS "Boost libraries: ${Boost_LIBRARIES}")
153

    
154
########################################################################
155
# Check Python Modules
156
########################################################################
157
INCLUDE(UHDPython)
158

    
159
PYTHON_CHECK_MODULE(
160
    "Python version 2.6 or greater"
161
    "platform" "platform.python_version() >= '2.6'"
162
    HAVE_PYTHON_PLAT_MIN_VERSION
163
)
164

    
165
PYTHON_CHECK_MODULE(
166
    "Cheetah templates 2.0.0 or greater"
167
    "Cheetah" "Cheetah.Version >= '2.0.0'"
168
    HAVE_PYTHON_MODULE_CHEETAH
169
)
170

    
171
########################################################################
172
# Create Uninstall Target
173
########################################################################
174
CONFIGURE_FILE(
175
    ${CMAKE_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in
176
    ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
177
@ONLY)
178

    
179
ADD_CUSTOM_TARGET(uninstall
180
    ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
181
)
182

    
183
########################################################################
184
# Install Package Docs
185
########################################################################
186
INSTALL(FILES
187
    ${CMAKE_CURRENT_SOURCE_DIR}/README.txt
188
    ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.txt
189
    ${CMAKE_CURRENT_SOURCE_DIR}/AUTHORS.txt
190
    DESTINATION ${PKG_DOC_DIR}
191
    COMPONENT readme
192
)
193

    
194
########################################################################
195
# Register top level components
196
########################################################################
197
LIBUHD_REGISTER_COMPONENT("LibUHD" ENABLE_LIBUHD ON "Boost_FOUND;HAVE_PYTHON_PLAT_MIN_VERSION;HAVE_PYTHON_MODULE_CHEETAH" OFF)
198
LIBUHD_REGISTER_COMPONENT("Examples" ENABLE_EXAMPLES ON "ENABLE_LIBUHD" OFF)
199
LIBUHD_REGISTER_COMPONENT("Utils" ENABLE_UTILS ON "ENABLE_LIBUHD" OFF)
200
LIBUHD_REGISTER_COMPONENT("Tests" ENABLE_TESTS ON "ENABLE_LIBUHD" OFF)
201

    
202
########################################################################
203
# Add the subdirectories
204
########################################################################
205
ADD_SUBDIRECTORY(docs)
206

    
207
IF(ENABLE_EXAMPLES)
208
    ADD_SUBDIRECTORY(examples)
209
ENDIF(ENABLE_EXAMPLES)
210

    
211
ADD_SUBDIRECTORY(include)
212

    
213
IF(ENABLE_LIBUHD)
214
    ADD_SUBDIRECTORY(lib)
215
ENDIF(ENABLE_LIBUHD)
216

    
217
IF(ENABLE_TESTS)
218
    ADD_SUBDIRECTORY(tests)
219
ENDIF(ENABLE_TESTS)
220

    
221
IF(ENABLE_UTILS)
222
    ADD_SUBDIRECTORY(utils)
223
ENDIF(ENABLE_UTILS)
224

    
225
ADD_SUBDIRECTORY(usrp_e_utils)
226

    
227
########################################################################
228
# Create Pkg Config File
229
########################################################################
230
FOREACH(inc ${Boost_INCLUDE_DIRS})
231
    LIST(APPEND UHD_PC_CFLAGS "-I${inc}")
232
ENDFOREACH(inc)
233

    
234
FOREACH(lib ${Boost_LIBRARY_DIRS})
235
    LIST(APPEND UHD_PC_LIBS "-L${lib}")
236
ENDFOREACH(lib)
237

    
238
#use space-separation format for the pc file
239
STRING(REPLACE ";" " " UHD_PC_REQUIRES "${UHD_PC_REQUIRES}")
240
STRING(REPLACE ";" " " UHD_PC_CFLAGS "${UHD_PC_CFLAGS}")
241
STRING(REPLACE ";" " " UHD_PC_LIBS "${UHD_PC_LIBS}")
242

    
243
#unset these vars to avoid hard-coded paths to cross environment
244
IF(CMAKE_CROSSCOMPILING)
245
    UNSET(UHD_PC_CFLAGS)
246
    UNSET(UHD_PC_LIBS)
247
ENDIF(CMAKE_CROSSCOMPILING)
248

    
249
CONFIGURE_FILE(
250
    ${CMAKE_CURRENT_SOURCE_DIR}/uhd.pc.in
251
    ${CMAKE_CURRENT_BINARY_DIR}/uhd.pc
252
@ONLY)
253

    
254
INSTALL(
255
    FILES ${CMAKE_CURRENT_BINARY_DIR}/uhd.pc
256
    DESTINATION ${LIBRARY_DIR}/pkgconfig
257
    COMPONENT libraries
258
)
259

    
260
########################################################################
261
# Handle pre-built images
262
########################################################################
263
IF(DEFINED UHD_IMAGES_DIR AND EXISTS "${UHD_IMAGES_DIR}")
264
    FILE(GLOB _image_files "${UHD_IMAGES_DIR}/*.*")
265
    MESSAGE(STATUS "Using images:")
266
    FOREACH(_img ${_image_files})
267
        MESSAGE(STATUS "  ${_img}")
268
    ENDFOREACH(_img)
269
    INSTALL(FILES ${_image_files} DESTINATION ${PKG_DATA_DIR}/images COMPONENT images)
270
ENDIF(DEFINED UHD_IMAGES_DIR AND EXISTS "${UHD_IMAGES_DIR}")
271

    
272
########################################################################
273
# Print Summary
274
########################################################################
275
UHD_PRINT_COMPONENT_SUMMARY()
276
MESSAGE(STATUS "Building version: ${UHD_VERSION}")
277
MESSAGE(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")