aboutsummaryrefslogtreecommitdiff
path: root/compilers.py
diff options
context:
space:
mode:
Diffstat (limited to 'compilers.py')
-rw-r--r--compilers.py104
1 files changed, 104 insertions, 0 deletions
diff --git a/compilers.py b/compilers.py
index 7907235..0567764 100644
--- a/compilers.py
+++ b/compilers.py
@@ -92,6 +92,11 @@ mono_buildtype_args = {'plain' : [],
'debugoptimized': ['-debug', '-optimize+'],
'release' : ['-optimize+']}
+swift_buildtype_args = {'plain' : [],
+ 'debug' : ['-g'],
+ 'debugoptimized': ['-g', '-O'],
+ 'release' : ['-O']}
+
gnu_winlibs = ['-lkernel32', '-luser32', '-lgdi32', '-lwinspool', '-lshell32',
'-lole32', '-loleaut32', '-luuid', '-lcomdlg32', '-ladvapi32']
@@ -210,6 +215,9 @@ class CCompiler(Compiler):
def get_dependency_gen_args(self, outtarget, outfile):
return ['-MMD', '-MQ', outtarget, '-MF', outfile]
+ def depfile_for_object(self, objfile):
+ return objfile + '.' + self.get_depfile_suffix()
+
def get_depfile_suffix(self):
return 'd'
@@ -948,6 +956,99 @@ class RustCompiler(Compiler):
def get_buildtype_args(self, buildtype):
return rust_buildtype_args[buildtype]
+class SwiftCompiler(Compiler):
+ def __init__(self, exelist, version):
+ super().__init__(exelist, version)
+ self.version = version
+ self.id = 'llvm'
+ self.language = 'swift'
+ self.is_cross = False
+
+ def get_id(self):
+ return self.id
+
+ def get_linker_exelist(self):
+ return self.exelist
+
+ def name_string(self):
+ return ' '.join(self.exelist)
+
+ def needs_static_linker(self):
+ return True
+
+ def get_exelist(self):
+ return self.exelist
+
+ def get_werror_args(self):
+ return ['--fatal-warnings']
+
+ def get_language(self):
+ return self.language
+
+ def get_dependency_gen_args(self, outtarget, outfile):
+ return ['-emit-dependencies']
+
+ def depfile_for_object(self, objfile):
+ return os.path.splitext(objfile)[0] + '.' + self.get_depfile_suffix()
+
+ def get_depfile_suffix(self):
+ return 'd'
+
+ def get_output_args(self, target):
+ return ['-o', target]
+
+ def get_linker_output_args(self, target):
+ return ['-o', target]
+
+ def get_header_import_args(self, headername):
+ return ['-import-objc-header', headername]
+
+ def get_warn_args(self, level):
+ return []
+
+ def get_buildtype_args(self, buildtype):
+ return swift_buildtype_args[buildtype]
+
+ def get_buildtype_linker_args(self, buildtype):
+ return []
+
+ def get_std_exe_link_args(self):
+ return ['-emit-executable']
+
+ def get_module_args(self, modname):
+ return ['-module-name', modname]
+
+ def get_mod_gen_args(self):
+ return ['-emit-module']
+
+ def build_rpath_args(self, *args):
+ return [] # FIXME
+
+ def get_include_args(self, dirname):
+ return ['-I' + dirname]
+
+ def get_compile_only_args(self):
+ return ['-c']
+
+ def sanity_check(self, work_dir):
+ src = 'swifttest.swift'
+ source_name = os.path.join(work_dir, src)
+ output_name = os.path.join(work_dir, 'swifttest')
+ ofile = open(source_name, 'w')
+ ofile.write('''1 + 2
+''')
+ ofile.close()
+ pc = subprocess.Popen(self.exelist + ['-emit-executable', '-o', output_name, src], cwd=work_dir)
+ pc.wait()
+ if pc.returncode != 0:
+ raise EnvironmentException('Swift compiler %s can not compile programs.' % self.name_string())
+ if subprocess.call(output_name) != 0:
+ raise EnvironmentException('Executables created by Swift compiler %s are not runnable.' % self.name_string())
+
+ def can_compile(self, filename):
+ suffix = filename.split('.')[-1]
+ return suffix in ('swift')
+
class VisualStudioCCompiler(CCompiler):
std_warn_args = ['/W3']
std_opt_args= ['/O2']
@@ -1476,6 +1577,9 @@ end program prog
def get_module_outdir_args(self, path):
return ['-J' + path]
+ def depfile_for_object(self, objfile):
+ return objfile + '.' + self.get_depfile_suffix()
+
def get_depfile_suffix(self):
return 'd'