1 from lbuild.api import BuildGenerator
2 from lbuild.common import BuildEnvironment
3 from lib.utils import join_path
6 class MakefileBuildGen(BuildGenerator):
7 def __init__(self, out_dir, name = "lbuild.mkinc") -> None:
8 self.__path = join_path(out_dir, name)
10 def emit_makearray(self, name, values):
12 r.append(f"{name} :=")
17 def generate(self, env: BuildEnvironment):
18 path = env.to_wspath(self.__path)
21 opts = env.get_object("CC_OPTS", [])
22 lines.append("CFLAGS += %s"%(" ".join(opts)))
24 opts = env.get_object("LD_OPTS", [])
25 lines.append("LDFLAGS += %s"%(" ".join(opts)))
27 arr = self.emit_makearray("_LBUILD_SRCS", env.srcs())
30 arr = self.emit_makearray("_LBUILD_HDRS", env.headers())
33 arr = self.emit_makearray("_LBUILD_INCS", env.includes())
36 with open(path, 'w') as f:
37 f.write("\n".join(lines))
40 def install_lbuild_functions(_env: BuildEnvironment):
41 def set_opts(env: BuildEnvironment, name, opts, override):
42 if not isinstance(opts, list):
45 _opts = env.get_object(name, [])
52 env.set_object(name, _opts)
54 def compile_opts(env: BuildEnvironment, opts, override=False):
55 set_opts(env, "CC_OPTS", opts, override)
57 def linking_opts(env: BuildEnvironment, opts, override=False):
58 set_opts(env, "LD_OPTS", opts, override)
60 def env(env, name, default=None):
61 return getenv(name, default)
64 _env.add_external_func(compile_opts)
65 _env.add_external_func(linking_opts)
66 _env.add_external_func(env)