release
dev builds
extras
themes manual
wiki
device status forums
mailing lists
IRC bugs
patches
dev guide



Search | Go
Wiki > Main > UiSimulator > UiSimulatorWindows (r1)
Here you can find detailed explanation of problems arising when building UIsimulator using MinGW and gcc under MS Windows and how to solve these problems.

There are several difficulties when using MinGW:
  • perl's fork doesn't work properly here thus making load balancing between CPU cores impossible (thanks to Zagor for explanation)
  • command line length is limited thus breaking dependency generation
  • default perl (I have v5.10.0) doesn't correctly treat '-s' option thus breaking genlang tool
  • svnversion tool may not be available in your setup

Therefore few things should be done manually. We should disable multigcc.pl tool, and use response file to save on command line length.

Index: tools/functions.make
===================================================================
--- tools/functions.make   (revision 29245)
+++ tools/functions.make   (working copy)
@@ -31,7 +31,7 @@
 c2obj = $(addsuffix .o,$(basename $(subst $(ROOTDIR),$(BUILDDIR),$(1))))
 
 # calculate dependencies for a list of source files $(2) and output them to $(1)
-mkdepfile = $(SILENT)perl $(TOOLSDIR)/multigcc.pl $(CC) $(PPCFLAGS) $(OTHER_INC) -MG -MM -include config.h -- $(2) | \
+mkdepfile = $(SILENT)echo $(PPCFLAGS) $(OTHER_INC) -MG -MM -include config.h > rsp && $(SILENT)$(CC) @rsp $(2) | \
    sed -e "s: lang.h: lang/lang.h:" \
    -e 's:_asmdefs.o:_asmdefs.h:' \
    -e "s: max_language_size.h: lang/max_language_size.h:" | \

To overcome difficulties with genlang tool, I suggest to give a try to another perl installation that supposedly will handle '-s' option correctly. I have strawberry perl installed and I added this c:/strawberry/perl /perl into my /etc/fstab

Index: apps/lang/lang.make
===================================================================
--- apps/lang/lang.make   (revision 29245)
+++ apps/lang/lang.make   (working copy)
@@ -29,7 +29,7 @@
 
 $(BUILDDIR)/lang/lang_core.o: $(APPSDIR)/lang/$(LANGUAGE).lang $(BUILDDIR)/apps/features
    $(SILENT)for f in `cat $(BUILDDIR)/apps/features`; do feat="$$feat:$$f" ; done; \
-      perl -s $(TOOLSDIR)/genlang -p=$(BUILDDIR)/lang -t=$(MODELNAME)$$feat $<
+      /perl/bin/perl -s $(TOOLSDIR)/genlang -p=$(BUILDDIR)/lang -t=$(MODELNAME)$$feat $<
    $(call PRINTS,CC lang_core.c)$(CC) $(CFLAGS) -c $(BUILDDIR)/lang/lang_core.c -o $@
 
 $(BUILDDIR)/lang/lang.h: $(BUILDDIR)/lang/lang_core.o
@@ -37,4 +37,4 @@
 $(BUILDDIR)/%.lng : $(ROOTDIR)/%.lang $(BUILDDIR)/apps/genlang-features
    $(call PRINTS,GENLANG $(subst $(ROOTDIR)/,,$<))
    $(SILENT)mkdir -p $(dir $@)
-   $(SILENT)$(TOOLSDIR)/genlang -e=$(APPSDIR)/lang/english.lang -t=$(MODELNAME):`cat $(BUILDDIR)/apps/genlang-features` -i=$(TARGET_ID) -b=$@ $<
+   $(SILENT)/perl/bin/perl -s $(TOOLSDIR)/genlang -e=$(APPSDIR)/lang/english.lang -t=$(MODELNAME):`cat $(BUILDDIR)/apps/genlang-features` -i=$(TARGET_ID) -b=$@ $<

Fix this artifact as well

Index: apps/apps.make
===================================================================
--- apps/apps.make   (revision 29245)
+++ apps/apps.make   (working copy)
@@ -27,7 +27,7 @@
    $(call PRINTS,PP $(<F))
    $(SILENT)$(CC) $(PPCFLAGS) \
                  -E -P -imacros "config.h" -imacros "button.h" -x c $< | \
-      grep -v "^\#" | grep -v "^ *$$" > $(BUILDDIR)/apps/features; \
+      grep -v "^\#" | grep -v "^ *$$" > $(BUILDDIR)/apps/features
 
 $(BUILDDIR)/apps/genlang-features:  $(BUILDDIR)/apps/features
    $(call PRINTS,GEN $(subst $(BUILDDIR)/,,$@))tr \\n : < $< > $@

I don't have zip available on $PATH, but I'd like to have all the stuff available at hand to copy on simdisk/.rockbox

Index: tools/buildzip.pl
===================================================================
--- tools/buildzip.pl   (revision 29245)
+++ tools/buildzip.pl   (working copy)
@@ -723,7 +723,7 @@
         }
         system("$ziptool $output $rbdir $target >/dev/null");
         print "$ziptool $output $rbdir $target >/dev/null\n" if $verbose;
-        rmtree("$rbdir");
+        #rmtree("$rbdir");
         print "rm $rbdir\n" if $verbose;
     }
 };

If you don't have svnversion script, create version.h file in your build directory with the following content
extern const char rbversion[];
#define RBVERSION "sim"

For some reason few files are not generated automatically. Therefore here is the sequence I used
../tools/configure
make $PWD/lang/lang.h
make $PWD/bitmaps/rockboxlogo.h
make $PWD/sysfont.h
make $PWD/lang/max_language_size.h
make $PWD/credits.raw
make
make zip

Now copy your rockbox folder into simdisk/.rockbox, and you are good to go.

-- MikhailTitov? - 09 Feb 2011
Edit | Attach | Print version | History: r3 < r2 < r1 | Backlinks | View wiki text | More topic actions...
r1 - 09 Feb 2011 - 22:13:54 - MikhailTitov?

Parents: UiSimulator
Copyright by the contributing authors.