scripts: dts: Output paths relative to $ZEPHYR_BASE

Requested by Marc Herbert. Makes the output deterministic as long as all
binding directories are within $ZEPHYR_BASE (and a bit less spammy too).

Example output for header:

Before:

    /*  Directories with bindings: /home/ulf/z/z/dts/bindings  */
    ...
    /*  Binding (...): /home/ulf/.../arm,v7m-nvic.yaml  */

After:

    /*  Directories with bindings: $ZEPHYR_BASE/dts/bindings  */
    ...
    /*  Binding (...): $ZEPHYR_BASE/dts/.../arm,v7m-nvic.yaml  */

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
This commit is contained in:
Ulf Magnusson 2019-10-02 21:30:24 +02:00 committed by Kumar Gala
commit 178f16f9e9

View file

@ -19,6 +19,8 @@
# edtlib. This will keep this script simple. # edtlib. This will keep this script simple.
import argparse import argparse
import os
import pathlib
import sys import sys
import edtlib import edtlib
@ -40,7 +42,8 @@ def main():
out_comment("Generated by gen_defines.py", blank_before=False) out_comment("Generated by gen_defines.py", blank_before=False)
out_comment("DTS input file: " + args.dts, blank_before=False) out_comment("DTS input file: " + args.dts, blank_before=False)
out_comment("Directories with bindings: " + ", ".join(args.bindings_dirs), out_comment("Directories with bindings: " +
", ".join(map(relativize, args.bindings_dirs)),
blank_before=False) blank_before=False)
active_compats = set() active_compats = set()
@ -54,7 +57,8 @@ def main():
out_comment("Devicetree node: " + node.path) out_comment("Devicetree node: " + node.path)
out_comment("Binding (compatible = {}): {}".format( out_comment("Binding (compatible = {}): {}".format(
node.matching_compat, node.binding_path), node.matching_compat,
relativize(node.binding_path)),
blank_before=False) blank_before=False)
out_comment("Binding description: " + node.description, out_comment("Binding description: " + node.description,
blank_before=False) blank_before=False)
@ -111,6 +115,22 @@ def parse_args():
return parser.parse_args() return parser.parse_args()
def relativize(path):
# If 'path' is within $ZEPHYR_BASE, returns it relative to $ZEPHYR_BASE,
# with a "$ZEPHYR_BASE/..." hint at the start of the string. Otherwise,
# returns 'path' unchanged.
zbase = os.getenv("ZEPHYR_BASE")
if zbase is None:
return path
try:
return str("$ZEPHYR_BASE" / pathlib.Path(path).relative_to(zbase))
except ValueError:
# Not within ZEPHYR_BASE
return path
def write_regs(node): def write_regs(node):
# Writes address/size output for the registers in the node's 'reg' property # Writes address/size output for the registers in the node's 'reg' property