1# SPDX-License-Identifier: GPL-2.0+ 2# Copyright (c) 2012 The Chromium OS Authors. 3 4import configparser 5import os 6import io 7 8config_fname = None 9 10def setup(fname=''): 11 """Set up the buildman settings module by reading config files 12 13 Args: 14 config_fname: Config filename to read ('' for default) 15 """ 16 global settings 17 global config_fname 18 19 settings = configparser.ConfigParser() 20 if fname is not None: 21 config_fname = fname 22 if config_fname == '': 23 config_fname = '%s/.buildman' % os.getenv('HOME') 24 if not os.path.exists(config_fname): 25 print('No config file found ~/.buildman\nCreating one...\n') 26 create_buildman_config_file(config_fname) 27 print('To install tool chains, please use the --fetch-arch option') 28 if config_fname: 29 settings.read(config_fname) 30 31def add_file(data): 32 settings.readfp(io.StringIO(data)) 33 34def get_items(section): 35 """Get the items from a section of the config. 36 37 Args: 38 section: name of section to retrieve 39 40 Returns: 41 List of (name, value) tuples for the section 42 """ 43 try: 44 return settings.items(section) 45 except configparser.NoSectionError as e: 46 return [] 47 except: 48 raise 49 50def get_global_item_value(name): 51 """Get an item from the 'global' section of the config. 52 53 Args: 54 name: name of item to retrieve 55 56 Returns: 57 str: Value of item, or None if not present 58 """ 59 return settings.get('global', name, fallback=None) 60 61def set_item(section, tag, value): 62 """Set an item and write it back to the settings file""" 63 global settings 64 global config_fname 65 66 settings.set(section, tag, value) 67 if config_fname is not None: 68 with open(config_fname, 'w') as fd: 69 settings.write(fd) 70 71def create_buildman_config_file(config_fname): 72 """Creates a new config file with no tool chain information. 73 74 Args: 75 config_fname: Config filename to create 76 77 Returns: 78 None 79 """ 80 try: 81 f = open(config_fname, 'w') 82 except IOError: 83 print("Couldn't create buildman config file '%s'\n" % config_fname) 84 raise 85 86 print('''[toolchain] 87# name = path 88# e.g. x86 = /opt/gcc-4.6.3-nolibc/x86_64-linux 89other = / 90 91[toolchain-prefix] 92# name = path to prefix 93# e.g. x86 = /opt/gcc-4.6.3-nolibc/x86_64-linux/bin/x86_64-linux- 94 95[toolchain-alias] 96# arch = alias 97# Indicates which toolchain should be used to build for that arch 98riscv = riscv32 99sh = sh4 100x86 = i386 101 102[make-flags] 103# Special flags to pass to 'make' for certain boards, e.g. to pass a test 104# flag and build tag to snapper boards: 105# snapper-boards=ENABLE_AT91_TEST=1 106# snapper9260=${snapper-boards} BUILD_TAG=442 107# snapper9g45=${snapper-boards} BUILD_TAG=443 108''', file=f) 109 f.close(); 110