Strip down CEGUI for embedded device
Moderators: CEGUI MVP, CEGUI Team
Strip down CEGUI for embedded device
Hello everyone!
I found out CEGUI just recently while I was looking for gui system to be used on very low resource embedded hardware.
I'm going to use Lua as scripting language, and I'm going to write my own renderer (at least partially but probably all).
My biggest problem is the CEGUI's base lib. It's to large. So my first question is: is it possible to reduce it's memory footprint below (or about) 300kB?
I don't need most of widgets and I don't need animations. I also don't need mouse, so i commented out all code that uses mouse (actually, I used #ifdef for that). It was partialy successful.
Currently, I'm stuck trying to use uSTL instead of STL. Since it's my first time to work with CMake, I'm not really sure what code and files I should use, and where should I place them to make it work. Can you help about that?
Can you give me some more advices and hints, please?
Thank you.
I found out CEGUI just recently while I was looking for gui system to be used on very low resource embedded hardware.
I'm going to use Lua as scripting language, and I'm going to write my own renderer (at least partially but probably all).
My biggest problem is the CEGUI's base lib. It's to large. So my first question is: is it possible to reduce it's memory footprint below (or about) 300kB?
I don't need most of widgets and I don't need animations. I also don't need mouse, so i commented out all code that uses mouse (actually, I used #ifdef for that). It was partialy successful.
Currently, I'm stuck trying to use uSTL instead of STL. Since it's my first time to work with CMake, I'm not really sure what code and files I should use, and where should I place them to make it work. Can you help about that?
Can you give me some more advices and hints, please?
Thank you.
Re: Strip down CEGUI for embedded device
I am not sure what uSTL is, so I am not sure what CMAKE has to do with it. It sounds like a Search-And-Replace that needs to be done on the final project generated by CMake.
Regarding low-memory footprint: You want to use Lua. Are you aware that this will create a lot of extra memory needs? The bindings etc will need quite some space.
You are free to use whatever plugins you want, I think the default-parser (expat) isnt the smallest, you could create your own parser or use either tinyxml or rapidxml, i think rapidxml is the smallest.
That is all I have for now.
300Kb is really small, tell us how it is going for you.
Regarding low-memory footprint: You want to use Lua. Are you aware that this will create a lot of extra memory needs? The bindings etc will need quite some space.
You are free to use whatever plugins you want, I think the default-parser (expat) isnt the smallest, you could create your own parser or use either tinyxml or rapidxml, i think rapidxml is the smallest.
That is all I have for now.
300Kb is really small, tell us how it is going for you.
CrazyEddie: "I don't like GUIs"
Re: Strip down CEGUI for embedded device
I'm sorry, I couldn't replay earlier. For the same reason I didn't make any progress. I'll inform you about my success (or failure), of course.
Can you just tell me your opinio, do you think that CEGUIBase lib could be stripped down to 300kB? Do you think that is even possible?
Thank you.
Can you just tell me your opinio, do you think that CEGUIBase lib could be stripped down to 300kB? Do you think that is even possible?
Thank you.
Re: Strip down CEGUI for embedded device
uSTL is actaually micro-STL, made for this situations. It has potentail to make huge difference. But I don't know how to tell CMake to use it. I did a lot of code replacement, but I need to tell CMake (so it can tell compiler) where is this library.
Re: Strip down CEGUI for embedded device
komarx6 wrote:I'm sorry, I couldn't replay earlier. For the same reason I didn't make any progress. I'll inform you about my success (or failure), of course.
Can you just tell me your opinio, do you think that CEGUIBase lib could be stripped down to 300kB? Do you think that is even possible?
Thank you.
I am pretty sure it is possible. The biggest chunk is CEGUIBase, which has 2.2 MB on Release on my PC and I did not optimise any of the options.
Regarding replacing STL, I m sure it is possible but no idea how, never tried.
CrazyEddie: "I don't like GUIs"
Re: Strip down CEGUI for embedded device
OK, thank you.
I'll inform you as I sad. I'll probably also post source code somewhere.
I'll inform you as I sad. I'll probably also post source code somewhere.
Re: Strip down CEGUI for embedded device
I'm still struggling with it.
Can you tell me how to build Silly Image codec only with libpng? I don't need jpeg and others.
Thank you.
Can you tell me how to build Silly Image codec only with libpng? I don't need jpeg and others.
Thank you.
Re: Strip down CEGUI for embedded device
I don't know. I assume Paul would know but he is on hiatus. You could probably do it manually by opening the solution for silly and removing the .lib files and headers of the image libraries that you do not want to use (jpg etc). Then you could build again and by using the build errors you would get all code locations that contain now undefined references that need to be deleted. Then you could remove the associated code. Might work.
CrazyEddie: "I don't like GUIs"
Re: Strip down CEGUI for embedded device
I really don't have to much time to spend on this project, but I'm not giving up yet.
Can you help me with including uSTL in project (or maybe you know some one who can)?
I have never used CMake before, so I decided to learn a bit of CMake and try to make CMakeLists.txt file for small project that uses uSTL.
This is how that file looks like:
And this is cpp file:
And it works.
But I don't know how to make that with CEGUI.
CEGUI CMake files are to complex, and I don't really have experience.
My plan is to Search&Replace all "std::" string in CEGUI and replace them with "ustl::", and in CEGUI's Base.h file to add line "#include "ustl.h" ".
But I don't know how to do it. I did try something but that didn't made any sense.
I think that this wouldn't be problem for someone how understands CEGUI's CMake files, it should be 5 minute job.
Can you help?
Can you help me with including uSTL in project (or maybe you know some one who can)?
I have never used CMake before, so I decided to learn a bit of CMake and try to make CMakeLists.txt file for small project that uses uSTL.
This is how that file looks like:
Code: Select all
cmake_minimum_required (VERSION 2.6)
project (test1)
include_directories(${CMAKE_SOURCE_DIR}/deps/ustl/include)
add_executable(test1 ${CMAKE_SOURCE_DIR}/main.cpp)
find_library(USTL_LIB ustl ${CMAKE_SOURCE_DIR}/deps/ustl/lib)
target_link_libraries(test1 ${USTL_LIB})
And this is cpp file:
Code: Select all
#include "ustl.h"
using namespace ustl;
int main(){
vector<int> vec;
for(int i = 1; i < 4; vec.push_back(i), i++);
for(int i = 0; i < 3; i++){
cout << vec[i];
}
}
And it works.
But I don't know how to make that with CEGUI.
CEGUI CMake files are to complex, and I don't really have experience.
My plan is to Search&Replace all "std::" string in CEGUI and replace them with "ustl::", and in CEGUI's Base.h file to add line "#include "ustl.h" ".
But I don't know how to do it. I did try something but that didn't made any sense.
I think that this wouldn't be problem for someone how understands CEGUI's CMake files, it should be 5 minute job.
Can you help?
Re: Strip down CEGUI for embedded device
If I understand you correctly, you want to scan all header and source files and replace the std includes? and std types? I am not sure if or how CMake can do that.
I suggest you to ask in the CMake IRC channel, I had good experiences there in the past. Just give em some time to answer. Also check their forums. Or maybe someone else in the forum knows how to do this with CMake
I suggest you to ask in the CMake IRC channel, I had good experiences there in the past. Just give em some time to answer. Also check their forums. Or maybe someone else in the forum knows how to do this with CMake
CrazyEddie: "I don't like GUIs"
Re: Strip down CEGUI for embedded device
No, I all have all ready done that. I need to put CMake instructions that I posted in CEGUI's CMakeLists.txt or other appropriate file so that compiler knows where to find uSTL include files and linker where to find uSTL library. But CEGUI's CMake is so complex and I don't understand so I don't know who to do that.
Making compiler know where to find include files is easier, but I can't do that either.
Thank you for your help any way.
Making compiler know where to find include files is easier, but I can't do that either.
Thank you for your help any way.
Re: Strip down CEGUI for embedded device
Modules are usually added like this:
You have to call this in around or before the other calls similar to this one
Obviously you will have to adapt the "TINYXML" to something else. e.g. USTL.
Before that you will have to set (using the CMake set-command) variables for USTL. These are:
If you need any COMPILE_DEFINITIONS (see CMake docu)
and
The first points to the path including your headers, the second points to the release lib (dynamic) and the last to the debug lib (dynamic)
If you want another name replace USTL with something else.
If you want to statically link then tell me.
Other than that I think this should work, please try it out.
Code: Select all
cegui_add_dependency(${CEGUI_TARGET_NAME} TINYXML)
You have to call this in
Code: Select all
CEGUI\cegui\src\CMakeLists.txt
Obviously you will have to adapt the "TINYXML" to something else. e.g. USTL.
Before that you will have to set (using the CMake set-command) variables for USTL. These are:
Code: Select all
USTL_DEFINITIONS and USTL_DEFINITIONS_DYNAMIC
and
Code: Select all
USTL_H_PATH USTL_LIB USTL_LIB_DBG
If you want another name replace USTL with something else.
If you want to statically link then tell me.
Other than that I think this should work, please try it out.
CrazyEddie: "I don't like GUIs"
Re: Strip down CEGUI for embedded device
Thank you so much, I'm going to try it right away.
I'm definitely going to need static linking.
But priority is to make it work any way.
I'm definitely going to need static linking.
But priority is to make it work any way.
Re: Strip down CEGUI for embedded device
I advise against static building but if you wanna use it you will need to change then UTIL_Static needs to be defiend somehow. Didn't look into it yet.
CrazyEddie: "I don't like GUIs"
Re: Strip down CEGUI for embedded device
I failed, I think I'm missing something here.
But can I make it simple. What is simplest method to add "-I/path/to/ustl/include" as comiler option when compiling any file in CEGUI hierarchy, and -L... for linking stage and /path/to/ustllib?
I'm sorry, I feel like I'm boring you. If that's the case just tell me.
Maybe somebody else could help.
I'm already really thankful.
But can I make it simple. What is simplest method to add "-I/path/to/ustl/include" as comiler option when compiling any file in CEGUI hierarchy, and -L... for linking stage and /path/to/ustllib?
I'm sorry, I feel like I'm boring you. If that's the case just tell me.
Maybe somebody else could help.
I'm already really thankful.
Return to “Modifications / Integrations / Customisations”
Who is online
Users browsing this forum: No registered users and 3 guests