diff --git a/examples/module/ftk_demo/Makefile.am b/examples/module/ftk_demo/Makefile.am
deleted file mode 100644
index a8a9c96e77..0000000000
--- a/examples/module/ftk_demo/Makefile.am
+++ /dev/null
@@ -1,138 +0,0 @@
-include $(abs_top_srcdir)/src/rules.mk
-
-lib_LTLIBRARIES=libftk_demos.la
-
-noinst_PROGRAMS=demo_label demo_button demo_image demo_image_button demo_dialog demo_multi_win \
- demo_menu demo_entry demo_expand demo_zoom demo_progress_bar demo_check_button demo_wait_box \
- demo_scroll_bar demo_sprite demo_xul demo_transparent demo_listview demo_hello \
- demo_fullscreen demo_icon_view demo_text_view demo_msgbox demo_popup demo_alpha \
- demo_combo_box demo_ime demo_statusbar demo_file_browser demo_tab
-
-LOCAL_CFLAGS=-I$(abs_top_srcdir)/apps/common
-libftk_demos_la_SOURCES=demo_button.c demo_alpha.c demo_label.c demo_image.c \
- demo_image_button.c demo_dialog.c demo_multi_win.c demo_menu.c demo_entry.c \
- demo_expand.c demo_zoom.c demo_progress_bar.c demo_check_button.c demo_wait_box.c \
- demo_scroll_bar.c demo_sprite.c demo_xul.c demo_transparent.c demo_listview.c \
- demo_fullscreen.c demo_icon_view.c demo_text_view.c demo_msgbox.c demo_popup.c \
- demo_combo_box.c demo_ime.c demo_statusbar.c demo_file_browser.c ftk_app_demo.c \
- demo_hello.c demo_tab.c
-
-libftk_demos_la_LDFLAGS=$(MYLDFLAGS)
-libftk_demos_la_CFLAGS=$(LOCAL_CFLAGS) -DFTK_AS_PLUGIN
-
-if ENABLE_CAIRO
-noinst_PROGRAMS+=demo_cairo
-demo_cairo_SOURCES=demo_cairo.c
-demo_cairo_LDFLAGS=$(MYLDFLAGS)
-
-libftk_demos_la_SOURCES += demo_cairo.c
-
-endif
-
-if ENABLE_FRIBIDI
-noinst_PROGRAMS+=demo_bidi
-demo_bidi_SOURCES=demo_bidi.c
-demo_bidi_LDFLAGS=$(MYLDFLAGS)
-
-libftk_demos_la_SOURCES += demo_bidi.c
-endif
-
-demo_tab_SOURCES=demo_tab.c
-demo_tab_LDFLAGS=$(MYLDFLAGS)
-
-demo_file_browser_SOURCES=demo_file_browser.c
-demo_file_browser_LDFLAGS=$(MYLDFLAGS)
-
-demo_statusbar_SOURCES=demo_statusbar.c
-demo_statusbar_LDFLAGS=$(MYLDFLAGS)
-
-demo_ime_SOURCES=demo_ime.c
-demo_ime_LDFLAGS=$(MYLDFLAGS)
-
-demo_combo_box_SOURCES=demo_combo_box.c
-demo_combo_box_LDFLAGS=$(MYLDFLAGS)
-
-demo_alpha_SOURCES=demo_alpha.c
-demo_alpha_LDFLAGS=$(MYLDFLAGS)
-
-demo_zoom_SOURCES=demo_zoom.c
-demo_zoom_LDFLAGS=$(MYLDFLAGS)
-
-demo_popup_SOURCES=demo_popup.c
-demo_popup_LDFLAGS=$(MYLDFLAGS)
-
-demo_msgbox_SOURCES=demo_msgbox.c
-demo_msgbox_LDFLAGS=$(MYLDFLAGS)
-
-demo_text_view_SOURCES=demo_text_view.c
-demo_text_view_LDFLAGS=$(MYLDFLAGS)
-
-demo_icon_view_SOURCES=demo_icon_view.c
-demo_icon_view_LDFLAGS=$(MYLDFLAGS)
-
-demo_fullscreen_SOURCES=demo_fullscreen.c
-demo_fullscreen_LDFLAGS=$(MYLDFLAGS)
-
-demo_hello_SOURCES=demo_hello.c
-demo_hello_LDFLAGS=$(MYLDFLAGS)
-
-demo_listview_SOURCES=demo_listview.c
-demo_listview_LDFLAGS=$(MYLDFLAGS)
-
-demo_transparent_SOURCES=demo_transparent.c
-demo_transparent_LDFLAGS=$(MYLDFLAGS)
-
-demo_xul_SOURCES=demo_xul.c
-demo_xul_LDFLAGS=$(MYLDFLAGS)
-
-demo_sprite_SOURCES=demo_sprite.c
-demo_sprite_LDFLAGS=$(MYLDFLAGS)
-
-demo_scroll_bar_SOURCES=demo_scroll_bar.c
-demo_scroll_bar_LDFLAGS=$(MYLDFLAGS)
-
-demo_wait_box_SOURCES=demo_wait_box.c
-demo_wait_box_LDFLAGS=$(MYLDFLAGS)
-
-demo_check_button_SOURCES=demo_check_button.c
-demo_check_button_LDFLAGS=$(MYLDFLAGS)
-
-demo_progress_bar_SOURCES=demo_progress_bar.c
-demo_progress_bar_LDFLAGS=$(MYLDFLAGS)
-
-demo_expand_SOURCES=demo_expand.c
-demo_expand_LDFLAGS=$(MYLDFLAGS)
-
-demo_label_SOURCES=demo_label.c
-demo_label_LDFLAGS=$(MYLDFLAGS)
-
-demo_button_SOURCES=demo_button.c
-demo_button_LDFLAGS=$(MYLDFLAGS)
-
-demo_image_SOURCES=demo_image.c
-demo_image_LDFLAGS=$(MYLDFLAGS)
-
-demo_image_button_SOURCES=demo_image_button.c
-demo_image_button_LDFLAGS=$(MYLDFLAGS)
-
-demo_dialog_SOURCES=demo_dialog.c
-demo_dialog_LDFLAGS=$(MYLDFLAGS)
-
-demo_multi_win_SOURCES=demo_multi_win.c
-demo_multi_win_LDFLAGS=$(MYLDFLAGS)
-
-demo_menu_SOURCES=demo_menu.c
-demo_menu_LDFLAGS=$(MYLDFLAGS)
-
-demo_entry_SOURCES=demo_entry.c
-demo_entry_LDFLAGS=$(MYLDFLAGS)
-
-desktopdir=$(datadir)/ftk/base/apps
-desktop_DATA=demos.desktop
-
-iconsdir=$(datadir)/ftk/demos/icons
-icons_DATA=demo.png
-
-EXTRA_DIST=demo.png test_util.c t1.xul t2.xul t3.xul t4.xul t5.xul t6.xul t7.xul demos.desktop \
- ftk_app_demo.h
-
diff --git a/examples/module/ftk_demo/SConscript b/examples/module/ftk_demo/SConscript
new file mode 100644
index 0000000000..e192e33916
--- /dev/null
+++ b/examples/module/ftk_demo/SConscript
@@ -0,0 +1,49 @@
+import os
+
+Import('env')
+Import('RTT_ROOT')
+Import('rtconfig')
+Import('TARGET')
+
+RTMLINKER = RTT_ROOT + '/tools/rtmlinker.exe '
+
+# group definitions
+CPATH = [RTT_ROOT + '/include',
+ RTT_ROOT + '/examples/module',
+ RTT_ROOT + '/components/external/ftk/ftk/apps/common',
+ RTT_ROOT + '/components/external/ftk/ftk/src/os/rt-thread',
+ RTT_ROOT + '/components/external/ftk/ftk/src',
+ RTT_ROOT + '/components/dfs',
+ RTT_ROOT + '/components/dfs/include',
+ RTT_ROOT + '/components/libc/newlib']
+
+src = Glob('*.c')
+
+def GenerateDesktopApp(name):
+ xml = '\n\n\n' % (name, name, name)
+
+ f = file(name + '.desktop', 'wb')
+ f.write(xml)
+ f.close
+
+def Demo(env, name):
+ if name == 'ftk_app_demo':
+ return
+
+ target = name + '.so'
+ module_env = env.Clone(CCFLAGS = ' -DRT_THREAD -DFTK_AS_PLUGIN -mcpu=arm920t -O0 -fPIC')
+ module_env.Append(CPPPATH = CPATH)
+ module_env.Replace(LINKFLAGS = ('-z max-page-size=0x4 -shared -fPIC -e ftk_app_%s_create -nostdlib' % name))
+ module_env.Program(name + '.so', [name + '.c', 'ftk_app_demo.o'])
+ POST_ACTION = RTMLINKER + ' -l ' + TARGET + (' -o %s.mo ' % name) + ('ftk_demo/%s.so' % name)
+ module_env.AddPostAction(target, POST_ACTION)
+ module_env.Clean(target, name + '.desktop')
+ GenerateDesktopApp(name)
+
+demo_env = env.Clone(CCFLAGS = ' -DRT_THREAD -DFTK_AS_PLUGIN -mcpu=arm920t -O0 -fPIC')
+demo_env.Append(CPPPATH = CPATH)
+demo_env.Object('ftk_app_demo.c')
+
+for item in src:
+ item = item.rstr()
+ Demo(env, item.split('.c')[0])
diff --git a/examples/module/ftk_demo/demo_bidi.c b/examples/module/ftk_demo/demo_bidi.c
index 319701b16c..f6d0444db1 100644
--- a/examples/module/ftk_demo/demo_bidi.c
+++ b/examples/module/ftk_demo/demo_bidi.c
@@ -28,6 +28,17 @@ static Ret timeout(void* ctx)
}
}
+#ifdef FTK_AS_PLUGIN
+#include "ftk_app_demo.h"
+FTK_HIDE int FTK_MAIN(int argc, char* argv[]);
+FtkApp* ftk_app_demo_bidi_create()
+{
+ return ftk_app_demo_create(_("bidi"), ftk_main);
+}
+#else
+#define FTK_HIDE extern
+#endif /*FTK_AS_PLUGIN*/
+
FTK_HIDE int FTK_MAIN(int argc, char* argv[])
{
int width = 0;
diff --git a/examples/module/ftk_demo/demo_cairo.c b/examples/module/ftk_demo/demo_cairo.c
index 18230a929a..aa1aa6fa24 100644
--- a/examples/module/ftk_demo/demo_cairo.c
+++ b/examples/module/ftk_demo/demo_cairo.c
@@ -1,4 +1,5 @@
#include
+#ifdef ENABLE_CAIRO
#include "ftk_cairo.h"
static cairo_t* cr = NULL;
@@ -371,3 +372,4 @@ FTK_HIDE int FTK_MAIN(int argc, char* argv[])
return 0;
}
+#endif
diff --git a/examples/module/ftk_demo/test_util.c b/examples/module/ftk_demo/test_util.c
deleted file mode 100644
index 860296675b..0000000000
--- a/examples/module/ftk_demo/test_util.c
+++ /dev/null
@@ -1,21 +0,0 @@
-#include
-
-char* read_file(const char* file_name, int* length)
-{
- struct stat st = {0};
- if(stat(file_name, &st))
- {
- return NULL;
- }
- else
- {
- char* buffer = malloc(st.st_size + 1);
- FILE* fp = fopen(file_name, "rb");
- fread(buffer, 1, st.st_size, fp);
- fclose(fp);
- buffer[st.st_size] = '\0';
- *length = st.st_size;
-
- return buffer;
- }
-}