summaryrefslogtreecommitdiff
path: root/nuttx/tools
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-11-21 18:19:49 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-11-21 18:19:49 +0000
commitbae532d2adc61dc1db83f878366c54cc880b16f6 (patch)
tree6ced77dc71414b79d4b72c350137c4356160d736 /nuttx/tools
parentc17d30566b3b01abb2451595cdd7845fb47eb64e (diff)
downloadpx4-nuttx-bae532d2adc61dc1db83f878366c54cc880b16f6.tar.gz
px4-nuttx-bae532d2adc61dc1db83f878366c54cc880b16f6.tar.bz2
px4-nuttx-bae532d2adc61dc1db83f878366c54cc880b16f6.zip
configs/cloudctrl and tools/prebuild.py from Darcy Gong
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5378 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/tools')
-rw-r--r--nuttx/tools/README.txt24
-rw-r--r--nuttx/tools/prebuild.py256
2 files changed, 280 insertions, 0 deletions
diff --git a/nuttx/tools/README.txt b/nuttx/tools/README.txt
index 68b85dc4f..efe8ad68f 100644
--- a/nuttx/tools/README.txt
+++ b/nuttx/tools/README.txt
@@ -403,6 +403,30 @@ unlink.sh
script so that it uses the NTFS mklink command. But I have never
tried that
+prebuild.py
+-----------
+
+ This is a Python script contributed by Darcy Gong that automates many
+ build actions:
+
+ Nuttx configure utils v 0.3
+ usage: tools/prebuild.py [-abcdfhmr] [-b boardname] [-l number]\n'%(program_name)
+ -c, --clean : Will execute "make clean" command.
+ -d, --distclean : Will execute "make distclean" command.
+ -l, --cleanlevel : Will execute "make clean"(value of 1) or "make distclean"(value of 2) command.
+ -f, --fixcfg : The configuration correction nuttx.cfg defconfig configuration items.
+ -a, --auto : Equivalent parameters -d and -f.
+ -b, --boardname : The boardname configuration.
+ -r, --mkromfs : Make Romfs.
+ -m, --make : Make now.
+ -h, --help : Help Message.
+
+ example:'
+ usage 1 : tools/prebuild.py -b fire-stm32v2/nsh
+ usage 2 : tools/prebuild.py -f -b fire-stm32v2/nsh
+ usage 3 : tools/prebuild.py -a -b fire-stm32v2/nsh
+ usage 4 : tools/prebuild.py -l 1 -f -b fire-stm32v2/nsh
+
mkimage.sh
----------
diff --git a/nuttx/tools/prebuild.py b/nuttx/tools/prebuild.py
new file mode 100644
index 000000000..34fed09b6
--- /dev/null
+++ b/nuttx/tools/prebuild.py
@@ -0,0 +1,256 @@
+#!/usr/bin/python
+
+import os
+import sys,getopt
+import commands
+import ConfigParser
+import socket
+import fcntl
+import struct
+import re
+
+class Enum(object):
+ def __init__(self, *keys):
+ self.__dict__.update(zip(keys, range(len(keys))))
+
+enum_parse_tag = Enum('tag','item')
+enum_config = Enum('std','ext')
+
+def put_file_contents(filename,data=''):
+ if not os.path.isfile(filename):
+ return ''
+ try:
+ f = open(filename,'w')
+ contents = f.write(data)
+ f.close()
+ except IOError:
+ print 'file open or write err!'
+
+def fix_nuttx_cfg_value(key,val):
+ #if key == "CONFIG_NSH_IPADDR":
+ if re.search(r"_IPADDR$", key):
+ return '%s=%s\n'%(key,get_local_ip(50,2))
+ #elif key == "CONFIG_NSH_DRIPADDR":
+ elif re.search(r"_DRIPADDR$", key):
+ return '%s=%s\n'%(key,get_local_ip(1,2))
+ else:
+ return '%s=%s\n'%(key,val)
+
+def fix_nuttx_config(cfg,fix_cfgs):
+ result = ''
+ for line in cfg.readlines():
+ line = line.strip()
+ if line.startswith('#'):
+ result += line+'\n'
+ continue
+ elif len(line) == 0:
+ result += '\n'
+ continue
+ elif line.count('=') > 0 :
+ #print line
+ it = line.find('=')
+ key = line[0:it].strip()
+ val = line[it + 1:].strip()
+ if fix_cfgs.has_key(key):
+ result += fix_nuttx_cfg_value(key, fix_cfgs.pop(key))
+ else:
+ result += line+'\n'
+ else:
+ result += line+'\n'
+ #fix_cfgs = {}
+ #print fix_cfgs.viewitems()
+ if (len(fix_cfgs.keys())>0):
+ result += '\n\n####################################################\n\n'
+ for key in fix_cfgs.keys():
+ result += fix_nuttx_cfg_value(key, fix_cfgs.pop(key))
+ return result
+
+
+def usage():
+ program_name = sys.argv[0]
+ print 'Nuttx configure utils v 0.3\n'
+ print ' usage: %s [-abcdfhmr] [-b boardname] [-l number]\n'%(program_name)
+ print ' -c, --clean : Will execute "make clean" command.'
+ print ' -d, --distclean : Will execute "make distclean" command.'
+ print ' -l, --cleanlevel : Will execute "make clean"(value of 1) or "make distclean"(value of 2) command.'
+ print ' -f, --fixcfg : The configuration correction nuttx.cfg defconfig configuration items.'
+ print ' -a, --auto : Equivalent parameters -d and -f.'
+ print ' -b, --boardname : The boardname configuration.'
+ print ' -r, --mkromfs : Make Romfs.'
+ print ' -m, --make : Make now.'
+ print ' -h, --help : Help Message.'
+ print '\n example:'
+ print ' usage 1 : %s -b fire-stm32v2/nsh'%(program_name)
+ print ' usage 2 : %s -f -b fire-stm32v2/nsh'%(program_name)
+ print ' usage 3 : %s -a -b fire-stm32v2/nsh'%(program_name)
+ print ' usage 4 : %s -l 1 -f -b fire-stm32v2/nsh'%(program_name)
+
+def fix_config(boardname,fix_cfgs):
+ cfg_path = './configs/%s/defconfig'%boardname
+ if (os.path.isfile(cfg_path)):
+ try:
+ cfg = open(cfg_path, "r")
+ contents = fix_nuttx_config(cfg,fix_cfgs)
+ cfg.close()
+ #print contents
+ put_file_contents(cfg_path,contents)
+ except IOError:
+ print 'nuttx config open err!'
+ return ''
+
+def fix_root_config(fix_cfgs):
+ cfg_path = '.config'
+ if (os.path.isfile(cfg_path)):
+ try:
+ cfg = open(cfg_path, "r")
+ contents = fix_nuttx_config(cfg,fix_cfgs)
+ cfg.close()
+ #print contents
+ put_file_contents(cfg_path,contents)
+ except IOError:
+ print 'nuttx config open err!'
+ return ''
+
+def get_local_ipn(ifname):
+ s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+ ip = fcntl.ioctl(s.fileno(),
+ 0x8915, # SIOCGIFADDR
+ struct.pack('256s', ifname[:15]))[20:24]
+ return ip
+
+def get_local_ip(id=-1,mode=1):
+ ip = get_local_ipn('eth0')
+ if (id < 0):
+ id = ord(ip[3])
+ ipr = ord(ip[0])<<24|ord(ip[1])<<16|ord(ip[2])<<8|(id & 0xFF)
+ if mode == 1 :
+ return socket.inet_ntoa(struct.pack('>L', ipr))
+ if mode == 2 :
+ return "0x%x"%ipr
+ else:
+ return ipr
+
+def get_ip_address(ifname):
+ s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+ return socket.inet_ntoa(fcntl.ioctl(
+ s.fileno(),
+ 0x8915, # SIOCGIFADDR
+ struct.pack('256s', ifname[:15])
+ )[20:24])
+
+def config(cfg={}):
+ output = ''
+ fix_cfgs = {}
+ if cfg.clearlevel == 2:
+ print "make distclean apps_distclean"
+ output = commands.getoutput("make distclean apps_distclean")
+ elif cfg.clearlevel == 1:
+ print "make clean apps_clean"
+ output = commands.getoutput("make clean apps_clean")
+
+ ini = ConfigParser.ConfigParser()
+ ini.optionxform = str
+ cfgf = 'nuttx_cfg.py'
+ #if not(os.path.isfile(cfgf)):
+ #fp = open(cfgf,'w')
+ #fp.write('# is nuttx config\n[info]\nlast=')
+ #fp.close()
+ #cfgf = open(cfgf,'rw')
+ ini.readfp(open(cfgf))
+ lastfile = ini.get('info','last')
+ if (cmp(lastfile,cfg.boardname) != 0):
+ if ((cfg.boardname.strip() !='')):
+ lastfile = cfg.boardname
+ ini.set('info','last',lastfile)
+ ini.write(open(cfgf, "w"))
+ if cfg.usefix:
+ #print lastfile
+ if ini.has_section('defconfig'):
+ opts = ini.items('defconfig')
+ for item in opts:
+ fix_cfgs[item[0]] = item[1]
+ if ini.has_section(lastfile):
+ opts = ini.items(lastfile)
+ for item in opts:
+ fix_cfgs[item[0]] = item[1]
+ #print fix_cfgs
+ #fix_config(boardname,fix_cfgs)
+
+ output = commands.getoutput("cd tools;./configure.sh %s;cd .."%lastfile)
+ print "tools/configure.sh %s"%lastfile
+ if cfg.usefix:
+ fix_root_config(fix_cfgs)
+ print "fix .config file"
+ if cfg.mkromfs:
+ if (os.path.isfile("./rcS.template")):
+ print "tools/mkromfsimg.sh ."
+ #output = commands.getoutput("tools/mkromfs.sh .")
+ os.system("tools/mkromfsimg.sh .")
+ bpath = "configs/%s/include"%(lastfile.split('/')[0])
+ if (not os.path.exists(bpath)):
+ print "mkdir -p %s"%(bpath)
+ #commands.getoutput("mkdir -pv %s"%(bpath))
+ os.system("mkdir -pv %s"%(bpath))
+ if (not os.path.exists(bpath)):
+ print "[ERROR] no %s"%(bpath)
+ if (os.path.isfile("nsh_romfsimg.h")):
+ print "cp nsh_romfsimg.h %s/nsh_romfsimg.h"%(bpath)
+ #output = commands.getoutput("cp nsh_romfsimg.h include/arch/board/nsh_romfsimg.h")
+ os.system("cp nsh_romfsimg.h %s/nsh_romfsimg.h"%(bpath))
+ if cfg.make:
+ os.system("sleep 3")
+ print "make"
+ os.system("make")
+ if '' != output.strip():
+ print output
+
+class cfgobj():
+ usefix = False
+ mkromfs = False
+ make = False
+ clearlevel = 0
+ boardname = ''
+
+def main():
+ try:
+ opts, args = getopt.getopt(sys.argv[1:], "dcb:hal:frm",
+ ["dictclean","clean","board=", "auto", "cleanlevel=",
+ "help","fixcfg","mkromfs","make"])
+ except getopt.GetoptError:
+ # print help information and exit:
+ usage()
+ sys.exit(2)
+ #cfg = {"usefix":False,"mkromfs":False,"make":False,"clearlevel":0,"boardname":'' }
+ cfg = cfgobj()
+ for o, v in opts:
+ if o in ("-a","--auto"):
+ cfg.clearlevel = 2
+ cfg.usefix = True
+ cfg.mkromfs = True
+ cfg.make = True
+ if o in ("-c","--clean"):
+ cfg.clearlevel = 1
+ if o in ("-d","--distclean"):
+ cfg.clearlevel = 2
+ if o in ("-l","--cleanlevel"):
+ if v == '1':
+ cfg.clearlevel = 1
+ elif v == '2':
+ cfg.clearlevel = 2
+ else:
+ cfg.clearlevel = 0
+ if o in ("-b","--board"):
+ cfg.boardname = v
+ if o in ("-f","--fixcfg"):
+ cfg.usefix = True
+ if o in ("-r","--mkromfs"):
+ cfg.mkromfs = True
+ if o in ("-m","--make"):
+ cfg.make = True
+ if o in ("-h", "--help"):
+ usage()
+ sys.exit()
+ config(cfg)
+
+if __name__ == "__main__":
+ main()