diff options
author | Vasil Velichkov <vvvelichkov@gmail.com> | 2018-02-21 06:12:04 +0200 |
---|---|---|
committer | Piotr Krysik <ptrkrysik@users.noreply.github.com> | 2018-03-22 06:07:24 +0100 |
commit | 0feb4ab51fcf73ebd71b05cd0309769615a7f0ba (patch) | |
tree | 930b94732d7a6c2c62bfbeb6ba4ece4a1615c9fb | |
parent | 3f6ab15a7a5492391ca0f94bd0a5586c1735f8db (diff) |
Fix the parallel build.
- Override the GR_UNIQUE_TARGET function to not append a hash to the
target name.
- Add explicit dependency between pygen_apps and _grgsm_swig
The _grgs_swig needs to be built first because grcc evaluates and
verify all imports
- Test the parallel build in the docker containers as well
-rw-r--r-- | apps/CMakeLists.txt | 30 | ||||
-rw-r--r-- | tests/dockerfiles/Debian_testing.docker | 5 | ||||
-rw-r--r-- | tests/dockerfiles/Kali.docker | 5 | ||||
-rw-r--r-- | tests/dockerfiles/Ubuntu_16_04.docker | 5 |
4 files changed, 40 insertions, 5 deletions
diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt index c6b04d9..3e36430 100644 --- a/apps/CMakeLists.txt +++ b/apps/CMakeLists.txt @@ -32,7 +32,7 @@ SET(PYTHONPATH string(REPLACE ";" ":" PYTHONPATH "${PYTHONPATH}") ADD_CUSTOM_COMMAND( - OUTPUT grgsm_livemon + 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} @@ -41,7 +41,7 @@ ADD_CUSTOM_COMMAND( DEPENDS grgsm_livemon.grc ) ADD_CUSTOM_COMMAND( - OUTPUT grgsm_livemon_headless + 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} @@ -50,6 +50,27 @@ ADD_CUSTOM_COMMAND( 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) + GR_PYTHON_INSTALL( PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/grgsm_livemon @@ -59,6 +80,11 @@ GR_PYTHON_INSTALL( DESTINATION bin ) +# 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. +add_dependencies(pygen_apps _grgsm_swig) + install( PROGRAMS DESTINATION bin diff --git a/tests/dockerfiles/Debian_testing.docker b/tests/dockerfiles/Debian_testing.docker index 33ec8d1..a1010ed 100644 --- a/tests/dockerfiles/Debian_testing.docker +++ b/tests/dockerfiles/Debian_testing.docker @@ -23,7 +23,10 @@ RUN ls /src RUN mkdir /src/build WORKDIR /src/build RUN cmake .. && \ - make && \ + # The parallel build sometimes fails when the .grc_gnuradio + # and .gnuradio directories do not exist + mkdir $HOME/.grc_gnuradio/ $HOME/.gnuradio/ && \ + make -j $(nproc) && \ make install && \ ldconfig && \ make test diff --git a/tests/dockerfiles/Kali.docker b/tests/dockerfiles/Kali.docker index 3cb3257..c844540 100644 --- a/tests/dockerfiles/Kali.docker +++ b/tests/dockerfiles/Kali.docker @@ -23,7 +23,10 @@ RUN ls /src RUN mkdir /src/build WORKDIR /src/build RUN cmake .. && \ - make && \ + # The parallel build sometimes fails when the .grc_gnuradio + # and .gnuradio directories do not exist + mkdir $HOME/.grc_gnuradio/ $HOME/.gnuradio/ && \ + make -j $(nproc) && \ make install && \ ldconfig && \ make test diff --git a/tests/dockerfiles/Ubuntu_16_04.docker b/tests/dockerfiles/Ubuntu_16_04.docker index 28e01a6..21eafec 100644 --- a/tests/dockerfiles/Ubuntu_16_04.docker +++ b/tests/dockerfiles/Ubuntu_16_04.docker @@ -23,7 +23,10 @@ RUN ls /src RUN mkdir /src/build WORKDIR /src/build RUN cmake .. && \ - make && \ + # The parallel build sometimes fails when the .grc_gnuradio + # and .gnuradio directories do not exist + mkdir $HOME/.grc_gnuradio/ $HOME/.gnuradio/ && \ + make -j $(nproc) && \ make install && \ ldconfig && \ make test |