Commit fd75d2c2 authored by Laszlo Ersek's avatar Laszlo Ersek
Browse files

roms/edk2-funcs.sh: add the qemu_edk2_get_thread_count() function



The edk2 "build" utility natively supports building modules (that is, INF
files) in parallel. The feature is not useful when building a single
module (with the "-m" option), but it is useful for platform firmware
builds (which include many modules). Add a function that determines the
"-n" option argument for "build", from the MAKEFLAGS variable (i.e. based
on the presence of a make job server).

Signed-off-by: default avatarLaszlo Ersek <lersek@redhat.com>
Reviewed-by: default avatarPhilippe Mathieu-Daudé <philmd@redhat.com>
Tested-by: default avatarPhilippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: default avatarMichal Privoznik <mprivozn@redhat.com>
Reviewed-by: default avatarMichael S. Tsirkin <mst@redhat.com>
Tested-by: default avatarIgor Mammedov <imammedo@redhat.com>
Reviewed-by: default avatarIgor Mammedov <imammedo@redhat.com>
parent b9a4c151
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
@@ -226,3 +226,28 @@ qemu_edk2_set_cross_env()

  eval "export $cross_prefix_var=\$cross_prefix"
}


# Determine the "-n" option argument (that is, the number of modules to build
# in parallel) for the edk2 "build" utility. Print the result to the standard
# output.
#
# Parameters:
#   $1: the value of the MAKEFLAGS variable
qemu_edk2_get_thread_count()
{
  local makeflags="$1"

  if [[ "$makeflags" == *--jobserver-auth=* ]] ||
     [[ "$makeflags" == *--jobserver-fds=* ]]; then
    # If there is a job server, allow the edk2 "build" utility to parallelize
    # as many module builds as there are logical CPUs in the system. The "make"
    # instances forked by "build" are supposed to limit themselves through the
    # job server. The zero value below causes the edk2 "build" utility to fetch
    # the logical CPU count with Python's multiprocessing.cpu_count() method.
    printf '0\n'
  else
    # Build a single module at a time.
    printf '1\n'
  fi
}