Browse Source

[tools] add --menuconfig option for scons

Bernard Xiong 8 years ago
parent
commit
a7c4a23c67
2 changed files with 61 additions and 0 deletions
  1. 10 0
      tools/building.py
  2. 51 0
      tools/menuconfig.py

+ 10 - 0
tools/building.py

@@ -276,6 +276,16 @@ def PrepareBuilding(env, root_directory, has_libcpu=False, remove_components = [
             LINKCOMSTR = 'LINK $TARGET'
         )
 
+    AddOption('--menuconfig',
+                      dest='menuconfig',
+                      action='store_true',
+                      default=False,
+                      help='do the system configuration')
+
+    if GetOption('menuconfig'):
+        from menuconfig import config
+        config()
+
     # we need to seperate the variant_dir for BSPs and the kernels. BSPs could
     # have their own components etc. If they point to the same folder, SCons
     # would find the wrong source code to compile.

+ 51 - 0
tools/menuconfig.py

@@ -0,0 +1,51 @@
+import os
+
+# make rtconfig.h from .config
+
+def mk_rtconfig(filename):
+    try:
+        config = file(filename)
+    except:
+        print 'open .config failed'
+        return
+
+    rtconfig = file('rtconfig.h', 'w')
+    rtconfig.write('#ifndef RT_CONFIG_H__\n')
+    rtconfig.write('#define RT_CONFIG_H__\n\n')
+
+    empty_line = 1
+
+    for line in config:
+        line = line.lstrip(' ').replace('\n', '').replace('\r', '')
+
+        if len(line) == 0: continue
+
+        if line[0] == '#':
+            if len(line) == 1:
+                if empty_line:
+                    continue
+
+                rtconfig.write('\n')
+                empty_line = 1
+                continue
+
+            rtconfig.write('/*%s */\n' % line[1:])
+            empty_line = 0
+        else:
+            empty_line = 0
+            setting = line.split('=')
+            if len(setting) >= 2:
+                if setting[0].startswith('CONFIG_'):
+                    setting[0] = setting[0][7:]
+
+                if setting[1] == 'y':
+                    rtconfig.write('#define %s\n' % setting[0])
+                else:
+                    rtconfig.write('#define %s %s\n' % (setting[0], setting[1]))
+
+    rtconfig.write('#endif\n')
+    rtconfig.close()
+
+def config():
+    mk_rtconfig('.config')
+