xref: /rk3399_rockchip-uboot/tools/buildman/bsettings.py (revision 8e605a5e3e41861c4b1c55bc3b911abde2323939)
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