This is an automated email from the ASF dual-hosted git repository.
jerzy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-newt.git
The following commit(s) were added to refs/heads/master by this push:
new cb6f87f5 Generate mod log names
cb6f87f5 is described below
commit cb6f87f5ef011d888d238e7ceea1f92745b8ec00
Author: Jerzy Kasenberg <[email protected]>
AuthorDate: Wed Apr 3 10:49:10 2024 +0200
Generate mod log names
This adds "name:" to syscfg.logs nodes.
This is optional log name.
With this change newt tool also generates file:
<bsp>-logcfg.c that contains function:
const char *logcfg_log_module_name(uint8_t id)
that can be used to get module name for generated mod logs.
If name is not present like in this example:
syscfg.logs:
BMA400_LOG:
module: MYNEWT_VAL(BMA400_LOG_MODULE)
level: MYNEWT_VAL(BMA400_LOG_LVL)
module name will be taken from BMA400_LOG by cutting off
trailing _LOG to make it BMA400
---
newt/builder/targetbuild.go | 2 +-
newt/logcfg/logcfg.go | 84 ++++++++++++++++++++++++++++++++++++++-------
2 files changed, 72 insertions(+), 14 deletions(-)
diff --git a/newt/builder/targetbuild.go b/newt/builder/targetbuild.go
index c7efc03a..26cf2ec6 100644
--- a/newt/builder/targetbuild.go
+++ b/newt/builder/targetbuild.go
@@ -304,7 +304,7 @@ func (t *TargetBuilder) validateAndWriteCfg() error {
return err
}
- if err := t.res.LCfg.EnsureWritten(incDir); err != nil {
+ if err := t.res.LCfg.EnsureWritten(incDir, srcDir,
pkg.ShortName(t.target.Package())); err != nil {
return err
}
diff --git a/newt/logcfg/logcfg.go b/newt/logcfg/logcfg.go
index a650a1d5..fa56770f 100644
--- a/newt/logcfg/logcfg.go
+++ b/newt/logcfg/logcfg.go
@@ -53,6 +53,9 @@ type Log struct {
// The level assigned to this log.
Level val.ValSetting
+
+ // The log's string name
+ NameStr string
}
// Map of: [log-name] => log
@@ -147,8 +150,15 @@ func parseOneLog(name string, lpkg *pkg.LocalPackage,
logMapItf interface{},
"\"%s\" contains invalid \"level\": %s", name,
err.Error())
}
+ nameStr := logMap["name"]
+ if nameStr == "" {
+ // If there is no "name:" node, use log id without _LOG suffix
+ nameStr = "\"" + strings.Replace(name, "_LOG", "", 1) + "\""
+ }
+
cl.Module = mod
cl.Level = level
+ cl.NameStr = nameStr
return cl, nil
}
@@ -284,8 +294,28 @@ func (lcfg *LCfg) writeLogMacros(w io.Writer) {
}
}
+// Write log C macro definitions for each log in the log configuration.
+func (lcfg *LCfg) writeLogModuleNames(w io.Writer) {
+ logs := lcfg.sortedLogs()
+ fmt.Fprintf(w, "\n")
+ for _, l := range logs {
+ fmt.Fprintf(w,
+ "#define %s_NAME %s\n",
+ l.Name, l.NameStr)
+ }
+}
+
+func (lcfg *LCfg) writeLogModuleCases(w io.Writer) {
+ logs := lcfg.sortedLogs()
+ for _, l := range logs {
+ fmt.Fprintf(w,
+ " case %s: return %s_NAME;\n",
+ l.Module.Value, l.Name)
+ }
+}
+
// Writes a logcfg header file to the specified writer.
-func (lcfg *LCfg) write(w io.Writer) {
+func (lcfg *LCfg) writeHeader(w io.Writer) {
fmt.Fprintf(w, newtutil.GeneratedPreamble())
fmt.Fprintf(w, "#ifndef H_MYNEWT_LOGCFG_\n")
@@ -296,16 +326,33 @@ func (lcfg *LCfg) write(w io.Writer) {
fmt.Fprintf(w, "#include \"log_common/log_common.h\"\n")
lcfg.writeLogMacros(w)
+ lcfg.writeLogModuleNames(w)
fmt.Fprintf(w, "\n")
}
+ fmt.Fprintf(w, "const char *logcfg_log_module_name(uint8_t id);\n\n")
fmt.Fprintf(w, "#endif\n")
}
+// Writes a logcfg src file to the specified writer.
+func (lcfg *LCfg) writeSource(w io.Writer) {
+ fmt.Fprintf(w, newtutil.GeneratedPreamble())
+
+ fmt.Fprintf(w, "#include <stdint.h>\n")
+ fmt.Fprintf(w, "#include <stdlib.h>\n")
+ fmt.Fprintf(w, "#include <logcfg/logcfg.h>\n\n")
+ fmt.Fprintf(w, "const char *\nlogcfg_log_module_name(uint8_t id)\n{\n")
+ fmt.Fprintf(w, " switch (id) {\n")
+ lcfg.writeLogModuleCases(w)
+ fmt.Fprintf(w, " default: return NULL;\n }\n}\n")
+}
+
// Ensures an up-to-date logcfg header is written for the target.
-func (lcfg *LCfg) EnsureWritten(includeDir string) error {
+func (lcfg *LCfg) EnsureWritten(includeDir string, srcDir string, targetName
string) error {
buf := bytes.Buffer{}
- lcfg.write(&buf)
+ srcBuf := bytes.Buffer{}
+ lcfg.writeHeader(&buf)
+ lcfg.writeSource(&srcBuf)
path := includeDir + "/" + HEADER_PATH
@@ -313,20 +360,31 @@ func (lcfg *LCfg) EnsureWritten(includeDir string) error {
if err != nil {
return err
}
- if !writeReqd {
- log.Debugf("logcfg unchanged; not writing header file (%s).",
path)
- return nil
- }
+ if writeReqd {
+ log.Debugf("logcfg changed; writing header file (%s).", path)
- log.Debugf("logcfg changed; writing header file (%s).", path)
+ if err := os.MkdirAll(filepath.Dir(path), 0755); err != nil {
+ return util.NewNewtError(err.Error())
+ }
- if err := os.MkdirAll(filepath.Dir(path), 0755); err != nil {
- return util.NewNewtError(err.Error())
+ if err := ioutil.WriteFile(path, buf.Bytes(), 0644); err != nil
{
+ return util.NewNewtError(err.Error())
+ }
+ } else {
+ log.Debugf("logcfg unchanged; not writing header file (%s).",
path)
}
- if err := ioutil.WriteFile(path, buf.Bytes(), 0644); err != nil {
- return util.NewNewtError(err.Error())
- }
+ path = fmt.Sprintf("%s/%s-logcfg.c", srcDir, targetName)
+ writeReqd, err = util.FileContentsChanged(path, srcBuf.Bytes())
+ if writeReqd {
+ log.Debugf("logcfg changed; writing source file (%s).", path)
+ if err := os.MkdirAll(filepath.Dir(path), 0755); err != nil {
+ return util.NewNewtError(err.Error())
+ }
+ if err := os.WriteFile(path, srcBuf.Bytes(), 0644); err != nil {
+ return util.NewNewtError(err.Error())
+ }
+ }
return nil
}