summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2015-04-10 06:35:59 +0000
committerBernard Xiong <[email protected]>2015-04-10 06:35:59 +0000
commit1f95de43aa6f24d2684e40b1d9e1a60689f7651d (patch)
treee1e32a9935deab57084e1a9f9cdae2e570559d60
parent4b838caaf808f72a0d449926d9f7d43d4fa05815 (diff)
[tools] Add package.json as building script
-rw-r--r--tools/building.py5
-rw-r--r--tools/package.py74
2 files changed, 79 insertions, 0 deletions
diff --git a/tools/building.py b/tools/building.py
index d95cf3672f..c4702de82d 100644
--- a/tools/building.py
+++ b/tools/building.py
@@ -595,6 +595,11 @@ def GlobSubDir(sub_dir, ext_name):
dst.append(os.path.relpath(item, sub_dir))
return dst
+def PackageSConscript(package):
+ from package import BuildPackage
+
+ return BuildPackage(package)
+
def file_path_exist(path, *args):
return os.path.exists(os.path.join(path, *args))
diff --git a/tools/package.py b/tools/package.py
new file mode 100644
index 0000000000..55b318b2a3
--- /dev/null
+++ b/tools/package.py
@@ -0,0 +1,74 @@
+#
+# File : package.py
+# This file is part of RT-Thread RTOS
+# COPYRIGHT (C) 2006 - 2015, RT-Thread Development Team
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Change Logs:
+# Date Author Notes
+# 2015-04-10 Bernard First version
+#
+
+# this script is used to build group with package.json instead of SConscript
+import os
+from building import *
+
+def ExtendPackageVar(package, var):
+ v = []
+ if not package.has_key(var):
+ return v
+
+ for item in package[var]:
+ v = v + [item]
+
+ return v
+
+def BuildPackage(package):
+ import json
+ f = file(package)
+ package_json = f.read()
+
+ # get package.json path
+ cwd = os.path.dirname(package)
+
+ package = json.loads(package_json)
+
+ # check package name
+ if not package.has_key('name'):
+ return []
+
+ # get depends
+ depend = ExtendPackageVar(package, 'depends')
+
+ src = []
+ if package.has_key('source_files'):
+ for src_file in package['source_files']:
+ src_file = os.path.join(cwd, src_file)
+ src += Glob(src_file)
+
+ CPPPATH = []
+ if package.has_key('CPPPATH'):
+ for path in package['CPPPATH']:
+ if path.startswith('/') and os.path.isdir(path):
+ CPPPATH = CPPPATH + [path]
+ else:
+ CPPPATH = CPPPATH + [os.path.join(cwd, path)]
+
+ CPPDEFINES = ExtendPackageVar(package, 'CPPDEFINES')
+
+ objs = DefineGroup(package['name'], src, depend = depend, CPPPATH = CPPPATH, CPPDEFINES = CPPDEFINES)
+
+ return objs