diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2015-12-12 01:08:11 +0200 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2015-12-12 01:08:11 +0200 |
commit | 8d8e25118bb7cb811bc152d95489d721d6e03dcd (patch) | |
tree | ba5b20f899bcf3bc7452648b284a2be158aae360 /compilers.py | |
parent | ba6191864d4a4461131081fef918796604a9ef28 (diff) | |
parent | 161d633f362a316e4711b8ab524d3688cd6847ef (diff) | |
download | meson-8d8e25118bb7cb811bc152d95489d721d6e03dcd.zip meson-8d8e25118bb7cb811bc152d95489d721d6e03dcd.tar.gz meson-8d8e25118bb7cb811bc152d95489d721d6e03dcd.tar.bz2 |
Merge pull request #330 from mesonbuild/swift
Added Swift support.
Diffstat (limited to 'compilers.py')
-rw-r--r-- | compilers.py | 104 |
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' |