aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVasil Velichkov <vvvelichkov@gmail.com>2018-02-21 06:12:04 +0200
committerPiotr Krysik <ptrkrysik@users.noreply.github.com>2018-03-22 06:07:24 +0100
commit0feb4ab51fcf73ebd71b05cd0309769615a7f0ba (patch)
tree930b94732d7a6c2c62bfbeb6ba4ece4a1615c9fb
parent3f6ab15a7a5492391ca0f94bd0a5586c1735f8db (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.txt30
-rw-r--r--tests/dockerfiles/Debian_testing.docker5
-rw-r--r--tests/dockerfiles/Kali.docker5
-rw-r--r--tests/dockerfiles/Ubuntu_16_04.docker5
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