Skip to content

Commit

Permalink
sdbus++-gendir: run in parallel
Browse files Browse the repository at this point in the history
Using this tool on a repository like phosphor-dbus-interfaces requires a
large number of invocations to the python script.  Add option to run
them in parallel and default to ${nproc} jobs in parallel.

Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
Change-Id: I9dd347680f41de50215d427e59b3616415dc7fe7
  • Loading branch information
williamspatrick committed Jun 9, 2020
1 parent 7d8dfc4 commit bb140d1
Showing 1 changed file with 43 additions and 11 deletions.
54 changes: 43 additions & 11 deletions tools/sdbus++-gendir
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ function show_usage {
echo " --tool <path> - path to processing tool (default 'sdbus++')."
echo " --output <path> - directory to place output files (default '.')."
echo " --list-all - include all generated files in stdout list."
echo " --jobs <N> - number to run in parallel (default: $(nproc))."
echo " <dirs>+ - any number of subdirectories to generate."
echo
echo "The output on stdout is a list of generated files, which is intended"
Expand All @@ -23,34 +24,56 @@ function show_usage {
echo "them into stdout unless --list-all is given."
}

# Ensure that no more than ${parallel} jobs are running at a time and if so
# wait for at least one to finish.
function wait_n {
while true;
do
if [[ $(jobs -r -p | wc -l) -ge $parallel ]];
then
wait -n
else
break
fi
done
}

sdbuspp="sdbus++"
outputdir="."
listall="no"
parallel=$(nproc)

options="$(getopt -o ho:t: --long help,list-all,output:,tool: -- "$@")"
options="$(getopt -o ho:t:j: --long help,list-all,output:,tool:,jobs: -- "$@")"
eval set -- "$options"

while true; do
while true;
do
case "$1" in
-h | --help)
show_usage
exit
;;

-j | --jobs)
shift
parallel="$1"
shift
;;

--list-all)
listall="yes"
shift
;;

-o | --output)
shift
outputdir="$1";
outputdir="$1"
shift
;;

-t | --tool)
shift
sdbuspp="$1";
sdbuspp="$1"
shift
;;

Expand Down Expand Up @@ -78,23 +101,28 @@ do

mkdir -p $outputdir/$path

$sdbuspp interface server-header $iface > $outputdir/$path/server.hpp
$sdbuspp interface server-header $iface > $outputdir/$path/server.hpp &
echo $outputdir/$path/server.hpp
wait_n

$sdbuspp interface server-cpp $iface > $outputdir/$path/server.cpp
$sdbuspp interface server-cpp $iface > $outputdir/$path/server.cpp &
echo $outputdir/$path/server.cpp
wait_n

$sdbuspp interface client-header $iface > $outputdir/$path/client.hpp
$sdbuspp interface client-header $iface > $outputdir/$path/client.hpp &
echo $outputdir/$path/client.hpp
wait_n

$sdbuspp interface markdown $iface > $outputdir/$path.md
$sdbuspp interface markdown $iface > $outputdir/$path.md &
# markdown files aren't recognized as source files by meson, so don't
# emit them by default.
if [ "xyes" == "x$listall" ];
then
echo $outputdir/$path.md
fi
wait_n
done
wait # finish all before continuing

errors="$(find $d -name '*.errors.yaml')"

Expand All @@ -105,18 +133,22 @@ do

mkdir -p $outputdir/$path

$sdbuspp error exception-header $iface > $outputdir/$path/error.hpp
$sdbuspp error exception-header $iface > $outputdir/$path/error.hpp &
echo $outputdir/$path/error.hpp
wait_n

$sdbuspp error exception-cpp $iface > $outputdir/$path/error.cpp
$sdbuspp error exception-cpp $iface > $outputdir/$path/error.cpp &
echo $outputdir/$path/error.cpp
wait_n

$sdbuspp error markdown $iface >> $outputdir/$path.md
$sdbuspp error markdown $iface >> $outputdir/$path.md &
# markdown files aren't recognized as source files by meson, so don't
# emit them by default.
if [ "xyes" == "x$listall" ];
then
echo $outputdir/$path.md
fi
wait_n
done
wait # finish all before continuing
done

0 comments on commit bb140d1

Please sign in to comment.