1fc3fe1c2SSimon Glass# Copyright (c) 2012 The Chromium OS Authors. 2fc3fe1c2SSimon Glass# 31a459660SWolfgang Denk# SPDX-License-Identifier: GPL-2.0+ 4fc3fe1c2SSimon Glass# 5fc3fe1c2SSimon Glass 6fc3fe1c2SSimon Glassimport ConfigParser 7fc3fe1c2SSimon Glassimport os 88b985eebSSimon Glassimport StringIO 9fc3fe1c2SSimon Glass 10fc3fe1c2SSimon Glass 11fc3fe1c2SSimon Glassdef Setup(fname=''): 12fc3fe1c2SSimon Glass """Set up the buildman settings module by reading config files 13fc3fe1c2SSimon Glass 14fc3fe1c2SSimon Glass Args: 15fc3fe1c2SSimon Glass config_fname: Config filename to read ('' for default) 16fc3fe1c2SSimon Glass """ 17fc3fe1c2SSimon Glass global settings 18fc3fe1c2SSimon Glass global config_fname 19fc3fe1c2SSimon Glass 20fc3fe1c2SSimon Glass settings = ConfigParser.SafeConfigParser() 218b985eebSSimon Glass if fname is not None: 22fc3fe1c2SSimon Glass config_fname = fname 23fc3fe1c2SSimon Glass if config_fname == '': 24fc3fe1c2SSimon Glass config_fname = '%s/.buildman' % os.getenv('HOME') 25*8e605a5eSSimon Glass if not os.path.exists(config_fname): 26*8e605a5eSSimon Glass print 'No config file found ~/.buildman\nCreating one...\n' 27*8e605a5eSSimon Glass CreateBuildmanConfigFile(config_fname) 28*8e605a5eSSimon Glass print 'To install tool chains, please use the --fetch-arch option' 29fc3fe1c2SSimon Glass if config_fname: 30fc3fe1c2SSimon Glass settings.read(config_fname) 31fc3fe1c2SSimon Glass 328b985eebSSimon Glassdef AddFile(data): 338b985eebSSimon Glass settings.readfp(StringIO.StringIO(data)) 348b985eebSSimon Glass 35fc3fe1c2SSimon Glassdef GetItems(section): 36fc3fe1c2SSimon Glass """Get the items from a section of the config. 37fc3fe1c2SSimon Glass 38fc3fe1c2SSimon Glass Args: 39fc3fe1c2SSimon Glass section: name of section to retrieve 40fc3fe1c2SSimon Glass 41fc3fe1c2SSimon Glass Returns: 42fc3fe1c2SSimon Glass List of (name, value) tuples for the section 43fc3fe1c2SSimon Glass """ 44fc3fe1c2SSimon Glass try: 45fc3fe1c2SSimon Glass return settings.items(section) 46fc3fe1c2SSimon Glass except ConfigParser.NoSectionError as e: 47fc3fe1c2SSimon Glass return [] 48fc3fe1c2SSimon Glass except: 49fc3fe1c2SSimon Glass raise 50827e37b5SSimon Glass 51827e37b5SSimon Glassdef SetItem(section, tag, value): 52827e37b5SSimon Glass """Set an item and write it back to the settings file""" 53827e37b5SSimon Glass global settings 54827e37b5SSimon Glass global config_fname 55827e37b5SSimon Glass 56827e37b5SSimon Glass settings.set(section, tag, value) 57827e37b5SSimon Glass if config_fname is not None: 58827e37b5SSimon Glass with open(config_fname, 'w') as fd: 59827e37b5SSimon Glass settings.write(fd) 60*8e605a5eSSimon Glass 61*8e605a5eSSimon Glassdef CreateBuildmanConfigFile(config_fname): 62*8e605a5eSSimon Glass """Creates a new config file with no tool chain information. 63*8e605a5eSSimon Glass 64*8e605a5eSSimon Glass Args: 65*8e605a5eSSimon Glass config_fname: Config filename to create 66*8e605a5eSSimon Glass 67*8e605a5eSSimon Glass Returns: 68*8e605a5eSSimon Glass None 69*8e605a5eSSimon Glass """ 70*8e605a5eSSimon Glass try: 71*8e605a5eSSimon Glass f = open(config_fname, 'w') 72*8e605a5eSSimon Glass except IOError: 73*8e605a5eSSimon Glass print "Couldn't create buildman config file '%s'\n" % config_fname 74*8e605a5eSSimon Glass raise 75*8e605a5eSSimon Glass 76*8e605a5eSSimon Glass print >>f, '''[toolchain] 77*8e605a5eSSimon Glass# name = path 78*8e605a5eSSimon Glass# e.g. x86 = /opt/gcc-4.6.3-nolibc/x86_64-linux 79*8e605a5eSSimon Glass 80*8e605a5eSSimon Glass[toolchain-prefix] 81*8e605a5eSSimon Glass# name = path to prefix 82*8e605a5eSSimon Glass# e.g. x86 = /opt/gcc-4.6.3-nolibc/x86_64-linux/bin/x86_64-linux- 83*8e605a5eSSimon Glass 84*8e605a5eSSimon Glass[toolchain-alias] 85*8e605a5eSSimon Glass# arch = alias 86*8e605a5eSSimon Glass# Indicates which toolchain should be used to build for that arch 87*8e605a5eSSimon Glassx86 = i386 88*8e605a5eSSimon Glassblackfin = bfin 89*8e605a5eSSimon Glassnds32 = nds32le 90*8e605a5eSSimon Glassopenrisc = or1k 91*8e605a5eSSimon Glass 92*8e605a5eSSimon Glass[make-flags] 93*8e605a5eSSimon Glass# Special flags to pass to 'make' for certain boards, e.g. to pass a test 94*8e605a5eSSimon Glass# flag and build tag to snapper boards: 95*8e605a5eSSimon Glass# snapper-boards=ENABLE_AT91_TEST=1 96*8e605a5eSSimon Glass# snapper9260=${snapper-boards} BUILD_TAG=442 97*8e605a5eSSimon Glass# snapper9g45=${snapper-boards} BUILD_TAG=443 98*8e605a5eSSimon Glass''' 99*8e605a5eSSimon Glass f.close(); 100