def add_arguments(parser: ArgumentParser) -> ArgumentParser: ''' Adds new arguments to the specified ArgumentParser object. ''' def __dotnet_configuration(configuration: str) -> str: for config in get_supported_configurations(): is_valid = config.casefold() == configuration.casefold() if is_valid: return config raise ArgumentTypeError( 'Unknown configuration: {}.'.format(configuration)) supported_configurations = get_supported_configurations() parser.add_argument( '-c', '--configuration', required=False, default=supported_configurations[0], choices=supported_configurations, type=__dotnet_configuration, help=SUPPRESS, ) parser.add_argument( '-f', '--frameworks', required=False, choices=ChannelMap.get_supported_frameworks(), nargs='+', help='''The framework to build/run for. ''' '''The target framework must also be specified in the project ''' '''file.''', ) parser.add_argument( '--incremental', required=False, default='yes', choices=['yes', 'no'], type=str, help='''Controls whether previous packages/bin/obj folders should ''' '''be kept or removed before the dotnet restore/build/run are ''' '''executed (Default yes).''', ) # BenchmarkDotNet parser.add_argument( '--enable-hardware-counters', dest='enable_pmc', required=False, default=False, action='store_true', help='''Enables the following performance metric counters: ''' '''BranchMispredictions+CacheMisses+InstructionRetired''', ) parser.add_argument( '--filter', required=False, nargs='+', help='Glob patterns to execute benchmarks that match.', ) def __valid_file_path(file_path: str) -> str: '''Verifies that specified file path exists.''' file_path = path.abspath(file_path) if not path.isfile(file_path): raise ArgumentTypeError('{} does not exist.'.format(file_path)) return file_path parser.add_argument( '--corerun', dest='corerun', required=False, nargs='+', type=__valid_file_path, help='Full path to CoreRun.exe (corerun on Unix)', ) parser.add_argument( '--cli', dest='cli', required=False, type=__valid_file_path, help='Full path to dotnet.exe', ) def __get_bdn_arguments(user_input: str) -> list: file = StringIO(user_input) reader = csv.reader(file, delimiter=' ') for args in reader: return args return [] parser.add_argument( '--wasm', dest='wasm', required=False, default=False, action='store_true', help='Tests should be run with the wasm runtime' ) parser.add_argument( '--bdn-arguments', dest='bdn_arguments', required=False, type=__get_bdn_arguments, help='''Command line arguments to be passed to the BenchmarkDotNet ''' '''harness.''', ) parser.add_argument( '--bdn-artifacts', dest='bdn_artifacts', required=False, type=str, help='''Path to artifacts directory to be passed to the BenchmarkDotNet ''' '''harness.''', ) def __valid_dir_path(file_path: str) -> str: '''Verifies that specified file path exists.''' file_path = path.abspath(file_path) if not path.isdir(file_path): raise ArgumentTypeError('{} does not exist.'.format(file_path)) return file_path def __csproj_file_path(file_path: str) -> dotnet.CSharpProjFile: file_path = __valid_file_path(file_path) return dotnet.CSharpProjFile( file_name=file_path, working_directory=path.dirname(file_path) ) microbenchmarks_csproj = path.join( get_repo_root_path(), 'src', 'benchmarks', 'micro', 'MicroBenchmarks.csproj' ) parser.add_argument( '--csproj', dest='csprojfile', required=False, type=__csproj_file_path, default=dotnet.CSharpProjFile( file_name=microbenchmarks_csproj, working_directory=path.dirname(microbenchmarks_csproj) ), help='''C# project file name with the benchmarks to build/run. ''' '''The default project is the MicroBenchmarks.csproj''' ) def __absolute_path(file_path: str) -> str: ''' Return a normalized absolutized version of the specified file_path path. ''' return path.abspath(file_path) parser.add_argument( '--bin-directory', dest='bin_directory', required=False, default=path.join(get_repo_root_path(), 'artifacts', 'bin'), type=__absolute_path, help='Root of the bin directory', ) return parser
def __csproj_file_path(file_path: str) -> dotnet.CSharpProjFile: file_path = __valid_file_path(file_path) return dotnet.CSharpProjFile( file_name=file_path, working_directory=path.dirname(file_path) )