summaryrefslogtreecommitdiff
path: root/cook.py
diff options
context:
space:
mode:
Diffstat (limited to 'cook.py')
-rwxr-xr-xcook.py52
1 files changed, 38 insertions, 14 deletions
diff --git a/cook.py b/cook.py
index 3b8e6c8..db409ba 100755
--- a/cook.py
+++ b/cook.py
@@ -327,14 +327,14 @@ def CCStyleToolchain(name, gccname, arname, suffix="", c_args=[], ld_args=[]):
)
return cc, exe, lib, shlib
-def GccToolchain(suffix="", c_args=[], ld_args=[]):
- return CCStyleToolchain("gcc", "gcc", "gcc-ar", suffix, c_args, ld_args)
+def GccToolchain(*args, **kwargs):
+ return CCStyleToolchain("gcc", "gcc", "gcc-ar", *args, **kwargs)
-def ClangToolchain(suffix="", c_args=[], ld_args=[]):
- return CCStyleToolchain("clang", "clang", "llvm-ar", suffix, c_args, ld_args)
+def ClangToolchain(*args, **kwargs):
+ return CCStyleToolchain("clang", "clang", "llvm-ar", *args, **kwargs)
-def CCToolchain(suffix="", c_args=[], ld_args=[]):
- return CCStyleToolchain("cc", "cc", "ar", suffix, c_args, ld_args)
+def CCToolchain(*args, **kwargs):
+ return CCStyleToolchain("cc", "cc", "ar", *args, **kwargs)
def MSVCStyleToolchain(name, gccname, arname, ldname, suffix="", c_args=[], ld_args=[]):
ccname = name + suffix
@@ -384,12 +384,22 @@ def MSVCStyleToolchain(name, gccname, arname, ldname, suffix="", c_args=[], ld_a
)
return cc, exe, lib, shlib
-def MSVCToolchain(suffix="", c_args=[], ld_args=[]):
- return MSVCStyleToolchain("msvc", "cl", "lib", "link", suffix, c_args, ld_args)
+def MSVCToolchain(*args, **kwargs):
+ return MSVCStyleToolchain("msvc", "cl", "lib", "link", *args, **kwargs)
-def ClangClToolchain(suffix="", c_args=[], ld_args=[]):
+def ClangClToolchain(*args, **kwargs):
# This toolchain depends on lib.exe shipped by microsoft. Is there a llvm way?
- return MSVCStyleToolchain("clang-cl", "clang-cl", "lib", "lld-link", suffix, c_args, ld_args)
+ return MSVCStyleToolchain("clang-cl", "clang-cl", "lib", "lld-link", *args, **kwargs)
+
+def CppToolchain(*args, **kwargs):
+ return CCStyleToolchain("cpp", "c++", "ar", *args, **kwargs)
+
+def GppToolchain(*args, **kwargs):
+ return CCStyleToolchain("gpp", "g++", "gcc-ar", *args, **kwargs)
+
+def ClangppToolchain(*args, **kwargs):
+ return CCStyleToolchain("clangpp", "clang++", "llvm-ar", *args, **kwargs)
+
CTOOLCHAINS = {
'msvc': MSVCToolchain,
@@ -399,19 +409,27 @@ CTOOLCHAINS = {
'gcc': GccToolchain
}
+CXXTOOLCHAINS = {
+ 'msvc': MSVCToolchain,
+ 'clang-cl': ClangClToolchain,
+ 'c++': CppToolchain,
+ 'g++': GppToolchain,
+ 'clang++': ClangppToolchain
+}
+
-def CToolchain(name="system", suffix="", c_args=[], ld_args=[]):
+def CToolchain(name="system", suffix="", c_args=[], ld_args=[], tdb=CTOOLCHAINS):
if suffix == "" and (c_args != [] or ld_args != []):
error("warning: instanciating default toolchain %s with non-default arguments" % (name))
error("note: to fix this, add a suffix")
if name != "system":
- if not name in CTOOLCHAINS:
+ if not name in tdb:
raise Exception("No such C toolchain available")
- return CTOOLCHAINS[name](suffix, c_args, ld_args)
+ return tdb[name](suffix, c_args, ld_args)
- for t in CTOOLCHAINS.values():
+ for t in tdb.values():
try:
return t(suffix, c_args, ld_args)
except ProgramNotFoundException as e:
@@ -421,6 +439,9 @@ def CToolchain(name="system", suffix="", c_args=[], ld_args=[]):
raise Exception("No C toolchain found on system")
+def CppToolchain(*args, tdb=CXXTOOLCHAINS, **kwargs):
+ return CToolchain(*args, tdb = tdb, **kwargs)
+
# NOTE: this implementation is very simple and bad but does what
# i need
class CModule:
@@ -489,6 +510,9 @@ class CModule:
return prev
+ def set_toolchain(self, toolchain):
+ self.cc, self.exe, self.lib, self.shlib = toolchain
+
def mklib(self):
if self.objects == [] or self.lib == None:
return None