https://wiki.gnuradio.org/index.php/GNU_Radio_3.8_OOT_Module_Porting_Guide Change-Id: I23dd638c8c48ed0a4b50559ce33fbd5e60b7dcbcporting_to_gr38
parent
fa184a9447
commit
1789ae28ee
@ -1,10 +0,0 @@ |
||||
#create logical links in order to keep legacy names of apps |
||||
macro(CREATE_SYMLINK _source _dest) |
||||
set(source ${CMAKE_CURRENT_SOURCE_DIR}/${_source}) |
||||
set(dest ${CMAKE_CURRENT_BINARY_DIR}/${_dest}) |
||||
list(APPEND symlinks ${dest}) |
||||
add_custom_command( |
||||
DEPENDS ${source} OUTPUT ${dest} |
||||
COMMAND ln -sf ${_source} ${_dest} |
||||
) |
||||
endmacro(CREATE_SYMLINK) |
@ -1,36 +0,0 @@ |
||||
INCLUDE(FindPkgConfig) |
||||
PKG_CHECK_MODULES(PC_GNURADIO_RUNTIME gnuradio-runtime) |
||||
|
||||
if(PC_GNURADIO_RUNTIME_FOUND) |
||||
# look for include files |
||||
FIND_PATH( |
||||
GNURADIO_RUNTIME_INCLUDE_DIRS |
||||
NAMES gnuradio/top_block.h |
||||
HINTS $ENV{GNURADIO_RUNTIME_DIR}/include |
||||
${PC_GNURADIO_RUNTIME_INCLUDE_DIRS} |
||||
${CMAKE_INSTALL_PREFIX}/include |
||||
PATHS /usr/local/include |
||||
/usr/include |
||||
) |
||||
|
||||
# look for libs |
||||
FIND_LIBRARY( |
||||
GNURADIO_RUNTIME_LIBRARIES |
||||
NAMES gnuradio-runtime |
||||
HINTS $ENV{GNURADIO_RUNTIME_DIR}/lib |
||||
${PC_GNURADIO_RUNTIME_LIBDIR} |
||||
${CMAKE_INSTALL_PREFIX}/lib/ |
||||
${CMAKE_INSTALL_PREFIX}/lib64/ |
||||
PATHS /usr/local/lib |
||||
/usr/local/lib64 |
||||
/usr/lib |
||||
/usr/lib64 |
||||
) |
||||
|
||||
set(GNURADIO_RUNTIME_FOUND ${PC_GNURADIO_RUNTIME_FOUND}) |
||||
endif(PC_GNURADIO_RUNTIME_FOUND) |
||||
|
||||
INCLUDE(FindPackageHandleStandardArgs) |
||||
# do not check GNURADIO_RUNTIME_INCLUDE_DIRS, is not set when default include path us used. |
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_RUNTIME DEFAULT_MSG GNURADIO_RUNTIME_LIBRARIES) |
||||
MARK_AS_ADVANCED(GNURADIO_RUNTIME_LIBRARIES GNURADIO_RUNTIME_INCLUDE_DIRS) |
@ -1,142 +0,0 @@ |
||||
####################################################################### |
||||
# Find the library for SWIG |
||||
# |
||||
# The goal here is to intercept calls to "FIND_PACKAGE(SWIG)" in order |
||||
# to do a global version check locally after passing on the "find" to |
||||
# SWIG-provided scripts. |
||||
######################################################################## |
||||
|
||||
# make this file non-reentrant within the current context |
||||
|
||||
if(__INCLUDED_FIND_SWIG_CMAKE) |
||||
return() |
||||
endif() |
||||
set(__INCLUDED_FIND_SWIG_CMAKE TRUE) |
||||
|
||||
# some status messages |
||||
|
||||
message(STATUS "") |
||||
message(STATUS "Checking for module SWIG") |
||||
|
||||
# |
||||
# First check to see if SWIG installed its own CMake file, or if the |
||||
# one provided by CMake finds SWIG. |
||||
# |
||||
|
||||
# save the current MODULE path |
||||
|
||||
set(SAVED_CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}) |
||||
|
||||
# clear the current MODULE path; uses system paths only |
||||
|
||||
unset(CMAKE_MODULE_PATH) |
||||
|
||||
# try to find SWIG via the provided parameters, |
||||
# handle REQUIRED internally later |
||||
|
||||
unset(SWIG_FOUND) |
||||
|
||||
# was the version specified? |
||||
|
||||
unset(LOCAL_SWIG_FIND_VERSION) |
||||
if(SWIG_FIND_VERSION) |
||||
set(LOCAL_SWIG_FIND_VERSION ${SWIG_FIND_VERSION}) |
||||
endif(SWIG_FIND_VERSION) |
||||
|
||||
# was EXACT specified? |
||||
|
||||
unset(LOCAL_SWIG_FIND_VERSION_EXACT) |
||||
if(SWIG_FIND_VERSION_EXACT) |
||||
set(LOCAL_SWIG_FIND_VERSION_EXACT "EXACT") |
||||
endif(SWIG_FIND_VERSION_EXACT) |
||||
|
||||
# was REQUIRED specified? |
||||
|
||||
unset(LOCAL_SWIG_FIND_REQUIRED) |
||||
if(SWIG_FIND_REQUIRED) |
||||
set(LOCAL_SWIG_FIND_REQUIRED "REQUIRED") |
||||
endif(SWIG_FIND_REQUIRED) |
||||
|
||||
# try to find SWIG using the provided parameters, quietly; |
||||
# |
||||
# this call will error out internally (and not quietly) if: |
||||
# 1: EXACT is specified and the version found does not match the requested version; |
||||
# 2: REQUIRED is set and SWIG was not found; |
||||
# |
||||
# this call will return SWIG_FOUND == FALSE if REQUIRED is not set, and: |
||||
# 1: SWIG was not found; |
||||
# 2: The version found is less than the requested version. |
||||
|
||||
find_package( |
||||
SWIG |
||||
${LOCAL_SWIG_FIND_VERSION} |
||||
${LOCAL_SWIG_FIND_VERSION_EXACT} |
||||
${LOCAL_SWIG_FIND_REQUIRED} |
||||
QUIET |
||||
) |
||||
|
||||
# restore CMAKE_MODULE_PATH |
||||
|
||||
set(CMAKE_MODULE_PATH ${SAVED_CMAKE_MODULE_PATH}) |
||||
|
||||
# specific version checks |
||||
|
||||
set(SWIG_VERSION_CHECK FALSE) |
||||
if(SWIG_FOUND) |
||||
|
||||
# SWIG was found; make sure the version meets GR's needs |
||||
message(STATUS "Found SWIG version ${SWIG_VERSION}.") |
||||
if("${SWIG_VERSION}" VERSION_GREATER "1.3.30") |
||||
if(NOT "${SWIG_VERSION}" VERSION_EQUAL "3.0.3" AND |
||||
NOT "${SWIG_VERSION}" VERSION_EQUAL "3.0.4") |
||||
set(SWIG_VERSION_CHECK TRUE) |
||||
else() |
||||
message(STATUS "SWIG versions 3.0.3 and 3.0.4 fail to work with GNU Radio.") |
||||
endif() |
||||
else() |
||||
message(STATUS "Minimum SWIG version required is 1.3.31 for GNU Radio.") |
||||
endif() |
||||
|
||||
else() |
||||
|
||||
# SWIG was either not found, or is less than the requested version |
||||
if(SWIG_VERSION) |
||||
# SWIG_VERSION is set, but SWIG_FOUND is false; probably a version mismatch |
||||
message(STATUS "Found SWIG version ${SWIG_VERSION}.") |
||||
message(STATUS "Requested SWIG version is at least ${SWIG_FIND_VERSION}.") |
||||
endif() |
||||
endif() |
||||
|
||||
# did the version check fail? |
||||
|
||||
if(NOT SWIG_VERSION_CHECK) |
||||
|
||||
# yes: clear various variables and set FOUND to FALSE |
||||
message(STATUS "Disabling SWIG because version check failed.") |
||||
unset(SWIG_VERSION CACHE) |
||||
unset(SWIG_DIR CACHE) |
||||
unset(SWIG_EXECUTABLE CACHE) |
||||
set(SWIG_FOUND FALSE CACHE BOOL "Set to TRUE if a compatible version of SWIG is found" FORCE) |
||||
|
||||
endif() |
||||
|
||||
# check to see if SWIG variables were set |
||||
|
||||
if(SWIG_FOUND AND SWIG_DIR AND SWIG_EXECUTABLE) |
||||
|
||||
# yes: even if set SWIG_FOUND==TRUE, then these have already been |
||||
# done, but done quietly. It does not hurt to redo them here. |
||||
|
||||
include(FindPackageHandleStandardArgs) |
||||
find_package_handle_standard_args(SWIG DEFAULT_MSG SWIG_EXECUTABLE SWIG_DIR) |
||||
mark_as_advanced(SWIG_EXECUTABLE SWIG_DIR) |
||||
|
||||
elseif(SWIG_FIND_REQUIRED) |
||||
|
||||
if(SWIG_FIND_VERSION) |
||||
message(FATAL_ERROR "The found SWIG version (${SWIG_VERSION}) is not compatible with the version required (${SWIG_FIND_VERSION}).") |
||||
else() |
||||
message(FATAL_ERROR "SWIG is required, but was not found.") |
||||
endif() |
||||
endif() |
||||
|
@ -1,26 +0,0 @@ |
||||
INCLUDE(FindPkgConfig) |
||||
PKG_CHECK_MODULES(PC_VOLK volk) |
||||
|
||||
FIND_PATH( |
||||
VOLK_INCLUDE_DIRS |
||||
NAMES volk/volk.h |
||||
HINTS $ENV{VOLK_DIR}/include |
||||
${PC_VOLK_INCLUDEDIR} |
||||
PATHS /usr/local/include |
||||
/usr/include |
||||
) |
||||
|
||||
FIND_LIBRARY( |
||||
VOLK_LIBRARIES |
||||
NAMES volk |
||||
HINTS $ENV{VOLK_DIR}/lib |
||||
${PC_VOLK_LIBDIR} |
||||
PATHS /usr/local/lib |
||||
/usr/local/lib64 |
||||
/usr/lib |
||||
/usr/lib64 |
||||
) |
||||
|
||||
INCLUDE(FindPackageHandleStandardArgs) |
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(VOLK DEFAULT_MSG VOLK_LIBRARIES VOLK_INCLUDE_DIRS) |
||||
MARK_AS_ADVANCED(VOLK_LIBRARIES VOLK_INCLUDE_DIRS) |
@ -1,459 +0,0 @@ |
||||
# Copyright 2010-2011,2014 Free Software Foundation, Inc. |
||||
# |
||||
# This file is part of GNU Radio |
||||
# |
||||
# GNU Radio is free software; you can redistribute it and/or modify |
||||
# it under the terms of the GNU General Public License as published by |
||||
# the Free Software Foundation; either version 3, or (at your option) |
||||
# any later version. |
||||
# |
||||
# GNU Radio is distributed in the hope that it will be useful, |
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
# GNU General Public License for more details. |
||||
# |
||||
# You should have received a copy of the GNU General Public License |
||||
# along with GNU Radio; see the file COPYING. If not, write to |
||||
# the Free Software Foundation, Inc., 51 Franklin Street, |
||||
# Boston, MA 02110-1301, USA. |
||||
|
||||
if(DEFINED __INCLUDED_GR_MISC_UTILS_CMAKE) |
||||
return() |
||||
endif() |
||||
set(__INCLUDED_GR_MISC_UTILS_CMAKE TRUE) |
||||
|
||||
######################################################################## |
||||
# Set global variable macro. |
||||
# Used for subdirectories to export settings. |
||||
# Example: include and library paths. |
||||
######################################################################## |
||||
function(GR_SET_GLOBAL var) |
||||
set(${var} ${ARGN} CACHE INTERNAL "" FORCE) |
||||
endfunction(GR_SET_GLOBAL) |
||||
|
||||
######################################################################## |
||||
# Set the pre-processor definition if the condition is true. |
||||
# - def the pre-processor definition to set and condition name |
||||
######################################################################## |
||||
function(GR_ADD_COND_DEF def) |
||||
if(${def}) |
||||
add_definitions(-D${def}) |
||||
endif(${def}) |
||||
endfunction(GR_ADD_COND_DEF) |
||||
|
||||
######################################################################## |
||||
# Check for a header and conditionally set a compile define. |
||||
# - hdr the relative path to the header file |
||||
# - def the pre-processor definition to set |
||||
######################################################################## |
||||
function(GR_CHECK_HDR_N_DEF hdr def) |
||||
include(CheckIncludeFileCXX) |
||||
CHECK_INCLUDE_FILE_CXX(${hdr} ${def}) |
||||
GR_ADD_COND_DEF(${def}) |
||||
endfunction(GR_CHECK_HDR_N_DEF) |
||||
|
||||
######################################################################## |
||||
# Include subdirectory macro. |
||||
# Sets the CMake directory variables, |
||||
# includes the subdirectory CMakeLists.txt, |
||||
# resets the CMake directory variables. |
||||
# |
||||
# This macro includes subdirectories rather than adding them |
||||
# so that the subdirectory can affect variables in the level above. |
||||
# This provides a work-around for the lack of convenience libraries. |
||||
# This way a subdirectory can append to the list of library sources. |
||||
######################################################################## |
||||
macro(GR_INCLUDE_SUBDIRECTORY subdir) |
||||
#insert the current directories on the front of the list |
||||
list(INSERT _cmake_source_dirs 0 ${CMAKE_CURRENT_SOURCE_DIR}) |
||||
list(INSERT _cmake_binary_dirs 0 ${CMAKE_CURRENT_BINARY_DIR}) |
||||
|
||||
#set the current directories to the names of the subdirs |
||||
set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${subdir}) |
||||
set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${subdir}) |
||||
|
||||
#include the subdirectory CMakeLists to run it |
||||
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) |
||||
include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt) |
||||
|
||||
#reset the value of the current directories |
||||
list(GET _cmake_source_dirs 0 CMAKE_CURRENT_SOURCE_DIR) |
||||
list(GET _cmake_binary_dirs 0 CMAKE_CURRENT_BINARY_DIR) |
||||
|
||||
#pop the subdir names of the front of the list |
||||
list(REMOVE_AT _cmake_source_dirs 0) |
||||
list(REMOVE_AT _cmake_binary_dirs 0) |
||||
endmacro(GR_INCLUDE_SUBDIRECTORY) |
||||
|
||||
######################################################################## |
||||
# Check if a compiler flag works and conditionally set a compile define. |
||||
# - flag the compiler flag to check for |
||||
# - have the variable to set with result |
||||
######################################################################## |
||||
macro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE flag have) |
||||
include(CheckCXXCompilerFlag) |
||||
CHECK_CXX_COMPILER_FLAG(${flag} ${have}) |
||||
if(${have}) |
||||
if(${CMAKE_VERSION} VERSION_GREATER "2.8.4") |
||||
STRING(FIND "${CMAKE_CXX_FLAGS}" "${flag}" flag_dup) |
||||
if(${flag_dup} EQUAL -1) |
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}") |
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}") |
||||
endif(${flag_dup} EQUAL -1) |
||||
endif(${CMAKE_VERSION} VERSION_GREATER "2.8.4") |
||||
endif(${have}) |
||||
endmacro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE) |
||||
|
||||
######################################################################## |
||||
# Generates the .la libtool file |
||||
# This appears to generate libtool files that cannot be used by auto*. |
||||
# Usage GR_LIBTOOL(TARGET [target] DESTINATION [dest]) |
||||
# Notice: there is not COMPONENT option, these will not get distributed. |
||||
######################################################################## |
||||
function(GR_LIBTOOL) |
||||
if(NOT DEFINED GENERATE_LIBTOOL) |
||||
set(GENERATE_LIBTOOL OFF) #disabled by default |
||||
endif() |
||||
|
||||
if(GENERATE_LIBTOOL) |
||||
include(CMakeParseArgumentsCopy) |
||||
CMAKE_PARSE_ARGUMENTS(GR_LIBTOOL "" "TARGET;DESTINATION" "" ${ARGN}) |
||||
|
||||
find_program(LIBTOOL libtool) |
||||
if(LIBTOOL) |
||||
include(CMakeMacroLibtoolFile) |
||||
CREATE_LIBTOOL_FILE(${GR_LIBTOOL_TARGET} /${GR_LIBTOOL_DESTINATION}) |
||||
endif(LIBTOOL) |
||||
endif(GENERATE_LIBTOOL) |
||||
|
||||
endfunction(GR_LIBTOOL) |
||||
|
||||
######################################################################## |
||||
# Do standard things to the library target |
||||
# - set target properties |
||||
# - make install rules |
||||
# Also handle gnuradio custom naming conventions w/ extras mode. |
||||
######################################################################## |
||||
function(GR_LIBRARY_FOO target) |
||||
#parse the arguments for component names |
||||
include(CMakeParseArgumentsCopy) |
||||
CMAKE_PARSE_ARGUMENTS(GR_LIBRARY "" "RUNTIME_COMPONENT;DEVEL_COMPONENT" "" ${ARGN}) |
||||
|
||||
#set additional target properties |
||||
set_target_properties(${target} PROPERTIES SOVERSION ${LIBVER}) |
||||
|
||||
#install the generated files like so... |
||||
install(TARGETS ${target} |
||||
LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .so/.dylib file |
||||
ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_DEVEL_COMPONENT} # .lib file |
||||
RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .dll file |
||||
) |
||||
|
||||
#extras mode enabled automatically on linux |
||||
if(NOT DEFINED LIBRARY_EXTRAS) |
||||
set(LIBRARY_EXTRAS ${LINUX}) |
||||
endif() |
||||
|
||||
#special extras mode to enable alternative naming conventions |
||||
if(LIBRARY_EXTRAS) |
||||
|
||||
#create .la file before changing props |
||||
GR_LIBTOOL(TARGET ${target} DESTINATION ${GR_LIBRARY_DIR}) |
||||
|
||||
#give the library a special name with ultra-zero soversion |
||||
set_target_properties(${target} PROPERTIES OUTPUT_NAME ${target}-${LIBVER} SOVERSION "0.0.0") |
||||
set(target_name lib${target}-${LIBVER}.so.0.0.0) |
||||
|
||||
#custom command to generate symlinks |
||||
add_custom_command( |
||||
TARGET ${target} |
||||
POST_BUILD |
||||
COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so |
||||
COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0 |
||||
COMMAND ${CMAKE_COMMAND} -E touch ${target_name} #so the symlinks point to something valid so cmake 2.6 will install |
||||
) |
||||
|
||||
#and install the extra symlinks |
||||
install( |
||||
FILES |
||||
${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so |
||||
${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0 |
||||
DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} |
||||
) |
||||
|
||||
endif(LIBRARY_EXTRAS) |
||||
endfunction(GR_LIBRARY_FOO) |
||||
|
||||
######################################################################## |
||||
# Create a dummy custom command that depends on other targets. |
||||
# Usage: |
||||
# GR_GEN_TARGET_DEPS(unique_name target_deps <target1> <target2> ...) |
||||
# ADD_CUSTOM_COMMAND(<the usual args> ${target_deps}) |
||||
# |
||||
# Custom command cant depend on targets, but can depend on executables, |
||||
# and executables can depend on targets. So this is the process: |
||||
######################################################################## |
||||
function(GR_GEN_TARGET_DEPS name var) |
||||
file( |
||||
WRITE ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in |
||||
"int main(void){return 0;}\n" |
||||
) |
||||
execute_process( |
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different |
||||
${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in |
||||
${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp |
||||
) |
||||
add_executable(${name} ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp) |
||||
if(ARGN) |
||||
add_dependencies(${name} ${ARGN}) |
||||
endif(ARGN) |
||||
|
||||
if(CMAKE_CROSSCOMPILING) |
||||
set(${var} "DEPENDS;${name}" PARENT_SCOPE) #cant call command when cross |
||||
else() |
||||
set(${var} "DEPENDS;${name};COMMAND;${name}" PARENT_SCOPE) |
||||
endif() |
||||
endfunction(GR_GEN_TARGET_DEPS) |
||||
|
||||
######################################################################## |
||||
# Control use of gr_logger |
||||
# Usage: |
||||
# GR_LOGGING() |
||||
# |
||||
# Will set ENABLE_GR_LOG to 1 by default. |
||||
# Can manually set with -DENABLE_GR_LOG=0|1 |
||||
######################################################################## |
||||
function(GR_LOGGING) |
||||
find_package(Log4cpp) |
||||
|
||||
OPTION(ENABLE_GR_LOG "Use gr_logger" ON) |
||||
if(ENABLE_GR_LOG) |
||||
# If gr_logger is enabled, make it usable |
||||
add_definitions( -DENABLE_GR_LOG ) |
||||
|
||||
# also test LOG4CPP; if we have it, use this version of the logger |
||||
# otherwise, default to the stdout/stderr model. |
||||
if(LOG4CPP_FOUND) |
||||
SET(HAVE_LOG4CPP True CACHE INTERNAL "" FORCE) |
||||
add_definitions( -DHAVE_LOG4CPP ) |
||||
else(not LOG4CPP_FOUND) |
||||
SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE) |
||||
SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE) |
||||
SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE) |
||||
SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE) |
||||
endif(LOG4CPP_FOUND) |
||||
|
||||
SET(ENABLE_GR_LOG ${ENABLE_GR_LOG} CACHE INTERNAL "" FORCE) |
||||
|
||||
else(ENABLE_GR_LOG) |
||||
SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE) |
||||
SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE) |
||||
SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE) |
||||
SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE) |
||||
endif(ENABLE_GR_LOG) |
||||
|
||||
message(STATUS "ENABLE_GR_LOG set to ${ENABLE_GR_LOG}.") |
||||
message(STATUS "HAVE_LOG4CPP set to ${HAVE_LOG4CPP}.") |
||||
message(STATUS "LOG4CPP_LIBRARIES set to ${LOG4CPP_LIBRARIES}.") |
||||
|
||||
endfunction(GR_LOGGING) |
||||
|
||||
######################################################################## |
||||
# Check if HAVE_PTHREAD_SETSCHEDPARAM and HAVE_SCHED_SETSCHEDULER |
||||
# should be defined |
||||
######################################################################## |
||||
macro(GR_CHECK_LINUX_SCHED_AVAIL) |
||||
set(CMAKE_REQUIRED_LIBRARIES -lpthread) |
||||
CHECK_CXX_SOURCE_COMPILES(" |
||||
#include <pthread.h> |
||||
int main(){ |
||||
pthread_t pthread; |
||||
pthread_setschedparam(pthread, 0, 0); |
||||
return 0; |
||||
} " HAVE_PTHREAD_SETSCHEDPARAM |
||||
) |
||||
GR_ADD_COND_DEF(HAVE_PTHREAD_SETSCHEDPARAM) |
||||
|
||||
CHECK_CXX_SOURCE_COMPILES(" |
||||
#include <sched.h> |
||||
int main(){ |
||||
pid_t pid; |
||||
sched_setscheduler(pid, 0, 0); |
||||
return 0; |
||||
} " HAVE_SCHED_SETSCHEDULER |
||||
) |
||||
GR_ADD_COND_DEF(HAVE_SCHED_SETSCHEDULER) |
||||
endmacro(GR_CHECK_LINUX_SCHED_AVAIL) |
||||
|
||||
######################################################################## |
||||
# Macros to generate source and header files from template |
||||
######################################################################## |
||||
macro(GR_EXPAND_X_H component root) |
||||
|
||||
include(GrPython) |
||||
|
||||
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py |
||||
"#!${PYTHON_EXECUTABLE} |
||||
|
||||
import sys, os, re |
||||
sys.path.append('${GR_RUNTIME_PYTHONPATH}') |
||||
os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}' |
||||
os.chdir('${CMAKE_CURRENT_BINARY_DIR}') |
||||
|
||||
if __name__ == '__main__': |
||||
import build_utils |
||||
root, inp = sys.argv[1:3] |
||||
for sig in sys.argv[3:]: |
||||
name = re.sub ('X+', sig, root) |
||||
d = build_utils.standard_dict2(name, sig, '${component}') |
||||
build_utils.expand_template(d, inp) |
||||
") |
||||
|
||||
#make a list of all the generated headers |
||||
unset(expanded_files_h) |
||||
foreach(sig ${ARGN}) |
||||
string(REGEX REPLACE "X+" ${sig} name ${root}) |
||||
list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h) |
||||
endforeach(sig) |
||||
unset(name) |
||||
|
||||
#create a command to generate the headers |
||||
add_custom_command( |
||||
OUTPUT ${expanded_files_h} |
||||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t |
||||
COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B} |
||||