#!/usr/bin/env python3 import argparse import os import os.path argparser = argparse.ArgumentParser(description="Compile all .py files to .mpy recursively") argparser.add_argument("-o", "--out", help="output directory (default: input dir)") argparser.add_argument("--target", help="select MicroPython target config") argparser.add_argument("dir", help="input directory") args = argparser.parse_args() TARGET_OPTS = { "unix": "", "baremetal": "", } args.dir = args.dir.rstrip("/") if not args.out: args.out = args.dir path_prefix_len = len(args.dir) + 1 for path, subdirs, files in os.walk(args.dir): for f in files: if f.endswith(".py"): fpath = path + "/" + f # print(fpath) out_fpath = args.out + "/" + fpath[path_prefix_len:-3] + ".mpy" out_dir = os.path.dirname(out_fpath) if not os.path.isdir(out_dir): os.makedirs(out_dir) cmd = "mpy-cross -v -v %s -s %s %s -o %s" % ( TARGET_OPTS.get(args.target, ""), fpath[path_prefix_len:], fpath, out_fpath, ) # print(cmd) res = os.system(cmd) assert res == 0