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"define {name}")
18 def generate(self, env: BuildEnvironment):
19 path = env.to_wspath(self.__path)
22 opts = env.get_object("CC_OPTS", [])
23 lines.append("CFLAGS += %s"%(" ".join(opts)))
25 opts = env.get_object("LD_OPTS", [])
26 lines.append("LDFLAGS += %s"%(" ".join(opts)))
28 arr = self.emit_makearray("_LBUILD_SRCS", env.srcs())
31 arr = self.emit_makearray("_LBUILD_HDRS", env.headers())
34 arr = self.emit_makearray("_LBUILD_INCS", env.includes())
37 with open(path, 'w') as f:
38 f.write("\n".join(lines))
41 def install_lbuild_functions(_env: BuildEnvironment):
42 def set_opts(env: BuildEnvironment, name, opts, override):
43 if not isinstance(opts, list):
46 _opts = env.get_object(name, [])
53 env.set_object(name, _opts)
55 def compile_opts(env: BuildEnvironment, opts, override=False):
56 set_opts(env, "CC_OPTS", opts, override)
58 def linking_opts(env: BuildEnvironment, opts, override=False):
59 set_opts(env, "LD_OPTS", opts, override)
61 def env(env, name, default=None):
62 return getenv(name, default)
65 _env.add_external_func(compile_opts)
66 _env.add_external_func(linking_opts)
67 _env.add_external_func(env)