From 89afad784ce577b5be48d032c2c3881836b59d15 Mon Sep 17 00:00:00 2001 From: Bernard Xiong Date: Thu, 30 Nov 2017 19:56:05 +0800 Subject: [PATCH] [Tools] Add menuconfig script --- tools/building.py | 11 ++++++++ tools/menuconfig.py | 68 +++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 77 insertions(+), 2 deletions(-) diff --git a/tools/building.py b/tools/building.py index 624245c202..79c013527b 100644 --- a/tools/building.py +++ b/tools/building.py @@ -274,6 +274,17 @@ def PrepareBuilding(env, root_directory, has_libcpu=False, remove_components = [ genconfig() exit(0) + if env['PLATFORM'] != 'win32': + AddOption('--menuconfig', + dest = 'menuconfig', + action = 'store_true', + default = False, + help = 'make menuconfig for RT-Thread BSP') + if GetOption('menuconfig'): + from menuconfig import menuconfig + menuconfig(Rtt_Root) + exit(0) + # add comstr option AddOption('--verbose', dest='verbose', diff --git a/tools/menuconfig.py b/tools/menuconfig.py index 9821f48ccb..4ffcd9372f 100644 --- a/tools/menuconfig.py +++ b/tools/menuconfig.py @@ -29,23 +29,87 @@ def mk_rtconfig(filename): empty_line = 1 continue - rtconfig.write('/*%s */\n' % line[1:]) + comment_line = line[1:] + if line.startswith('# CONFIG_'): line = ' ' + line[9:] + else: line = line[1:] + + rtconfig.write('/*%s */\n' % line) empty_line = 0 else: empty_line = 0 - setting = line.split('=', 1) + setting = line.split('=') if len(setting) >= 2: if setting[0].startswith('CONFIG_'): setting[0] = setting[0][7:] + # remove CONFIG_PKG_XX_PATH or CONFIG_PKG_XX_VER + if type(setting[0]) == type('a') and (setting[0].endswith('_PATH') or setting[0].endswith('_VER')): + continue + if setting[1] == 'y': rtconfig.write('#define %s\n' % setting[0]) else: rtconfig.write('#define %s %s\n' % (setting[0], setting[1])) + if os.path.isfile('rtconfig_project.h'): + rtconfig.write('#include "rtconfig_project.h"\n') + + rtconfig.write('\n') rtconfig.write('#endif\n') rtconfig.close() def config(): mk_rtconfig('.config') +def get_env_dir(): + if os.environ.get('ENV_ROOT'): + return os.environ.get('ENV_ROOT') + + home_dir = os.environ['HOME'] + env_dir = os.path.join(home_dir, '.env') + + if not os.path.exists(env_dir): + return None + + return env_dir + +def touch_env(): + home_dir = os.environ['HOME'] + env_dir = os.path.join(home_dir, '.env') + if not os.path.exists(env_dir): + os.mkdir(env_dir) + os.mkdir(os.path.join(env_dir, 'local_pkgs')) + os.mkdir(os.path.join(env_dir, 'packages')) + kconfig = file(os.path.join(env_dir, 'packages', 'Kconfig'), 'w') + +# menuconfig for Linux +def menuconfig(RTT_ROOT): + kconfig_dir = os.path.join(RTT_ROOT, 'tools', 'kconfig-frontends') + os.system('scons -C ' + kconfig_dir) + + env_dir = get_env_dir() + if not env_dir: + touch_env() + env_dir = get_env_dir() + + os.environ['PKGS_ROOT'] = os.path.join(env_dir, 'packages') + + fn = '.config' + + if os.path.isfile(fn): + mtime = os.path.getmtime(fn) + else: + mtime = -1 + + kconfig_cmd = os.path.join(RTT_ROOT, 'tools', 'kconfig-frontends', 'kconfig-mconf') + os.system(kconfig_cmd + ' Kconfig') + + if os.path.isfile(fn): + mtime2 = os.path.getmtime(fn) + else: + mtime2 = -1 + + # make rtconfig.h + if mtime != mtime2: + mk_rtconfig(fn) +