Ruby for Windows Mobile (Win CE, CeGCC)

Hi,
I’m spent countless time in searching working ruby port on Windows
Mobile. I’m not a fan of this OS, but already have device with it and
still want to try programming in ruby on it. Google kicked me to:

  1. Howto compile and binaries ruby 1.8.x with Microsoft Visual Embedded
    C++ ( http://uema2.s8.xrea.com/ruby-mswince/ ). This works fine, but
    first of all it has Windows Mobile restriction on relative paths (ex.
    requiring 'lib/some.rb" - fails) and in addition it is 1.8 - not 1.9.
    There is no chance to use it as full value port, especially with
    rubygems.

  2. Success story of compiling ruby 1.8 with CeGCC cross compile
    toolchain ( http://cegcc.sourceforge.net/ ). Here is the topic of John
    Snowdon aka smed: http://www.ruby-forum.com/topic/143475 . He
    successfully compiled ruby 1.8 even with rubygems (!). But for my sorry
    I can’t reproduce his success and his blog with binaries is down too (
    http://www.target-earth.net/gadgets/code/rubyce.html ). In addition it
    is 1.8 branch and it will be more likely to use 1.9.x :stuck_out_tongue:

So, i’m trying to compile ruby 1.9.1 p429 with CeGCC 0.59.1 under
Ubuntu 10.04. First trouble that I get - is that confuigure script can’t
verify setpgrp() while cross-compiling. I solve it by adding
“ac_cv_func_setpgrp_void=yes” to args. Next trouble was that configure
script cannot detect pthread_kill function in any header, so it suggest
not to use native threads, but in 1.9.x native threads - are mandatory.
Some search kick me to mail list with howto compile pthreads-win32 (
http://sourceware.org/ml/pthreads-win32/ ) with mingw32ce (mingw32 part
of cegcc). I reproduced his success and now i have .dll, .a and headers.
First my question is - can I it ( library compiled with mingw32ce) in
compiling with cegcc? I’m novice in cross compiling and it would be
greate if someone can hint how do I use it in compilng: some extra
environment variable, makefile edits or maybe i can add some args to
configure script? I think i choose dirty incorrect way, trying to hack
makefile and sources in order to bypass errors. I added
“-I/path/to/pthreads” to optflags variable in Makefile. I’m compiling
with this environment:
ruby sources is in: /var/tmp/ruby-1.9.1-p429
pthreads-win32 sources, library file(.a) and its dll in:
/var/tmp/pthreads-w32-2-8-0-release
cegcc is in: /opt/cegcc
mingw32ce is in: /opt/mingw32ce

this is my PATH env variable:
/opt/mingw32ce/bin:/opt/cegcc/bin:/opt/cegcc/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/android-sdk-linux_86/tools

and this is line with which i’m compiling:
CC=arm-cegcc-gcc CPP=arm-cegcc-cpp AR=arm-cegcc-ar AS=arm-cegcc-as
OBJCOPY=arm-cegcc-objcopy OBJDUMP=arm-cegcc-objdump
RANLIB=arm-cegcc-ranlib LIBS="-I/var/tmp/pthreads-w32-2-8-0-release
-I/opt/cegcc/include -I/opt/cegcc/arm-cegcc/include"
LDFLAGS="-L/var/tmp/pthreads-w32-2-8-0-release -L/opt/cegcc/lib
-L/opt/cegcc/arm-cegcc/lib" ./configure --host=arm-wince
–prefix=/WinCE/built --enable-shared ac_cv_func_setpgrp_void=yes
–enable-pthread=pthread

and this is my output:

[email protected]:/var/tmp/ruby-1.9.1-p429$ make
GNUmakefile:43: target `ruby.rc’ given more than once in the same rule.
include-dir . --include-dir . --include-dir ./win32 ruby.rc ruby.res.o
make: include-dir: Command not found
make: [ruby.res.o] Error 127 (ignored)
arm-cegcc-gcc -O2 -I/var/tmp/pthreads-w32-2-8-0-release -g -Wall
-Wno-parentheses -I. -I.ext/include/arm-wince -I./include -I.
-DRUBY_EXPORT -o io.o -c io.c
io.c: In function ‘rb_io_close_read’:
io.c:3369: warning: implicit declaration of function ‘rb_w32_is_socket’
io.c: In function ‘pipe_open’:
io.c:4643: warning: implicit declaration of function ‘rb_w32_aspawn’
io.c:4643: error: ‘P_NOWAIT’ undeclared (first use in this function)
io.c:4643: error: (Each undeclared identifier is reported only once
io.c:4643: error: for each function it appears in.)
io.c:4644: warning: implicit declaration of function ‘rb_w32_spawn’
io.c: In function ‘io_cntl’:
io.c:6709: warning: implicit declaration of function ‘ioctl’
io.c: In function ‘maygvl_copy_stream_wait_read’:
io.c:7351: warning: implicit declaration of function ‘select’
make: *** [io.o] Error 1

can anybody kick me to right way on solving this? I couldn’t understand
why ruby uses some w32 function when i’m compiling with posix
compilant toolchain…

P.S. Sorry for my bad english - my native language is russian.

Maxim Sokolovsky wrote:

Hi,
I’m spent countless time in searching working ruby port on Windows
Mobile. I’m not a fan of this OS, but already have device with it and
still want to try programming in ruby on it. Google kicked me to:

  1. Howto compile and binaries ruby 1.8.x with Microsoft Visual Embedded
    C++ ( http://uema2.s8.xrea.com/ruby-mswince/ ). This works fine, but
    first of all it has Windows Mobile restriction on relative paths (ex.
    requiring 'lib/some.rb" - fails) and in addition it is 1.8 - not 1.9.
    There is no chance to use it as full value port, especially with
    rubygems.

  2. Success story of compiling ruby 1.8 with CeGCC cross compile
    toolchain ( http://cegcc.sourceforge.net/ ). Here is the topic of John
    Snowdon aka smed: http://www.ruby-forum.com/topic/143475 . He
    successfully compiled ruby 1.8 even with rubygems (!). But for my sorry
    I can’t reproduce his success and his blog with binaries is down too (
    http://www.target-earth.net/gadgets/code/rubyce.html ). In addition it
    is 1.8 branch and it will be more likely to use 1.9.x :stuck_out_tongue:

So, i’m trying to compile ruby 1.9.1 p429 with CeGCC 0.59.1 under
Ubuntu 10.04. First trouble that I get - is that confuigure script can’t
verify setpgrp() while cross-compiling. I solve it by adding
“ac_cv_func_setpgrp_void=yes” to args. Next trouble was that configure
script cannot detect pthread_kill function in any header, so it suggest
not to use native threads, but in 1.9.x native threads - are mandatory.
Some search kick me to mail list with howto compile pthreads-win32 (
http://sourceware.org/ml/pthreads-win32/ ) with mingw32ce (mingw32 part
of cegcc). I reproduced his success and now i have .dll, .a and headers.
First my question is - can I it ( library compiled with mingw32ce) in
compiling with cegcc? I’m novice in cross compiling and it would be
greate if someone can hint how do I use it in compilng: some extra
environment variable, makefile edits or maybe i can add some args to
configure script? I think i choose dirty incorrect way, trying to hack
makefile and sources in order to bypass errors. I added

If it’s a dll it “should” work.

io.c:3369: warning: implicit declaration of function ‘rb_w32_is_socket’

I think this means that somehow compilation doesn’t realize you are on
windows.
The rubyinstaller list might be helpful, as well.
http://rubyinstaller.org/

I think I remember wince being removed recently from 1.9 branch (no
maintainer, little interest), so grabbing a build before that might
work better. But I don’t remember exactly.

Roger P. wrote:

If it’s a dll it “should” work.

How do I add it in a right way? When I add it to LDFLAGS and LIBS env
variables it doesn’t apear in compiling… So it runs like:
arm-cegcc-gcc -O2 -g -Wall -Wno-parentheses -I.
-I.ext/include/arm-wince -I./include -I. -DRUBY_EXPORT -o io.o -c io.c
I fix it dirty by adding “-I/path/to/pthreads” into Makefile in a line,
where -O2 parameter added… How this could be done in right manner?

I think this means that somehow compilation doesn’t realize you are on
windows.

I’m on Ubuntu linux if you mean my OS. And as far as i know configure
script should think i compile it for linux, cause cegcc emulates POSIX
API and is designed to cross-compile linux apps to windows mobile. So i
couldn’t understand why it tries some w32 functions…

The rubyinstaller list might be helpful, as well.
http://rubyinstaller.org/

I’ll post my message there if I wouldn’t get answers here, but… they
use MinGW32 environment to compile ruby for Win32… This isn’t near my
goal I think, isn’t it?

I think I remember wince being removed recently from 1.9 branch (no
maintainer, little interest), so grabbing a build before that might
work better. But I don’t remember exactly.

It’s true. Sorry I forgot to say that I already tries to compile latest
ruby 1.9.x branch without removed WinCE scripts (it’s 1.9.0.5,
http://github.com/ruby/ruby/tree/v1_9_0_5). First of all it seems that
WinCE folder there is unchanged since 1.8.x branch and it doesn’t
compiles. In addition it uses Microsoft Embedded Visual C++ compiler to
build. And at http://uema2.s8.xrea.com/ruby-mswince is 1.8.x branch
compiled with official support.

Maxim Sokolovsky wrote:

Roger P. wrote:

If it’s a dll it “should” work.

How do I add it in a right way? When I add it to LDFLAGS and LIBS env
variables it doesn’t apear in compiling… So it runs like:
arm-cegcc-gcc -O2 -g -Wall -Wno-parentheses -I.
-I.ext/include/arm-wince -I./include -I. -DRUBY_EXPORT -o io.o -c io.c
I fix it dirty by adding “-I/path/to/pthreads” into Makefile in a line,
where -O2 parameter added… How this could be done in right manner?

is there an --enable-pthreads option? I know 1.9.2 used to try to use
pthreads on windows but then we complained so it was disallowed…

I think this means that somehow compilation doesn’t realize you are on
windows.

I’m on Ubuntu linux if you mean my OS. And as far as i know configure
script should think i compile it for linux, cause cegcc emulates POSIX
API and is designed to cross-compile linux apps to windows mobile. So i
couldn’t understand why it tries some w32 functions…

Something isn’t detecting right, or it would never even try to build
win32.c, I imagine.

The rubyinstaller list might be helpful, as well.
http://rubyinstaller.org/

I’ll post my message there if I wouldn’t get answers here, but… they
use MinGW32 environment to compile ruby for Win32… This isn’t near my
goal I think, isn’t it?

Yeah but they may have some expertise.
Unfortunately I don’t really :slight_smile:
-r

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs