mirror of
https://github.com/Klipper3d/klipper.git
synced 2025-07-07 06:57:38 -06:00
build: Use compile_time_request system for init, tasks, and shutdown
Avoid using linker magic to define the init, task, and shutdown functions. Instead, use the compile_time_request system. This simplifies the build and produces more efficient code. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
parent
ca9756413f
commit
a82e949c00
26 changed files with 82 additions and 127 deletions
|
@ -13,6 +13,7 @@ import msgproto
|
|||
FILEHEADER = """
|
||||
/* DO NOT EDIT! This is an autogenerated file. See scripts/buildcommands.py. */
|
||||
|
||||
#include "board/irq.h"
|
||||
#include "board/pgm.h"
|
||||
#include "command.h"
|
||||
#include "compiler.h"
|
||||
|
@ -119,6 +120,23 @@ ctr_lookup_static_string(const char *str)
|
|||
"""
|
||||
return fmt % ("".join(code).strip(),)
|
||||
|
||||
def build_call_lists(call_lists):
|
||||
code = []
|
||||
for funcname, funcs in call_lists.items():
|
||||
func_code = [' extern void %s(void);\n %s();' % (f, f)
|
||||
for f in funcs]
|
||||
if funcname == 'ctr_run_taskfuncs':
|
||||
func_code = [' irq_poll();\n' + fc for fc in func_code]
|
||||
fmt = """
|
||||
void
|
||||
%s(void)
|
||||
{
|
||||
%s
|
||||
}
|
||||
"""
|
||||
code.append(fmt % (funcname, "\n".join(func_code).strip()))
|
||||
return "".join(code)
|
||||
|
||||
def build_param_types(all_param_types):
|
||||
sorted_param_types = sorted([(i, a) for a, i in all_param_types.items()])
|
||||
params = ['']
|
||||
|
@ -271,6 +289,7 @@ def main():
|
|||
encoders = []
|
||||
static_strings = []
|
||||
constants = {}
|
||||
call_lists = {'ctr_run_initfuncs': []}
|
||||
# Parse request file
|
||||
f = open(incmdfile, 'rb')
|
||||
data = f.read()
|
||||
|
@ -314,6 +333,10 @@ def main():
|
|||
if name in constants and constants[name] != value:
|
||||
error("Conflicting definition for constant '%s'" % name)
|
||||
constants[name] = value
|
||||
elif cmd == '_DECL_CALLLIST':
|
||||
funcname, callname = parts[1:]
|
||||
cl = call_lists.setdefault(funcname, [])
|
||||
cl.append(callname)
|
||||
else:
|
||||
error("Unknown build time command '%s'" % cmd)
|
||||
# Create unique ids for each message type
|
||||
|
@ -328,6 +351,7 @@ def main():
|
|||
all_param_types = {}
|
||||
parsercode = build_encoders(encoders, msg_to_id, all_param_types)
|
||||
static_strings_code = build_static_strings(static_strings)
|
||||
call_lists_code = build_call_lists(call_lists)
|
||||
# Create command definitions
|
||||
cmd_by_id = dict((msg_to_id[messages_by_name.get(msgname, msgname)], cmd)
|
||||
for msgname, cmd in commands.items())
|
||||
|
@ -342,8 +366,8 @@ def main():
|
|||
, static_strings, constants, version)
|
||||
# Write output
|
||||
f = open(outcfile, 'wb')
|
||||
f.write(FILEHEADER + paramcode + parsercode + static_strings_code
|
||||
+ cmdcode + icode)
|
||||
f.write(FILEHEADER + call_lists_code + static_strings_code
|
||||
+ paramcode + parsercode + cmdcode + icode)
|
||||
f.close()
|
||||
|
||||
# Write data dictionary
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue