From f00936d60d3959454df5e618c1ca124f2c310a10 Mon Sep 17 00:00:00 2001 From: Piotr Krysik Date: Mon, 18 Jun 2018 14:59:18 +0200 Subject: Placing grcc compilation utils in separate files Avoiding increasing required cmake version with use of wrapper shell script. --- apps/CMakeLists.txt | 56 ++-------------------------- cmake/Modules/GrccCompile.cmake | 73 +++++++++++++++++++++++++++++++++++++ cmake/Modules/GrccCompileWrapper.sh | 3 ++ 3 files changed, 80 insertions(+), 52 deletions(-) create mode 100644 cmake/Modules/GrccCompile.cmake create mode 100644 cmake/Modules/GrccCompileWrapper.sh diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt index fe52119..85e78d7 100644 --- a/apps/CMakeLists.txt +++ b/apps/CMakeLists.txt @@ -18,60 +18,12 @@ # Boston, MA 02110-1301, USA. include(GrPython) +include(GrccCompile) add_subdirectory(helpers) #add_subdirectory(apps_data) -SET(PYTHONPATH - ${CMAKE_SOURCE_DIR}/python - ${CMAKE_SOURCE_DIR}/python/misc_utils - ${CMAKE_SOURCE_DIR}/python/demapping - ${CMAKE_SOURCE_DIR}/python/receiver - ${CMAKE_SOURCE_DIR}/python/transmitter - ${CMAKE_SOURCE_DIR}/python/trx - ${CMAKE_BINARY_DIR}/swig - $ENV{PYTHONPATH} - ) -string(REPLACE ";" ":" PYTHONPATH "${PYTHONPATH}") - -ADD_CUSTOM_COMMAND( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/grgsm_livemon - COMMAND "${CMAKE_COMMAND}" - -E env PYTHONPATH="${PYTHONPATH}" GRC_BLOCKS_PATH=${CMAKE_SOURCE_DIR}/grc - ${PC_GNURADIO_RUNTIME_PREFIX}/${GR_RUNTIME_DIR}/grcc -d ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}/grgsm_livemon.grc - COMMAND "${CMAKE_COMMAND}" -E rename grgsm_livemon.py grgsm_livemon - DEPENDS grgsm_livemon.grc -) -ADD_CUSTOM_COMMAND( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/grgsm_livemon_headless - COMMAND "${CMAKE_COMMAND}" - -E env PYTHONPATH="${PYTHONPATH}" GRC_BLOCKS_PATH=${CMAKE_SOURCE_DIR}/grc - ${PC_GNURADIO_RUNTIME_PREFIX}/${GR_RUNTIME_DIR}/grcc -d ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}/grgsm_livemon_headless.grc - COMMAND "${CMAKE_COMMAND}" -E rename grgsm_livemon_headless.py grgsm_livemon_headless - DEPENDS grgsm_livemon_headless.grc -) - -######################################################################## -# Override the GR_UNIQUE_TARGET function to not append a hash -# to the `target` name, because we need a known name in order -# to add an explicit dependency that's needed for the parallel build -# -# The original code segment (taken from GrPython.cmake) is -# -# execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib -#unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5] -#print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))" -# OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE) -# -######################################################################## -function(GR_UNIQUE_TARGET desc) - file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}) - execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib -print(re.sub('\\W', '_', '${desc} ${reldir}'))" - OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE) - add_custom_target(${_target} ALL DEPENDS ${ARGN}) -endfunction(GR_UNIQUE_TARGET) +GRCC_COMPILE(grgsm_livemon) +GRCC_COMPILE(grgsm_livemon_headless) set(grgsm_flowgraphs "") OPTION(ENABLE_GRCC "Compile the flowgraphs with grcc" ON) @@ -97,7 +49,7 @@ GR_PYTHON_INSTALL( # The add_dependencies(...) is very important for the parallel build `make -j $(nproc)` # The `pygen_apps` target is generated in GR_PYTHON_INSTALL function which calls -# GR_UNIQUE_TARGET that we redefine above. +# GR_UNIQUE_TARGET that we redefine in GrccCompile. add_dependencies(pygen_apps _grgsm_swig) install( diff --git a/cmake/Modules/GrccCompile.cmake b/cmake/Modules/GrccCompile.cmake new file mode 100644 index 0000000..bcb1b38 --- /dev/null +++ b/cmake/Modules/GrccCompile.cmake @@ -0,0 +1,73 @@ +# Author (C) 2018 by Piotr Krysik +# Author (C) 2018 by Vasil Velichkov +# +# 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. + +SET(PYTHONPATH + ${CMAKE_SOURCE_DIR}/python + ${CMAKE_SOURCE_DIR}/python/misc_utils + ${CMAKE_SOURCE_DIR}/python/demapping + ${CMAKE_SOURCE_DIR}/python/receiver + ${CMAKE_SOURCE_DIR}/python/transmitter + ${CMAKE_SOURCE_DIR}/python/trx + ${CMAKE_BINARY_DIR}/swig + $ENV{PYTHONPATH} + ) +string(REPLACE ";" ":" PYTHONPATH "${PYTHONPATH}") + +macro(GRCC_COMPILE file_name) + if(${CMAKE_VERSION} VERSION_LESS "3.2.0") #use wrapper script to set the environment on systems without cmake 3.2 + ADD_CUSTOM_COMMAND( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${file_name} + COMMAND /bin/sh ${CMAKE_SOURCE_DIR}/cmake/Modules/GrccCompileWrapper.sh "${PYTHONPATH}" "${CMAKE_SOURCE_DIR}/grc" "${PC_GNURADIO_RUNTIME_PREFIX}/${GR_RUNTIME_DIR}/grcc -d ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/${file_name}.grc" + COMMAND "${CMAKE_COMMAND}" -E rename ${CMAKE_CURRENT_BINARY_DIR}/${file_name}.py ${CMAKE_CURRENT_BINARY_DIR}/${file_name} + DEPENDS ${file_name}.grc + ) + else() #for the rest use new/more portable way + ADD_CUSTOM_COMMAND( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${file_name} + COMMAND "${CMAKE_COMMAND}" + -E env PYTHONPATH="${PYTHONPATH}" GRC_BLOCKS_PATH=${CMAKE_SOURCE_DIR}/grc + ${PC_GNURADIO_RUNTIME_PREFIX}/${GR_RUNTIME_DIR}/grcc -d ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/${file_name}.grc + COMMAND "${CMAKE_COMMAND}" -E rename ${CMAKE_CURRENT_BINARY_DIR}/${file_name}.py ${CMAKE_CURRENT_BINARY_DIR}/${file_name} + DEPENDS ${file_name}.grc + ) + endif() +endmacro(GRCC_COMPILE) + +######################################################################## +# Override the GR_UNIQUE_TARGET function to not append a hash +# to the `target` name, because we need a known name in order +# to add an explicit dependency that's needed for the parallel build +# +# The original code segment (taken from GrPython.cmake) is +# +# execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib +#unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5] +#print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))" +# OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE) +# +######################################################################## +function(GR_UNIQUE_TARGET desc) + file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}) + execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib +print(re.sub('\\W', '_', '${desc} ${reldir}'))" + OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE) + add_custom_target(${_target} ALL DEPENDS ${ARGN}) +endfunction(GR_UNIQUE_TARGET) diff --git a/cmake/Modules/GrccCompileWrapper.sh b/cmake/Modules/GrccCompileWrapper.sh new file mode 100644 index 0000000..6c7f60f --- /dev/null +++ b/cmake/Modules/GrccCompileWrapper.sh @@ -0,0 +1,3 @@ +export PYTHONPATH="$1" +export GRC_BLOCKS_PATH="$2" +eval "$3" -- cgit v1.2.3