summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlejandro Sior <aho@sior.be>2022-08-07 08:40:24 +0200
committerAlejandro Sior <aho@sior.be>2022-08-07 08:40:24 +0200
commit7da9324935dd3c88791b20774df0302660054611 (patch)
treeb2d9d5e8383459ff1289178d5fb537989013a940
parentd98a704dabccec1b4eb11eb35ddc1a57acb57811 (diff)
cook: use a better workaround than mkextra
Instead of mkextra, take advantage of the /OUT and /IMPLIB command line flags for MSVC. Namely, format them like this: /OUT:%s.dll /IMPLIB:%s where %s is the name of the imports library.
-rwxr-xr-xcook.py18
1 files changed, 4 insertions, 14 deletions
diff --git a/cook.py b/cook.py
index 542d4d9..df2c541 100755
--- a/cook.py
+++ b/cook.py
@@ -247,15 +247,11 @@ class CC(Vec):
return out
class CExe(Processor):
- def __init__(self, name, exe, mkargs, mklib, mkextra = [], mkout = DEFMKOUT, mkdesc=DEFMKDESC):
+ def __init__(self, name, exe, mkargs, mklib, mkout = DEFMKOUT, mkdesc=DEFMKDESC):
super().__init__(name, exe, mkargs, mkout = mkout, mkdesc = mkdesc)
self.mklib = mklib
- # A list of functions indicating how to build extra arguments
- # XXX: TODO: mkextra is a horrible hack
- self.mkextra = mkextra
-
def __call__(self, name, *args, libs = [], extra_args = []):
return self.gen(name, *args, libs = libs, extra_args = extra_args)
@@ -268,9 +264,6 @@ class CExe(Processor):
libs_args = [self.mklib(lib) for lib in libs]
extra_args += libs_args
- for mk in self.mkextra:
- extra_args += [mk(name)]
-
return super().gen(name, *args, extra_args = extra_args)
def CCStyleToolchain(name, gccname, arname, suffix="", c_args=[], ld_args=[]):
@@ -370,13 +363,10 @@ def MSVCToolchain(suffix="", c_args=[], ld_args=[]):
shlib = CExe(
name=shlibname,
exe=cl,
- mkargs=lambda o, i, ea: "/D_USRDLL /D_WINDLL %s /MT /link /DLL %s %s" % (i, ld_args, ea),
- mklib=lambda l: "", # TODO: make this not needed
+ mkargs=lambda o, i, ea: "/D_USRDLL /D_WINDLL %s /MT /link /DLL /OUT:%s.dll /IMPLIB:%s %s %s" % (i, o, o, ld_args, ea),
+ mklib=lambda l: "", # TODO: make this not needed, or perhaps yes by adding .lib but this seems weird
mkdesc=lambda o, i, cmd: "SO %s" % (o),
- mkout=lambda n: "%s.lib" % (n),
- # XXX: TODO: mkextra is very bad, do this properly
- # perhaps, by specializing CTarget or injecting data into it
- mkextra=[lambda n: "/OUT:" + str(BUILD / CWD / ("%s.dll" % (n)))]
+ mkout=lambda n: "%s.lib" % (n)
)
return cc, exe, lib, shlib