def configure_make_args(make_args, jobs_args, use_internal_make_jobserver): """Initialize the internal GNU Make jobserver or configure it as a pass-through :param make_args: arguments to be passed to GNU Make :type make_args: list :param use_internal_make_jobserver: if true, use the internal jobserver :type make_args: bool :rtype: tuple (final make_args, using makeflags, using cliflags, using jobserver) """ # Configure default jobs options: use all CPUs in each package try: # NOTE: this will yeild greater than 100% CPU utilization n_cpus = cpu_count() jobs_flags = { 'jobs': n_cpus, 'load-average': n_cpus + 1} except NotImplementedError: # If the number of cores cannot be determined, limit to one job jobs_flags = { 'jobs': 1, 'load-average': 1} # Get MAKEFLAGS from environment makeflags_jobs_flags = extract_jobs_flags(os.environ.get('MAKEFLAGS', '')) using_makeflags_jobs_flags = len(makeflags_jobs_flags) > 0 if using_makeflags_jobs_flags: makeflags_jobs_flags_dict = extract_jobs_flags_values(' '.join(makeflags_jobs_flags)) jobs_flags.update(makeflags_jobs_flags_dict) # Extract make jobs flags (these override MAKEFLAGS) cli_jobs_flags = jobs_args using_cli_flags = len(cli_jobs_flags) > 0 if cli_jobs_flags: jobs_flags.update(extract_jobs_flags_values(' '.join(cli_jobs_flags))) # Remove jobs flags from cli args if they're present make_args = re.sub(' '.join(cli_jobs_flags), '', ' '.join(make_args)).split() # Instantiate the jobserver job_server.initialize( max_jobs=jobs_flags.get('jobs', None), max_load=jobs_flags.get('load-average', None), gnu_make_enabled=use_internal_make_jobserver) # If the jobserver is supported if job_server.gnu_make_enabled(): jobs_args = [] else: jobs_args = cli_jobs_flags return make_args + jobs_args, using_makeflags_jobs_flags, using_cli_flags, job_server.gnu_make_enabled()
def configure_make_args(make_args, jobs_args, use_internal_make_jobserver): """Initialize the internal GNU Make jobserver or configure it as a pass-through :param make_args: arguments to be passed to GNU Make :type make_args: list :param use_internal_make_jobserver: if true, use the internal jobserver :type make_args: bool :rtype: tuple (final make_args, using makeflags, using cliflags, using jobserver) """ # Configure default jobs options: use all CPUs in each package try: # NOTE: this will yeild greater than 100% CPU utilization n_cpus = cpu_count() jobs_flags = { 'jobs': n_cpus, 'load-average': n_cpus + 1} except NotImplementedError: # If the number of cores cannot be determined, limit to one job jobs_flags = { 'jobs': 1, 'load-average': 1} # Get MAKEFLAGS from environment makeflags_jobs_flags = extract_jobs_flags(os.environ.get('MAKEFLAGS', '')) using_makeflags_jobs_flags = makeflags_jobs_flags is not None if using_makeflags_jobs_flags: makeflags_jobs_flags_dict = extract_jobs_flags_values(' '.join(makeflags_jobs_flags)) jobs_flags.update(makeflags_jobs_flags_dict) # Extract make jobs flags (these override MAKEFLAGS) cli_jobs_flags = jobs_args using_cli_flags = len(cli_jobs_flags) > 0 if cli_jobs_flags: jobs_flags.update(extract_jobs_flags_values(' '.join(cli_jobs_flags))) # Remove jobs flags from cli args if they're present make_args = re.sub(' '.join(cli_jobs_flags), '', ' '.join(make_args)).split() # Instantiate the jobserver job_server.initialize( max_jobs=jobs_flags.get('jobs', None), max_load=jobs_flags.get('load-average', None), gnu_make_enabled=use_internal_make_jobserver) # If the jobserver is supported if job_server.gnu_make_enabled(): jobs_args = [] else: jobs_args = cli_jobs_flags return make_args + jobs_args, using_makeflags_jobs_flags, using_cli_flags, job_server.gnu_make_enabled()
def handle_make_arguments(input_make_args, force_single_threaded_when_running_tests=False): """Special handling for make arguments. If force_single_threaded_when_running_tests is True, jobs flags are replaced with -j1, because tests cannot handle parallelization. If no job flags are present and there are none in the MAKEFLAGS environment variable, then make flags are set to the cpu_count, e.g. -j4 -l4. :param input_make_args: list of make arguments to be handled :type input_make_args: list :param force_single_threaded_when_running_tests: self explanatory :type force_single_threaded_when_running_tests: bool :returns: copied list of make arguments, potentially with some modifications :rtype: list """ make_args = list(input_make_args) # Get the values for the jobs flags which may be in the make args jobs_dict = extract_jobs_flags_values(' '.join(make_args)) jobs_args = extract_jobs_flags(' '.join(make_args)) if len(jobs_args) > 0: # Remove jobs flags from cli args if they're present make_args = re.sub(' '.join(jobs_args), '', ' '.join(make_args)).split() if force_single_threaded_when_running_tests: # force single threaded execution when running test since rostest does not support multiple parallel runs run_tests = [a for a in make_args if a.startswith('run_tests')] if run_tests: wide_log('Forcing "-j1" for running unit tests.') jobs_dict['jobs'] = 1 if job_server.gnu_make_enabled(): make_args.extend(job_server.gnu_make_args()) else: if 'jobs' in jobs_dict: make_args.append('-j{0}'.format(jobs_dict['jobs'])) if 'load-average' in jobs_dict: make_args.append('-l{0}'.format(jobs_dict['load-average'])) return make_args
def handle_make_arguments( input_make_args, force_single_threaded_when_running_tests=False): """Special handling for make arguments. If force_single_threaded_when_running_tests is True, jobs flags are replaced with -j1, because tests cannot handle parallelization. If no job flags are present and there are none in the MAKEFLAGS environment variable, then make flags are set to the cpu_count, e.g. -j4 -l4. :param input_make_args: list of make arguments to be handled :type input_make_args: list :param force_single_threaded_when_running_tests: self explanatory :type force_single_threaded_when_running_tests: bool :returns: copied list of make arguments, potentially with some modifications :rtype: list """ make_args = list(input_make_args) # Get the values for the jobs flags which may be in the make args jobs_dict = extract_jobs_flags_values(' '.join(make_args)) jobs_args = extract_jobs_flags(' '.join(make_args)) if len(jobs_args) > 0: # Remove jobs flags from cli args if they're present make_args = re.sub(' '.join(jobs_args), '', ' '.join(make_args)).split() if force_single_threaded_when_running_tests: # force single threaded execution when running test since rostest does not support multiple parallel runs run_tests = [a for a in make_args if a.startswith('run_tests')] if run_tests: wide_log('Forcing "-j1" for running unit tests.') jobs_dict['jobs'] = 1 if job_server.gnu_make_enabled(): make_args.extend(job_server.gnu_make_args()) else: if 'jobs' in jobs_dict: make_args.append('-j{0}'.format(jobs_dict['jobs'])) if 'load-average' in jobs_dict: make_args.append('-l{0}'.format(jobs_dict['load-average'])) return make_args