summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlejandro Sior <aho@sior.be>2022-08-07 09:10:45 +0200
committerAlejandro Sior <aho@sior.be>2022-08-07 09:10:45 +0200
commit13c7009df18a4c86086bf270d125d23ee9b849e2 (patch)
treeae560f6c2018b8d68eb90a41c7a333ba62d5c240
parentc8542a4424cef0aefe7400d1f276a7d9cc49083a (diff)
cook: added clang-cl toolchain
-rwxr-xr-xcook.py35
-rw-r--r--test/.build2
2 files changed, 25 insertions, 12 deletions
diff --git a/cook.py b/cook.py
index 45e3b6d..3c4588f 100755
--- a/cook.py
+++ b/cook.py
@@ -10,10 +10,13 @@ import argparse
def error(*args):
print(*args, file = sys.stderr)
+class ProgramNotFoundException(Exception):
+ pass
+
def find_program(prog, required=True):
path = shutil.which(prog)
if path == None and required:
- raise Exception("Required program '%s' not found on the system" % (prog))
+ raise ProgramNotFoundException(prog)
return File(path)
def flatten(el):
@@ -223,7 +226,7 @@ class CC(Vec):
header_depends = []
if self.mkdep:
- hdep += BUILD / self.mkdep(out)
+ header_depends += [BUILD / self.mkdep(out)]
targets.append(CTarget(path, self, input, header_depends = header_depends, extra_args = extra_args))
@@ -322,18 +325,18 @@ def ClangToolchain(suffix="", c_args=[], ld_args=[]):
def CCToolchain(suffix="", c_args=[], ld_args=[]):
return CCStyleToolchain("cc", "cc", "ar", suffix, c_args, ld_args)
-def MSVCToolchain(suffix="", c_args=[], ld_args=[]):
- ccname = "msvc" + suffix
- exename = "msvcexe" + suffix
- libname = "msvclib" + suffix
- shlibname = "msvcshlib" + suffix
+def MSVCStyleToolchain(name, gccname, arname, ldname, suffix="", c_args=[], ld_args=[]):
+ ccname = name + suffix
+ exename = name + "exe" + suffix
+ libname = name + "lib" + suffix
+ shlibname = name + "shlib" + suffix
c_args = " ".join(flatten(c_args))
ld_args = " ".join(flatten(ld_args))
- cl = find_program("cl")
- lib = find_program("lib")
- link = find_program("link")
+ cl = find_program(gccname)
+ lib = find_program(arname)
+ link = find_program(ldname)
cc = CC(
name=ccname,
@@ -370,8 +373,16 @@ def MSVCToolchain(suffix="", c_args=[], ld_args=[]):
)
return cc, exe, lib, shlib
+def MSVCToolchain(suffix="", c_args=[], ld_args=[]):
+ return MSVCStyleToolchain("msvc", "clp", "lib", "link", suffix, c_args, ld_args)
+
+def ClangClToolchain(suffix="", c_args=[], ld_args=[]):
+ # 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)
+
CTOOLCHAINS = {
'msvc': MSVCToolchain,
+ 'clang-cl': ClangClToolchain,
'cc': CCToolchain,
'clang': ClangToolchain,
'gcc': GccToolchain
@@ -392,8 +403,10 @@ def CToolchain(name="system", suffix="", c_args=[], ld_args=[]):
for t in CTOOLCHAINS.values():
try:
return t(suffix, c_args, ld_args)
- except:
+ except ProgramNotFoundException as e:
pass
+ except Exception as e:
+ raise e
raise Exception("No C toolchain found on system")
diff --git a/test/.build b/test/.build
index 61983a3..8dfcf25 100644
--- a/test/.build
+++ b/test/.build
@@ -1,5 +1,5 @@
maino = cc("main.c")
haio = cc("hai.c")
-hailib = shlib("hai", haio)
+hailib = lib("hai", haio)
aout = exe("vol", maino, hailib) \ No newline at end of file