blob: d6d87aa57cb3ec9726f1a0091cc385236c288388 [file] [log] [blame]
bjanakiraman7f4a4852013-02-15 04:35:28 +00001#!/usr/bin/python2.6
2#
3# Copyright 2010 Google Inc. All Rights Reserved.
4
5"""Script to build the ChromeOS toolchain.
6
7This script sets up the toolchain if you give it the gcctools directory.
8"""
9
10__author__ = "asharif@google.com (Ahmad Sharif)"
11
12import optparse
13import sys
14from utils import utils
15
16# Common initializations
17(rootdir, basename) = utils.GetRoot(sys.argv[0])
18utils.InitLogger(rootdir, basename)
19
bjanakiraman7f4a4852013-02-15 04:35:28 +000020
asharif19c73dd2013-02-15 04:35:37 +000021def Main():
22 """The main function."""
23 parser = optparse.OptionParser()
24 parser.add_option("-c", "--chromeos_root", dest="chromeos_root",
25 help="ChromeOS root checkout directory.")
26 parser.add_option("-t", "--toolchain_root", dest="toolchain_root",
27 help="Toolchain root directory.")
28 parser.add_option("-b", "--board", dest="board",
29 help="board is the argument to the setup_board command.")
30 parser.add_option("-C", "--clean", dest="clean",
31 action="store_true", help="Uninstall the toolchain.")
32 parser.add_option("-i", "--incremental", dest="incremental",
33 help="The toolchain component that should be "
34 "incrementally compiled.")
bjanakiraman7f4a4852013-02-15 04:35:28 +000035
asharif19c73dd2013-02-15 04:35:37 +000036 options = parser.parse_args()[0]
bjanakiraman7f4a4852013-02-15 04:35:28 +000037
asharif19c73dd2013-02-15 04:35:37 +000038 if options.toolchain_root is None or options.board is None:
39 parser.print_help()
40 sys.exit()
bjanakiraman7f4a4852013-02-15 04:35:28 +000041
asharif19c73dd2013-02-15 04:35:37 +000042 if options.chromeos_root is None:
43 options.chromeos_root = "../.."
44
45 f = open(options.chromeos_root + "/src/overlays/overlay-" +
46 options.board + "/toolchain.conf", "r")
47 target = f.read()
48 f.close()
49 target = target.strip()
50 features = "noclean"
51 env = CreateEnvVarString(" FEATURES", features)
52 toolchain_root = "/home/${USER}/toolchain_root"
53 env += CreateEnvVarString(" PORT_LOGDIR", toolchain_root + "/log")
54 env += CreateEnvVarString(" PKGDIR", toolchain_root + "/pkgs")
55 env += CreateEnvVarString(" PORTAGE_TMPDIR", toolchain_root + "/tmp")
56 BuildTC(options.chromeos_root, options.toolchain_root, env, target,
57 options.clean, options.incremental)
58
59
60def CreateEnvVarString(variable, value):
61 return variable + "=" + EscapeQuoteString(value)
62
63
64def EscapeQuoteString(string):
65 return "\\\"" + string + "\\\""
66
67
68def BuildTC(chromeos_root, toolchain_root, env, target, uninstall,
69 incremental_component):
70 """Build the toolchain."""
71 binutils_version = "2.20.1-r1"
72 gcc_version = "9999"
73 libc_version = "2.10.1-r1"
74 kernel_version = "2.6.30-r1"
75 if incremental_component is not None and len(incremental_component) > 0:
76 env += "FEATURES+=" + EscapeQuoteString("keepwork")
77
78 if uninstall == True:
79 tflag = " -C "
80 else:
81 tflag = " -t "
82
83 command = (rootdir + "/tc-enter-chroot.sh")
84 if chromeos_root is not None:
85 command += " --chromeos_root=" + chromeos_root
86 if toolchain_root is not None:
87 command += " --toolchain_root=" + toolchain_root
88 command += " -- sudo " + env
89
90 if incremental_component == "binutils":
91 command += " emerge =cross-" + target + "/binutils-" + binutils_version
92 elif incremental_component == "gcc":
93 command += " emerge =cross-" + target + "/gcc-" + gcc_version
94 elif incremental_component == "libc" or incremental_component == "glibc":
95 command += " emerge =cross-" + target + "/glibc-" + libc_version
96 else:
97 command += (" crossdev -v " + tflag + target +
98 " --binutils " + binutils_version +
99 " --libc " + libc_version +
100 " --gcc " + gcc_version +
101 " --kernel " + kernel_version +
102 " --portage -b --portage --newuse")
103
104 retval = utils.RunCommand(command)
105 return retval
106
107if __name__ == "__main__":
108 Main()