Now gflags and google-glog are downloaded, configured, build and linked automatically when doing "make". Since gflags is a prerequisite for the proper functioning of glog, glog is always built locally when gflags is missing.

git-svn-id: https://svn.code.sf.net/p/gnss-sdr/code/trunk@305 64b25241-fba3-4117-9849-534c7e92360d
This commit is contained in:
Carles Fernandez 2013-01-01 11:24:42 +00:00
parent 74668e14dd
commit 6628e5e2d8
6 changed files with 143 additions and 100 deletions

View File

@ -97,17 +97,85 @@ find_package(Boost COMPONENTS date_time filesystem system thread REQUIRED)
#endif() #endif()
################################################################################
# gflags - http://code.google.com/p/gflags/
################################################################################
find_package(GFlags)
if (NOT GFlags_FOUND OR LOCAL_GFLAGS)
message (" gflags library has not been found.")
message (" gflags will be downloaded and built automatically ")
message (" when doing 'make'. ")
set(gflags_RELEASE 2.0 CACHE STRING "Local gflags release")
set(gflags_MD5 "5fd4554d2ba84bf222a2fec0870d28df")
ExternalProject_Add(
gflags-${gflags_RELEASE}
URL http://gflags.googlecode.com/files/gflags-${gflags_RELEASE}.zip
DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR}/download/gflags-${gflags_RELEASE}
URL_MD5 ${gflags_MD5}
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/gflags/gflags-${gflags_RELEASE}
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/gflags-${gflags_RELEASE}
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=${CMAKE_CURRENT_BINARY_DIR}/gflags-${gflags_RELEASE}
#BUILD_IN_SOURCE 1
BUILD_COMMAND make
UPDATE_COMMAND ""
PATCH_COMMAND ""
INSTALL_COMMAND ""
)
set(GFlags_INCLUDE_DIRS
${CMAKE_CURRENT_BINARY_DIR}/gflags-${gflags_RELEASE}/src CACHE PATH "Local Gflags headers"
)
set(GFlags_LIBS
${CMAKE_CURRENT_BINARY_DIR}/gflags-${gflags_RELEASE}/.libs/${CMAKE_FIND_LIBRARY_PREFIXES}gflags.a
)
set(GFlags_LIBRARY gflags-${gflags_RELEASE})
set(gflags gflags-${gflags_RELEASE})
set(GFlags_LIBRARY_PATH ${CMAKE_CURRENT_BINARY_DIR}/gflags-${gflags_RELEASE}/.libs )
link_directories(${GFlags_LIBRARY_PATH})
set(GFlags_lib ${GFlags_LIBS} CACHE FILEPATH "Local Gflags library")
set(GFlags_LIBRARY_PATH ${GFlags_LIBS})
set(LOCAL_GFLAGS true CACHE STRING "GFlags downloaded and build automatically")
endif(NOT GFlags_FOUND OR LOCAL_GFLAGS)
include_directories(${GFlags_INCLUDE_DIRS})
################################################################################ ################################################################################
# glog - http://code.google.com/p/google-glog/ # glog - http://code.google.com/p/google-glog/
################################################################################ ################################################################################
find_package(GLOG) find_package(GLOG)
if ( NOT GLOG_FOUND ) if (NOT GLOG_FOUND OR LOCAL_GFLAGS)
message (" glog library has not been found.") message (" glog library has not been found")
if(LOCAL_GFLAGS)
message(" or it is likely not linked to gflags.")
endif(LOCAL_GFLAGS)
message (" glog will be downloaded and built automatically ") message (" glog will be downloaded and built automatically ")
message (" when doing 'make'. ") message (" when doing 'make'. ")
set(glog_RELEASE 0.3.2) set(glog_RELEASE 0.3.2)
set(glog_MD5 "897fbff90d91ea2b6d6e78c8cea641cc") set(glog_MD5 "897fbff90d91ea2b6d6e78c8cea641cc")
if(LOCAL_GFLAGS)
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE}/tmp/configure_with_gflags
"#!/bin/sh
export CPPFLAGS=-I${GFlags_INCLUDE_DIRS}
export LDFLAGS=-L${CMAKE_CURRENT_BINARY_DIR}/gflags-${gflags_RELEASE}/.libs
export LIBS=${GFlags_LIBS}
export GFLAGS_LIBS=${GFlags_LIBS}
../../thirdparty/glog/glog-${glog_RELEASE}/configure ")
file(COPY ${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE}/tmp/configure_with_gflags
DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE}
FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ
GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
set(GLOG_CONFIGURE ${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE}/configure_with_gflags)
else(LOCAL_GFLAGS)
set(GLOG_CONFIGURE ../../thirdparty/glog/glog-${glog_RELEASE}/configure)
endif(LOCAL_GFLAGS)
ExternalProject_Add( ExternalProject_Add(
glog-${glog_RELEASE} glog-${glog_RELEASE}
URL http://google-glog.googlecode.com/files/glog-${glog_RELEASE}.tar.gz URL http://google-glog.googlecode.com/files/glog-${glog_RELEASE}.tar.gz
@ -115,7 +183,7 @@ if ( NOT GLOG_FOUND )
URL_MD5 ${glog_MD5} URL_MD5 ${glog_MD5}
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/glog/glog-${glog_RELEASE} SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/glog/glog-${glog_RELEASE}
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE} BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE}
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=<INSTALL_DIR> CONFIGURE_COMMAND ${GLOG_CONFIGURE} --prefix=<INSTALL_DIR>
BUILD_COMMAND make BUILD_COMMAND make
UPDATE_COMMAND "" UPDATE_COMMAND ""
PATCH_COMMAND "" PATCH_COMMAND ""
@ -127,24 +195,11 @@ if ( NOT GLOG_FOUND )
${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE}/src ${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE}/src
) )
set(GLOG_LIBRARIES set(GLOG_LIBRARIES
${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE}/.libs/${CMAKE_FIND_LIBRARY_PREFIXES}glog.so ${CMAKE_CURRENT_BINARY_DIR}/glog-${glog_RELEASE}/.libs/${CMAKE_FIND_LIBRARY_PREFIXES}glog.a
) )
set(glog ${GLOG_LIBRARIES}) endif(NOT GLOG_FOUND OR LOCAL_GFLAGS)
endif( NOT GLOG_FOUND)
include_directories(${GLOG_INCLUDE_DIRS}) include_directories(${GLOG_INCLUDE_DIRS})
################################################################################
# gflags - http://code.google.com/p/gflags/
################################################################################
find_package(GFlags REQUIRED)
if ( NOT GFlags_FOUND )
message(FATAL_ERROR "gflags library not found! Please check http://code.google.com/p/gflags/")
else( NOT GFlags_FOUND )
message ( "gflags library found." )
endif( NOT GFlags_FOUND )
include_directories(${GFlags_INCLUDE_DIRS})
################################################################################ ################################################################################
# GPerftools - http://code.google.com/p/gperftools/ # GPerftools - http://code.google.com/p/gperftools/
################################################################################ ################################################################################
@ -248,7 +303,7 @@ include_directories(
${GRUEL_INCLUDE_DIRS} ${GRUEL_INCLUDE_DIRS}
${GNURADIO_CORE_INCLUDE_DIRS} ${GNURADIO_CORE_INCLUDE_DIRS}
${GLOG_INCLUDE_DIRS} ${GLOG_INCLUDE_DIRS}
${GFLAGS_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS}
${UHD_INCLUDE_DIRS} ${UHD_INCLUDE_DIRS}
${GPERFTOOLS_INCLUDE_DIRS} ${GPERFTOOLS_INCLUDE_DIRS}
) )
@ -296,8 +351,6 @@ list(APPEND CMAKE_CXX_FLAGS ${MY_CXX_FLAGS})
######################################################################## ########################################################################
add_subdirectory(src) add_subdirectory(src)
#add_subdirectory(drivers)
#add_subdirectory(firmware)

View File

@ -7,92 +7,79 @@
# GFlags_FOUND # GFlags_FOUND
# GFlags_INCLUDE_DIRS # GFlags_INCLUDE_DIRS
# GFlags_LIBS # GFlags_LIBS
# GFlags_MODEL_DIRS
# GFlags_LIBRARY_DIRS # GFlags_LIBRARY_DIRS
cmake_minimum_required(VERSION 2.6) cmake_minimum_required(VERSION 2.6)
cmake_policy(SET CMP0011 OLD) cmake_policy(SET CMP0011 OLD)
if (WIN32) if (WIN32)
FIND_PATH(GFlags_ROOT_DIR FIND_PATH(GFlags_ROOT_DIR
src/gflags.cc src/gflags.cc
HINTS HINTS
$ENV{GFLAGS_ROOT}) $ENV{GFLAGS_ROOT})
else (WIN32) else (WIN32)
FIND_PATH(GFlags_ROOT_DIR FIND_PATH(GFlags_ROOT_DIR
libgflags.dylib libgflags.dylib
HINTS HINTS
/usr/local/lib /usr/local/lib
) )
endif (WIN32) endif (WIN32)
if (UNIX) if (UNIX)
FIND_PATH(GFlags_ROOT_DIR FIND_PATH(GFlags_ROOT_DIR
libgflags.so libgflags.so
HINTS HINTS
/usr/local/lib /usr/local/lib
) )
endif (UNIX) endif (UNIX)
IF(GFlags_ROOT_DIR) IF(GFlags_ROOT_DIR)
# We are testing only a couple of files in the include directories # We are testing only a couple of files in the include directories
if (WIN32) if (WIN32)
FIND_PATH(GFlags_INCLUDE_DIRS FIND_PATH(GFlags_INCLUDE_DIRS
gflags/gflags.h gflags/gflags.h
HINTS HINTS
${GFlags_ROOT_DIR}/src/windows ${GFlags_ROOT_DIR}/src/windows
) )
else (WIN32) else (WIN32)
FIND_PATH(GFlags_INCLUDE_DIRS FIND_PATH(GFlags_INCLUDE_DIRS
gflags/gflags.h gflags/gflags.h
HINTS HINTS
/usr/local/include /usr/local/include
${GFlags_ROOT_DIR}/src ${GFlags_ROOT_DIR}/src
) )
endif (WIN32) endif (WIN32)
# Find the libraries # Find the libraries
SET(GFlags_LIBRARY_DIRS ${GFlags_ROOT_DIR}) SET(GFlags_LIBRARY_DIRS ${GFlags_ROOT_DIR})
# TODO: This can use some per-component linking # TODO: This can use some per-component linking
if(MSVC) if(MSVC)
SET(_gflags_libpath_suffixes /Release /Debug) SET(_gflags_libpath_suffixes /Release /Debug)
FIND_LIBRARY(GFlags_lib_release FIND_LIBRARY(GFlags_lib_release
NAMES libgflags NAMES libgflags
HINTS HINTS
${GFlags_LIBRARY_DIRS} ${GFlags_LIBRARY_DIRS}
PATH_SUFFIXES ${_gflags_libpath_suffixes}) PATH_SUFFIXES ${_gflags_libpath_suffixes})
FIND_LIBRARY(GFlags_lib_debug FIND_LIBRARY(GFlags_lib_debug
NAMES libgflags-debug NAMES libgflags-debug
HINTS HINTS
${GFlags_LIBRARY_DIRS} ${GFlags_LIBRARY_DIRS}
PATH_SUFFIXES ${_gflags_libpath_suffixes}) PATH_SUFFIXES ${_gflags_libpath_suffixes})
SET(GFlags_lib optimized ${GFlags_lib_release} debug ${GFlags_lib_debug}) SET(GFlags_lib optimized ${GFlags_lib_release} debug ${GFlags_lib_debug})
else() else()
FIND_LIBRARY(GFlags_lib gflags ${GFlags_LIBRARY_DIRS}) FIND_LIBRARY(GFlags_lib gflags ${GFlags_LIBRARY_DIRS})
endif() endif()
# set up include and link directory
include_directories(${GFlags_INCLUDE_DIRS})
# set up include and link directory link_directories(${GFlags_LIBRARY_DIRS})
include_directories( message("gflags library found at ${GFlags_lib}")
${GFlags_INCLUDE_DIRS} SET(GFlags_LIBS ${GFlags_lib})
) SET(GFlags_FOUND true)
link_directories(${GFlags_LIBRARY_DIRS}) MARK_AS_ADVANCED(GFlags_INCLUDE_DIRS)
SET(GFlags_LIBS
${GFlags_lib}
)
SET(GFlags_FOUND true)
MARK_AS_ADVANCED(
GFlags_INCLUDE_DIRS
)
ELSE(GFlags_ROOT_DIR) ELSE(GFlags_ROOT_DIR)
FIND_PATH(GFlags_ROOT_DIR FIND_PATH(GFlags_ROOT_DIR src)
src MARK_AS_ADVANCED(GFlags_ROOT_DIR)
) MESSAGE(STATUS "Cannot find Root directory of gflags")
MARK_AS_ADVANCED(GFlags_ROOT_DIR) SET(GFlags_FOUND false)
MESSAGE(SEND_ERROR "Cannot find Root directory of Google Flags")
SET(GFlags_FOUND false)
ENDIF(GFlags_ROOT_DIR) ENDIF(GFlags_ROOT_DIR)

View File

@ -69,7 +69,7 @@ else(MSVC)
endif(APPLE) endif(APPLE)
endif(MSVC) endif(MSVC)
message("glog library = " ${GLOG_LIBRARIES}) message("glog library found at ${GLOG_LIBRARIES}")
# handle the QUIETLY and REQUIRED arguments and set GLOG_FOUND to TRUE if # handle the QUIETLY and REQUIRED arguments and set GLOG_FOUND to TRUE if
# all listed variables are TRUE # all listed variables are TRUE

View File

@ -37,4 +37,4 @@ include_directories(
) )
add_library(pvt_lib ${PVT_LIB_SOURCES}) add_library(pvt_lib ${PVT_LIB_SOURCES})
target_link_libraries(pvt_lib ${Boost_LIBRARIES} ${ARMADILLO_LIBRARY}) target_link_libraries(pvt_lib ${Boost_LIBRARIES} ${GFlags_LIBS} ${ARMADILLO_LIBRARY})

View File

@ -29,10 +29,11 @@ include_directories(
) )
add_executable(gnss-sdr ${CMAKE_CURRENT_SOURCE_DIR}/main.cc) add_executable(gnss-sdr ${CMAKE_CURRENT_SOURCE_DIR}/main.cc)
target_link_libraries(gnss-sdr ${Boost_LIBRARIES} ${GLOG_LIBRARIES} ${GFlags_LIBS} gnss_sp_libs gnss_rx)
target_link_libraries(gnss-sdr ${Boost_LIBRARIES} ${GLOG_LIBRARIES} gflags gnss_sp_libs gnss_rx) #add_dependencies(gnss-sdr gflags-${glags_RELEASE} glog-${glog_RELEASE} STATIC)############
install(TARGETS gnss-sdr install(TARGETS gnss-sdr
DESTINATION ${CMAKE_SOURCE_DIR}/install DESTINATION ${CMAKE_SOURCE_DIR}/install
) )

View File

@ -80,8 +80,10 @@ include_directories(
${Boost_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS}
) )
add_executable(run_tests ${CMAKE_CURRENT_SOURCE_DIR}/test_main.cc) add_executable(run_tests ${CMAKE_CURRENT_SOURCE_DIR}/test_main.cc)
target_link_libraries(run_tests ${Boost_LIBRARIES} ${GLOG_LIBRARIES} gflags ${GTEST_LIBRARIES} gnss_sp_libs gnss_rx) target_link_libraries(run_tests ${Boost_LIBRARIES} ${GFLAGS_LIBS} ${GLOG_LIBRARIES} ${GTEST_LIBRARIES} gnss_sp_libs gnss_rx)
install(TARGETS run_tests DESTINATION ${CMAKE_SOURCE_DIR}/install) install(TARGETS run_tests DESTINATION ${CMAKE_SOURCE_DIR}/install)
######################################################### #########################################################
@ -96,7 +98,7 @@ add_executable(control_thread_test EXCLUDE_FROM_ALL
${CMAKE_CURRENT_SOURCE_DIR}/single_test_main.cc ${CMAKE_CURRENT_SOURCE_DIR}/single_test_main.cc
${CMAKE_CURRENT_SOURCE_DIR}/control_thread/control_message_factory_test.cc ${CMAKE_CURRENT_SOURCE_DIR}/control_thread/control_message_factory_test.cc
) )
target_link_libraries(control_thread_test ${Boost_LIBRARIES} ${GLOG_LIBRARIES} gflags ${GTEST_LIBRARIES} gnss_sp_libs gnss_rx) target_link_libraries(control_thread_test ${Boost_LIBRARIES} ${GFLAGS_LIBS} ${GLOG_LIBRARIES} ${GTEST_LIBRARIES} gnss_sp_libs gnss_rx)
add_test(control_thread_test control_thread_test) add_test(control_thread_test control_thread_test)
add_executable(gnss_block_test EXCLUDE_FROM_ALL add_executable(gnss_block_test EXCLUDE_FROM_ALL
@ -110,7 +112,7 @@ add_executable(gnss_block_test EXCLUDE_FROM_ALL
${CMAKE_CURRENT_SOURCE_DIR}/gnss_block/file_output_filter_test.cc ${CMAKE_CURRENT_SOURCE_DIR}/gnss_block/file_output_filter_test.cc
${CMAKE_CURRENT_SOURCE_DIR}/gnss_block/gnss_block_factory_test.cc ${CMAKE_CURRENT_SOURCE_DIR}/gnss_block/gnss_block_factory_test.cc
) )
target_link_libraries(gnss_block_test ${Boost_LIBRARIES} ${GLOG_LIBRARIES} gflags ${GTEST_LIBRARIES} gnss_sp_libs gnss_rx) target_link_libraries(gnss_block_test ${Boost_LIBRARIES} ${GFLAGS_LIBS} ${GLOG_LIBRARIES} ${GTEST_LIBRARIES} gnss_sp_libs gnss_rx)
add_test(gnss_block_test gnss_block_test) add_test(gnss_block_test gnss_block_test)