Merge pull request #456 from BernardXiong/master

[tools] Add package.json as building script.
This commit is contained in:
Bernard Xiong committed 2015-04-10 14:43:42 +08:00
commit 3949ae258b
27 files changed
+576 -458

No files matched your search

+25
View File
@@ -39,6 +39,31 @@ As a special exception, including RT-Thread RTOS header files in a file, instant
RT-Thread RTOS uses [scons](http://www.scons.org) as its building system. Therefore, please install scons and Python 2.7 firstly.
So far, the RT-Thread scons building system support the command line compiling or generate some IDE's project. There are some option varaibles in the scons building script:
In rtconfig.py file:
* ```RTT_CC``` the compiler which you want to use, gcc/keil/iar.
* ```EXEC_PATH``` the path of compiler.
In SConstruct file:
```RTT_ROOT``` This variable is the root directory of RT-Thread RTOS. If you build the porting in the bsp directory, you can use the default value. Also, you can set the root directory in ```RTT_ROOT``` environment variable.
When you set these variables correctly, you can use command:
scons
under BSP directory to simplely compile RT-Thread RTOS.
If you want to generate the IDE's project file, firstly you should change the ```RTT_CC``` in the rtconfig.py file. Then use command:
scons --target=mdk/mdk4/iar/cb -s
to generate the project file.
NOTE: RT-Thread scons building system will tailor the system according to your rtconfig.h configuration header file. For example, if you disable the lwIP in the rtconfig.h by commenting the ```#define RT_USING_LWIP```, the generated project file has no lwIP related files.
## Contribution ##
Thank all of RT-Thread Developers.
+24
View File
@@ -1,3 +1,27 @@
/*
* File : crt.cpp
* This file is part of Device File System in RT-Thread RTOS
* COPYRIGHT (C) 2008-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-03-07 Bernard Add copyright header.
*/
#include <rtthread.h>
#include "crt.h"
+24
View File
@@ -1,3 +1,27 @@
/*
* File : crt.h
* This file is part of Device File System in RT-Thread RTOS
* COPYRIGHT (C) 2008-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-03-07 Bernard Add copyright header.
*/
#ifndef CRT_H_
#define CRT_H_
+1 -1
View File
@@ -1,7 +1,7 @@
/*
* File : crt_init.c
* This file is part of Device File System in RT-Thread RTOS
* COPYRIGHT (C) 2008-2011, RT-Thread Development Team
* COPYRIGHT (C) 2008-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
+11 -200
View File
File diff suppressed because it is too large. Load diff
+15
View File
@@ -0,0 +1,15 @@
# RT-Thread building script for bridge
import os
from building import *
cwd = GetCurrentDir()
objs = []
list = os.listdir(cwd)
for d in list:
path = os.path.join(cwd, d)
if os.path.isfile(os.path.join(path, 'SConscript')):
objs = objs + SConscript(os.path.join(d, 'SConscript'))
Return('objs')
@@ -0,0 +1,11 @@
# RT-Thread building script for component
from building import *
cwd = GetCurrentDir()
src = Glob('*.c')
CPPPATH = [cwd]
group = DefineGroup('Filesystem', src, depend = ['RT_USING_DFS', 'RT_USING_DFS_DEVFS'], CPPPATH = CPPPATH)
Return('group')
@@ -0,0 +1,26 @@
# RT-Thread building script for component
from building import *
cwd = GetCurrentDir()
src = Glob('*.c')
CPPPATH = [cwd]
if GetDepend('RT_DFS_ELM_USE_LFN'):
if GetDepend('RT_DFS_ELM_CODE_PAGE_FILE'):
src += ['option/ccfile.c']
else:
if GetConfigValue('RT_DFS_ELM_CODE_PAGE') == 932:
src += ['option/cc932.c']
elif GetConfigValue('RT_DFS_ELM_CODE_PAGE') == 936:
src += ['option/cc936.c']
elif GetConfigValue('RT_DFS_ELM_CODE_PAGE') == 949:
src += ['option/cc949.c']
elif GetConfigValue('RT_DFS_ELM_CODE_PAGE') == 950:
src += ['option/cc950.c']
else:
src += ['option/ccsbcs.c']
group = DefineGroup('Filesystem', src, depend = ['RT_USING_DFS', 'RT_USING_DFS_ELMFAT'], CPPPATH = CPPPATH)
Return('group')
@@ -0,0 +1,50 @@
# RT-Thread building script for component
from building import *
cwd = GetCurrentDir()
src = Split('''
dfs_jffs2.c
porting.c
cyg/compress/src/adler32.c
cyg/compress/src/compress.c
cyg/compress/src/deflate.c
cyg/compress/src/infback.c
cyg/compress/src/inffast.c
cyg/compress/src/inflate.c
cyg/compress/src/inftrees.c
cyg/compress/src/trees.c
cyg/compress/src/uncompr.c
cyg/compress/src/zutil.c
cyg/crc/crc16.c
cyg/crc/crc32.c
cyg/crc/posix_crc.c
kernel/rbtree.c
src/build.c
src/compr.c
src/compr_rtime.c
src/compr_rubin.c
src/compr_zlib.c
src/debug.c
src/dir-ecos.c
src/erase.c
src/flashio.c
src/fs-ecos.c
src/gc.c
src/gcthread.c
src/malloc-ecos.c
src/nodelist.c
src/nodemgmt.c
src/read.c
src/readinode.c
src/scan.c
src/write.c
''')
CPPPATH = [cwd, cwd + '/include', cwd + '/src', cwd + '/cyg', cwd + '/kernel', cwd + '/cyg/compress']
group = DefineGroup('Filesystem', src, depend = ['RT_USING_DFS', 'RT_USING_DFS_JFFS2'], CPPPATH = CPPPATH)
Return('group')
+11
View File
@@ -0,0 +1,11 @@
# RT-Thread building script for component
from building import *
cwd = GetCurrentDir()
src = Glob('*.c')
CPPPATH = [cwd]
group = DefineGroup('Filesystem', src, depend = ['RT_USING_DFS', 'RT_USING_DFS_NFS'], CPPPATH = CPPPATH)
Return('group')
+1 -1
View File
@@ -4,6 +4,6 @@ cwd = GetCurrentDir()
src = Glob('*.c')
CPPPATH = [cwd]
group = DefineGroup('Filesystem', src, depend = ['RT_USING_DFS', 'RT_USING_MEMHEAP'], CPPPATH = CPPPATH)
group = DefineGroup('Filesystem', src, depend = ['RT_USING_DFS', 'RT_USING_MEMHEAP', 'RT_USING_DFS_RAMFS'], CPPPATH = CPPPATH)
Return('group')
@@ -0,0 +1,15 @@
# RT-Thread building script for component
from building import *
cwd = GetCurrentDir()
src = Glob('*.c')
CPPPATH = [cwd]
if GetDepend('DFS_ROMFS_ROOT'):
# A new ROMFS root has been defined, we should remove the romfs.c
SrcRemove(src, ['romfs.c'])
group = DefineGroup('Filesystem', src, depend = ['RT_USING_DFS','RT_USING_DFS_ROMFS'], CPPPATH = CPPPATH)
Return('group')
@@ -1,7 +1,7 @@
/*
* File : skeleton.c
* This file is part of Device File System in RT-Thread RTOS
* COPYRIGHT (C) 2004-2011, RT-Thread Development Team
* COPYRIGHT (C) 2004-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
@@ -100,3 +100,4 @@ int dfs_skt_init(void)
dfs_register(&_skt_fs);
return 0;
}
INIT_FS_EXPORT(dfs_skt_init);
@@ -0,0 +1,11 @@
# RT-Thread building script for component
from building import *
cwd = GetCurrentDir()
src = Glob('*.c')
CPPPATH = [cwd, cwd + '/src/inc']
group = DefineGroup('Filesystem', src, depend = ['RT_USING_DFS', 'RT_USING_DFS_UFFS'], CPPPATH = CPPPATH)
Return('group')
-1
View File
@@ -623,7 +623,6 @@ int list_mod_detail(const char *name)
return 0;
}
FINSH_FUNCTION_EXPORT(list_mod_detail, list module objects in system)
MSH_CMD_EXPORT(list_mod_detail, list module objects in system)
#endif
long list(void)
+2 -1
View File
@@ -526,7 +526,8 @@ void finsh_thread_entry(void* parameter)
else
{
shell->line[shell->line_position] = ch;
rt_kprintf("%c", ch);
if (shell->echo_mode)
rt_kprintf("%c", ch);
}
ch = 0;
-14
View File
@@ -1,14 +0,0 @@
Import('rtconfig')
from building import *
cwd = GetCurrentDir()
src = Glob('*.c')
CPPPATH = [cwd]
if rtconfig.CROSS_TOOL == 'keil':
LINKFLAGS = ' --keep __rt_init* '
else:
LINKFLAGS = ''
group = DefineGroup('Components', src, depend = ['RT_USING_COMPONENTS_INIT'], CPPPATH = CPPPATH, LINKFLAGS = LINKFLAGS)
Return('group')
-177
View File
@@ -1,177 +0,0 @@
/*
* File : components.c
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2012 - 2013, 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
* 2012-09-20 Bernard Change the name to components.c
* And all components related header files.
* 2012-12-23 Bernard fix the pthread initialization issue.
* 2013-06-23 Bernard Add the init_call for components initialization.
* 2013-07-05 Bernard Remove initialization feature for MS VC++ compiler
*/
#include "components.h"
static int rti_start(void)
{
return 0;
}
INIT_EXPORT(rti_start, "0");
static int rti_board_end(void)
{
return 0;
}
INIT_EXPORT(rti_board_end, "1.post");
static int rti_end(void)
{
return 0;
}
INIT_EXPORT(rti_end,"7");
/**
* RT-Thread Components Initialization for board
*/
void rt_components_board_init(void)
{
#ifndef _MSC_VER
#if RT_DEBUG_INIT
int result;
const struct rt_init_desc *desc;
for (desc = &__rt_init_desc_rti_start; desc < &__rt_init_desc_rti_board_end; desc ++)
{
rt_kprintf("initialize %s", desc->fn_name);
result = desc->fn();
rt_kprintf(":%d done\n", result);
}
#else
const init_fn_t *fn_ptr;
for (fn_ptr = &__rt_init_rti_start; fn_ptr < &__rt_init_rti_board_end; fn_ptr++)
{
(*fn_ptr)();
}
#endif
#endif
}
/**
* RT-Thread Components Initialization
*/
void rt_components_init(void)
{
#ifndef _MSC_VER
#if RT_DEBUG_INIT
int result;
const struct rt_init_desc *desc;
rt_kprintf("do components intialization.\n");
for (desc = &__rt_init_desc_rti_board_end; desc < &__rt_init_desc_rti_end; desc ++)
{
rt_kprintf("initialize %s", desc->fn_name);
result = desc->fn();
rt_kprintf(":%d done\n", result);
}
#else
const init_fn_t *fn_ptr;
for (fn_ptr = &__rt_init_rti_board_end; fn_ptr < &__rt_init_rti_end; fn_ptr ++)
{
(*fn_ptr)();
}
#endif
#else
#ifdef RT_USING_MODULE
rt_system_module_init();
#endif
#ifdef RT_USING_FINSH
/* initialize finsh */
finsh_system_init();
finsh_set_device(RT_CONSOLE_DEVICE_NAME);
#endif
#ifdef RT_USING_LWIP
/* initialize lwip stack */
/* register ethernetif device */
eth_system_device_init();
/* initialize lwip system */
lwip_system_init();
rt_kprintf("TCP/IP initialized!\n");
#endif
#ifdef RT_USING_DFS
/* initialize the device file system */
dfs_init();
#ifdef RT_USING_DFS_ELMFAT
/* initialize the elm chan FatFS file system*/
elm_init();
#endif
#if defined(RT_USING_DFS_NFS) && defined(RT_USING_LWIP)
/* initialize NFSv3 client file system */
nfs_init();
#endif
#ifdef RT_USING_DFS_YAFFS2
dfs_yaffs2_init();
#endif
#ifdef RT_USING_DFS_UFFS
dfs_uffs_init();
#endif
#ifdef RT_USING_DFS_JFFS2
dfs_jffs2_init();
#endif
#ifdef RT_USING_DFS_ROMFS
dfs_romfs_init();
#endif
#ifdef RT_USING_DFS_RAMFS
dfs_ramfs_init();
#endif
#ifdef RT_USING_DFS_DEVFS
devfs_init();
#endif
#endif /* end of RT_USING_DFS */
#ifdef RT_USING_NEWLIB
libc_system_init(RT_CONSOLE_DEVICE_NAME);
#else
/* the pthread system initialization will be initiallized in libc */
#ifdef RT_USING_PTHREADS
pthread_system_init();
#endif
#endif
#ifdef RT_USING_RTGUI
rtgui_system_server_init();
#endif
#ifdef RT_USING_USB_HOST
rt_usb_host_init();
#endif
#endif
}
+21 -15
View File
@@ -18,32 +18,38 @@
#endif
void libc_system_init(const char* tty_name)
int libc_system_init(void)
{
#ifdef RT_USING_DFS
int fd;
int fd;
struct rt_device *console_dev;
#ifndef RT_USING_DFS_DEVFS
#error Please enable devfs by defining RT_USING_DFS_DEVFS in rtconfig.h
#endif
/* initialize console device */
rt_console_init(tty_name);
console_dev = rt_console_get_device();
if (console_dev)
{
/* initialize console device */
rt_console_init(console_dev->parent.name);
/* open console as stdin/stdout/stderr */
fd = open("/dev/console", O_RDONLY, 0); /* for stdin */
fd = open("/dev/console", O_WRONLY, 0); /* for stdout */
fd = open("/dev/console", O_WRONLY, 0); /* for stderr */
/* skip warning */
fd = fd;
/* open console as stdin/stdout/stderr */
fd = open("/dev/console", O_RDONLY, 0); /* for stdin */
fd = open("/dev/console", O_WRONLY, 0); /* for stdout */
fd = open("/dev/console", O_WRONLY, 0); /* for stderr */
/* skip warning */
fd = fd;
}
#endif
/* set PATH and HOME */
putenv("PATH=/");
putenv("HOME=/");
/* set PATH and HOME */
putenv("PATH=/bin");
putenv("HOME=/home");
#ifdef RT_USING_PTHREADS
pthread_system_init();
pthread_system_init();
#endif
}
INIT_COMPONENT_EXPORT(libc_system_init);
+7 -7
View File
@@ -3,15 +3,15 @@
#include <sys/time.h>
#define MILLISECOND_PER_SECOND 1000UL
#define MICROSECOND_PER_SECOND 1000000UL
#define NANOSECOND_PER_SECOND 1000000000UL
#define MILLISECOND_PER_SECOND 1000UL
#define MICROSECOND_PER_SECOND 1000000UL
#define NANOSECOND_PER_SECOND 1000000000UL
#define MILLISECOND_PER_TICK (MILLISECOND_PER_SECOND / RT_TICK_PER_SECOND)
#define MICROSECOND_PER_TICK (MICROSECOND_PER_SECOND / RT_TICK_PER_SECOND)
#define NANOSECOND_PER_TICK (NANOSECOND_PER_SECOND / RT_TICK_PER_SECOND)
#define MILLISECOND_PER_TICK (MILLISECOND_PER_SECOND / RT_TICK_PER_SECOND)
#define MICROSECOND_PER_TICK (MICROSECOND_PER_SECOND / RT_TICK_PER_SECOND)
#define NANOSECOND_PER_TICK (NANOSECOND_PER_SECOND / RT_TICK_PER_SECOND)
void libc_system_init(const char* tty_name);
int libc_system_init(void);
/* some time related function */
int libc_set_time(const struct timespec *time);
@@ -1,7 +1,8 @@
/*
* File : components_init.h
* File : components.h
* header for RT-Thread components
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2012, RT-Thread Development Team
* COPYRIGHT (C) 2012-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
@@ -21,12 +22,12 @@
* Date Author Notes
* 2012-09-20 Bernard Change the name to components.h
* And all components related header files.
* 2015-02-06 Bernard Rename the components.h to rtcom.h
* 2015-03-22 Bernard Keep the compatibility.
*/
#ifndef __COMPONENTS_INIT_H__
#define __COMPONENTS_INIT_H__
#include <rtthread.h>
#ifndef COMPONENTS_H__
#define COMPONENTS_H__
#ifdef RT_USING_FINSH
#include <finsh.h>
@@ -36,7 +37,6 @@
#ifdef RT_USING_LWIP
#include <lwip/sys.h>
#include <netif/ethernetif.h>
extern void lwip_system_init(void);
#endif
#ifdef RT_USING_DFS
@@ -68,9 +68,6 @@ extern void lwip_system_init(void);
#endif
#endif
#ifdef RT_USING_NEWLIB
#include <libc.h>
#endif
#ifdef RT_USING_PTHREADS
#include <pthread.h>
#endif
@@ -79,27 +76,4 @@ extern void lwip_system_init(void);
#include <rtm.h>
#endif
#ifdef RT_USING_RTGUI
#include <rtgui/rtgui_system.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
/**
* Initializes board routine in RT-Thread.
*/
void rt_components_board_init(void);
/**
* Initializes components in RT-Thread
* notes: this function must be invoked in Init Thread
*/
void rt_components_init(void);
#ifdef __cplusplus
}
#endif
#endif
+9 -4
View File
@@ -437,6 +437,11 @@ void rt_module_unload_sethook(void (*hook)(rt_module_t module));
void rt_module_init_object_container(struct rt_module *module);
rt_err_t rt_module_destroy(rt_module_t module);
/*
* application module system initialization
*/
int rt_system_module_init(void);
/*@}*/
#endif
@@ -455,10 +460,10 @@ void rt_interrupt_leave(void);
*/
rt_uint8_t rt_interrupt_get_nest(void);
/**
* application module
*/
int rt_system_module_init(void);
#ifdef RT_USING_COMPONENTS_INIT
void rt_components_init(void);
void rt_components_board_init(void);
#endif
/**
* @addtogroup KernelService
+7 -2
View File
@@ -5,8 +5,13 @@ from building import *
src = Glob('*.c')
CPPPATH = [RTT_ROOT + '/include']
if rtconfig.CROSS_TOOL == 'keil' and GetDepend('RT_USING_MODULE') == True:
LINKFLAGS = ' --keep __rtmsym_* '
if rtconfig.CROSS_TOOL == 'keil':
# add more link flags for module and components_init.
LINKFLAGS = ''
if GetDepend('RT_USING_MODULE'):
LINKFLAGS = ' --keep __rtmsym_* '
if GetDepend('RT_USING_COMPONENTS_INIT'):
LINKFLAGS = ' --keep __rt_init* '
else:
LINKFLAGS = ''
+216
View File
File diff suppressed because it is too large. Load diff
+5
View File
@@ -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))
+74
View File
@@ -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
+1 -1
View File
@@ -40,7 +40,7 @@ SConscript_com = '''# RT-Thread building script for component
from building import *
cwd = GetCurrentDir()
src = Glob('*.c')
src = Glob('*.c') + Glob('*.cpp')
CPPPATH = [cwd]
group = DefineGroup('COMPONENT_NAME', src, depend = [''], CPPPATH = CPPPATH)