3 from lbuild.contract import LunaBuildFile
4 from lbuild.common import BuildEnvironment
6 from lcfg.common import LConfigEnvironment
7 from integration.config_io import CHeaderConfigProvider
8 from integration.lbuild_bridge import LConfigProvider
9 from integration.render_ishell import InteractiveShell
10 from integration.build_gen import MakefileBuildGen, install_lbuild_functions
12 import lcfg.types as lcfg_type
13 import lcfg.builtins as builtin
17 from os.path import abspath, basename, dirname, exists
18 from argparse import ArgumentParser
19 from lib.utils import join_path
21 def prepare_lconfig_env(out_dir):
22 provider = CHeaderConfigProvider(join_path(out_dir, "configs.h"))
23 env = LConfigEnvironment(getcwd(), provider)
25 env.register_builtin_func(builtin.v)
26 env.register_builtin_func(builtin.term_type)
27 env.register_builtin_func(builtin.parent)
28 env.register_builtin_func(builtin.default)
29 env.register_builtin_func(builtin.include)
30 env.register_builtin_func(builtin.env)
32 env.type_factory().regitser(lcfg_type.PrimitiveType)
33 env.type_factory().regitser(lcfg_type.MultipleChoiceType)
37 def do_config(lcfg_env):
38 shell = InteractiveShell(lcfg_env)
39 if not shell.render_loop():
40 print("Configuration aborted.")
46 def do_buildfile_gen(opts, lcfg_env):
47 root_path = abspath(opts.root)
48 ws_path = dirname(root_path)
49 root_name = basename(root_path)
51 mkgen = MakefileBuildGen(opts.out_dir)
52 env = BuildEnvironment(ws_path, mkgen)
54 install_lbuild_functions(env)
56 cfg_provider = LConfigProvider(lcfg_env)
57 env.set_config_provider(cfg_provider)
59 root = LunaBuildFile(env, root_name)
63 except Exception as err:
64 print("failed to resolve root build file")
70 parser = ArgumentParser()
71 parser.add_argument("--config", action="store_true", default=False)
72 parser.add_argument("--lconfig-file", default="LConfig")
73 parser.add_argument("root", nargs="?", default="LBuild")
74 parser.add_argument("-o", "--out-dir", required=True)
76 opts = parser.parse_args()
77 out_dir = opts.out_dir
78 if not exists(out_dir):
81 lcfg_env = prepare_lconfig_env(out_dir)
82 lcfg_env.resolve_module(opts.lconfig_file)
89 do_buildfile_gen(opts, lcfg_env)
91 if __name__ == "__main__":