blob: 9806f7f6c1831b6c22d1bee10315ddf3254fb362 [file] [log] [blame]
Alex Kleinda35fcf2019-03-07 16:01:15 -07001# -*- coding: utf-8 -*-
2# Copyright 2019 The Chromium OS Authors. All rights reserved.
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6"""Build target class and related functionality."""
7
8from __future__ import print_function
9
10import os
11
12
13class Error(Exception):
14 """Base module error class."""
15
16
17class InvalidNameError(Exception):
18 """Error for invalid target name argument."""
19
20
21class BuildTarget(object):
22 """Class to handle the build target information."""
23
24 def __init__(self, name, profile=None, build_root=None):
25 """Build Target init.
26
27 Args:
28 name (str): The full name of the target.
29 profile (str): The profile name.
30 build_root (str): The path to the buildroot.
31 """
32 if not name:
33 raise InvalidNameError('Name is required.')
34
Alex Klein171da612019-08-06 14:00:42 -060035 self._name = name
Alex Kleinda35fcf2019-03-07 16:01:15 -070036 self.board, _, self.variant = name.partition('_')
37 self.profile = profile
38
39 if build_root:
40 self.root = os.path.normpath(build_root)
41 else:
42 self.root = GetDefaultSysrootPath(self.name)
43
Alex Klein171da612019-08-06 14:00:42 -060044 def __eq__(self, other):
45 if self.__class__ is other.__class__:
46 return (self.name == other.name and self.profile == other.profile and
47 self.root == other.root)
48
49 return NotImplemented
50
51 def __hash__(self):
52 return hash(self.name)
53
Alex Kleinaf0e0452019-06-03 18:10:01 -060054 def __str__(self):
55 return self.name
56
Alex Klein171da612019-08-06 14:00:42 -060057 @property
58 def name(self):
59 return self._name
Alex Kleinda35fcf2019-03-07 16:01:15 -070060
61def GetDefaultSysrootPath(target_name):
62 if target_name:
63 return os.path.join('/build', target_name)
64 else:
65 raise InvalidNameError('Target name is required.')