28def cli(config, json_dir, debug):
29
30 if exists(json_dir):
31 raise RuntimeError(f"Directory {json_dir} already exists")
32
33 config_data = config[0]
34 config_file = config[1]
35
36
37 moo.otypes.load_types('dpdklibs/confgen.jsonnet')
38 import dunedaq.dpdklibs.confgen as confgen
39 moo.otypes.load_types('daqconf/confgen.jsonnet')
40 import dunedaq.daqconf.confgen as daqconfgen
41
42 boot = daqconfgen.boot(**config_data.boot)
43 dpdklibs = confgen.dpdklibs(**config_data.dpdklibs)
44
45
46 if dpdklibs.only_sender and dpdklibs.only_reader:
47 raise RuntimeError('Both options only_sender and only_reader can not be specified at the same time')
48
49 if dpdklibs.sender_boards % dpdklibs.sender_cores:
50 raise RuntimeError(f'sender_boards has to be divisible by sender_cores ({dpdklibs.sender_boards} is not divisible by {dpdklibs.sender_cores}')
51
52 enable_sender, enable_receiver = True, True
53 if dpdklibs.only_sender:
54 enable_receiver = False
55 if dpdklibs.only_reader:
56 enable_sender = False
57
58 console.log('Loading dpdklibs config generator')
59 from dpdklibs import sender_confgen
60 from dpdklibs import reader_confgen
61
62 the_system = System()
63
64
65 if enable_sender:
66 the_system.apps["dpdk-sender"] = sender_confgen.generate_dpdk_sender_app(
67 HOST=dpdklibs.host_sender,
68 NUMBER_OF_CORES=dpdklibs.sender_cores,
69 NUMBER_OF_IPS_PER_CORE=dpdklibs.sender_boards // dpdklibs.sender_cores,
70 TIME_TICK_DIFFERENCE=dpdklibs.sender_time_tick_difference,
71 )
72 if enable_receiver:
73 the_system.apps["dpdk-reader"] = reader_confgen.generate_dpdk_reader_app(
74 HOST=dpdklibs.host_reader,
75 EAL_ARGS=dpdklibs.eal_args,
76 )
77
78
79 app_command_datas = {
80 name : make_app_command_data(the_system, app, name)
81 for name,app in the_system.apps.items()
82 }
83
84
85 from daqconf.core.conf_utils import make_system_command_datas, write_json_files
86
87 system_command_datas = make_system_command_datas(
88 boot,
89 the_system,
90 verbose=False
91 )
92
93 write_json_files(app_command_datas, system_command_datas, json_dir, verbose=True)
94
95 console.log(f"dpdklibs app config generated in {json_dir}")
96
97 write_metadata_file(json_dir, "dpdklibs_confgen", config_file)
98