summaryrefslogtreecommitdiffstats
path: root/lldb/scripts/Xcode/lldbbuild.py
diff options
context:
space:
mode:
authorTodd Fiala <todd.fiala@gmail.com>2016-01-28 07:36:44 +0000
committerTodd Fiala <todd.fiala@gmail.com>2016-01-28 07:36:44 +0000
commit2c0802c559f1e1e24ef2044a2ff166284cd1255e (patch)
treed085809712254cb9d50bcfb6ed7f4127c0c9aeb0 /lldb/scripts/Xcode/lldbbuild.py
parentbba248c36833b8a3ec8d245b14f72fa9b8a9c405 (diff)
downloadbcm5719-llvm-2c0802c559f1e1e24ef2044a2ff166284cd1255e.tar.gz
bcm5719-llvm-2c0802c559f1e1e24ef2044a2ff166284cd1255e.zip
modify Xcode build to use cmake/ninja for internal llvm/clang
This change restores the Xcode build to working after Makefile support was stripped from LLVM and clang recently. With this change, the Xcode build now requires cmake (2.8.12.2+). The cmake must either be on the path that Xcode sees, or it must exist in one of the following locations: * /usr/local/bin/cmake * /opt/local/bin/cmake * $HOME/bin/cmake If the ninja build tool is present on the path, it will be used. If not, ninja will be cloned (via git), bootstrap-built, and used for the llvm/clang build. LLDB now requires a minimum deployment target of OS X 10.9. Prior to this, it was 10.8. The llvm/clang cmake build will not run with Xcode 7.2 or Xcode 7.3 beta's compiler with the minimum deployment target set to anything lower than 10.9. This is related to #include <atomic>. When llvm or clang source code does not exist in the lldb tree, it will be cloned via git using http://llvm.org/git/{project}.git. Previously it used SVN. If this causes any heartache, we can make this smarter, autodetect an embedded svn and use svn instead. (And/or use SVN if a git command is not available). This change also fixes an lldb-mi linkage failure (needed libncurses) as exposed by one of the LLVM libs. llvm-svn: 259027
Diffstat (limited to 'lldb/scripts/Xcode/lldbbuild.py')
-rw-r--r--lldb/scripts/Xcode/lldbbuild.py135
1 files changed, 135 insertions, 0 deletions
diff --git a/lldb/scripts/Xcode/lldbbuild.py b/lldb/scripts/Xcode/lldbbuild.py
new file mode 100644
index 00000000000..cf79a3ea7d4
--- /dev/null
+++ b/lldb/scripts/Xcode/lldbbuild.py
@@ -0,0 +1,135 @@
+import os
+import subprocess
+
+#### UTILITIES ####
+
+def enum (*sequential, **named):
+ enums = dict(zip(sequential, range(len(sequential))), **named)
+ return type('Enum', (), enums)
+
+#### SETTINGS ####
+
+#### INTERFACE TO THE XCODEPROJ ####
+
+def lldb_source_path ():
+ return os.environ.get('SRCROOT')
+
+def expected_llvm_build_path ():
+ if build_type() == BuildType.Xcode:
+ return package_build_path()
+ else:
+ return os.path.join(os.environ.get('LLDB_PATH_TO_LLVM_BUILD'), package_build_dir_name("llvm"))
+
+def archives_txt ():
+ return os.path.join(expected_package_build_path(), "archives.txt")
+
+def expected_package_build_path ():
+ return os.path.abspath(os.path.join(expected_llvm_build_path(), ".."))
+
+def architecture ():
+ platform_name = os.environ.get('RC_PLATFORM_NAME')
+ if not platform_name:
+ platform_name = os.environ.get('PLATFORM_NAME')
+ platform_arch = os.environ.get('ARCHS').split()[-1]
+ return platform_name + "-" + platform_arch
+
+def lldb_configuration ():
+ return os.environ.get('CONFIGURATION')
+
+def llvm_configuration ():
+ return os.environ.get('LLVM_CONFIGURATION')
+
+def llvm_build_dirtree ():
+ return os.environ.get('LLVM_BUILD_DIRTREE')
+
+# Edit the code below when adding build styles.
+
+BuildType = enum('Xcode') # (Debug,DebugClang,Release)
+
+def build_type ():
+ return BuildType.Xcode
+
+#### VCS UTILITIES ####
+
+VCS = enum('git',
+ 'svn')
+
+def run_in_directory(args, path):
+ return subprocess.check_output(args, cwd=path)
+
+class Git:
+ def __init__ (self, spec):
+ self.spec = spec
+ def status (self):
+ return run_in_directory(["git", "branch", "-v"], self.spec['root'])
+ def diff (self):
+ return run_in_directory(["git", "diff"], self.spec['root'])
+ def check_out (self):
+ run_in_directory(["git", "clone", self.spec['url'], self.spec['root']], lldb_source_path())
+ run_in_directory(["git", "fetch", "--all"], self.spec['root'])
+ run_in_directory(["git", "checkout", self.spec['ref']], self.spec['root'])
+
+class SVN:
+ def __init__ (self, spec):
+ self.spec = spec
+ def status (self):
+ return run_in_directory(["svn", "info"], self.spec['root'])
+ def diff (self):
+ return run_in_directory(["svn", "diff"], self.spec['root'])
+ # TODO implement check_out
+
+def vcs (spec):
+ if spec['vcs'] == VCS.git:
+ return Git(spec)
+ elif spec['vcs'] == VCS.svn:
+ return SVN(spec)
+ else:
+ return None
+
+#### SOURCE PATHS ####
+
+def llvm_source_path ():
+ if build_type() == BuildType.Xcode:
+ return os.path.join(lldb_source_path(), "llvm")
+
+def clang_source_path ():
+ if build_type() == BuildType.Xcode:
+ return os.path.join(llvm_source_path(), "tools", "clang")
+
+def ninja_source_path ():
+ if build_type() == BuildType.Xcode:
+ return os.path.join(lldb_source_path(), "ninja")
+
+#### BUILD PATHS ####
+
+def packages ():
+ return ["llvm"]
+
+def package_build_dir_name (package):
+ return package + "-" + architecture()
+
+def expected_package_build_path_for (package):
+ if build_type() == BuildType.Xcode:
+ if package != "llvm":
+ raise("On Xcode build, we only support the llvm package: requested {}".format(package))
+ return package_build_path()
+ return os.path.join(expected_package_build_path(), package_build_dir_name(package))
+
+def expected_package_build_paths ():
+ return [expected_package_build_path_for(package) for package in packages()]
+
+def library_path (build_path):
+ return build_path + "/lib"
+
+def library_paths ():
+ if build_type() == BuildType.Xcode:
+ package_build_paths = [package_build_path()]
+ else:
+ package_build_paths = expected_package_build_paths()
+ return [library_path(build_path) for build_path in package_build_paths]
+
+def package_build_path ():
+ return os.path.join(
+ llvm_build_dirtree(),
+ os.environ["LLVM_CONFIGURATION"],
+ os.environ["CURRENT_ARCH"])
OpenPOWER on IntegriCloud