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}")
|