Topic: сборка для WinCE (WinMobile)

собственно как только я увидел этот движок возникла мысль почему ее нет для этой платформы.
имею опыт, собираю обычно на mingw32ce, уже есть накопленный туллчайн с многими либами.
по быстрому накидал rules.make, сборка идет нормально, не хватает некоторых функций, сильно в код instead не смотрел.

----
Текущая сборка:

http://instead.syscall.ru/download/instead-1.2.2-ce.zip

Re: сборка для WinCE (WinMobile)

Сборка под wince это было бы амечательно!

Я собирал инстед cegcc но у меня даже helloworld вешал машинку. У меня самого нет девайса на wince и эксперименты я прекратил.

chdir нужно реализоваить через win api. Если нужно -- я могу посмотреть как это можно сделать.  Он нужен для того, что бы возвращаться в запомненный ранее путь.

iconv есть -- но он как я понял есть только тогда когда iconv в системе был при сборке SDL, но вообще может и правда было бы идеологически вернее... Но мне очень не хочется пересобирать win SDL, а в нем iconv кажется нет.

Re: сборка для WinCE (WinMobile)

Гм.. А может в wince НЕТ chdir и все пути должны быть абсолютными? В принципе тоже решаемо...

P.S. Похоже что так и есть... Жесть. Надо думать как полностью избавиться от понятия текущего каталога. Но я пока не понимаю... Ведь игра (lua код) должен быть с cwd каталога игры а не инстеда, например.

Re: сборка для WinCE (WinMobile)

SandySandy, если вы портируете instead под WinMobile (у меня девайс с 6.1) - я вам поставлю памятник!!! smile Моральный! smile И не только я! Я ведь тогда смогу запускать свой любимый Escape The Toilet прям на девайсе у себя!!!! Это же будет жутко замечательно! smile
Вы - носитель ценнейших знаний! Мы с Петером даже не смогли терминал в 6.1 запустить, не говоря уж о Хелло, Ворлд. Адская система. smile И мы в ней ламмеры. smile

Re: сборка для WinCE (WinMobile)

vpodobaev wrote:

Мы с Петером даже не смогли терминал в 6.1 запустить, не говоря уж о Хелло, Ворлд.

Угу. А программа helloworld, присланная Петром (которую вы с ним накодили, я так понимаю), намертво вешала мой старенький iPAQ HP2210...

6 (edited by SandySandy 2010-08-11 03:58:40)

Re: сборка для WinCE (WinMobile)

vpodobaev wrote:

SandySandy, если вы портируете instead под WinMobile (у меня девайс с 6.1) - я вам поставлю памятник!!! smile Моральный! smile И не только я! Я ведь тогда смогу запускать свой любимый Escape The Toilet прям на девайсе у себя!!!! Это же будет жутко замечательно! smile
Вы - носитель ценнейших знаний! Мы с Петером даже не смогли терминал в 6.1 запустить, не говоря уж о Хелло, Ворлд. Адская система. smile И мы в ней ламмеры. smile

там нечего портировать, тулчайн у меня готовый уже, накопленный со временем, собираю им многие проекты на SDL. Я переделывал SDL-1.2, драйвера для wince, работает отлично с поворотами и маштабированием с QVGA, VGA, WVGA и подобными экранами. Похвалюсь, что эти изменения уже официально добавили в SDL-1.3.

А может в wince НЕТ chdir и все пути должны быть абсолютными? В принципе тоже решаемо...

P.S. Похоже что так и есть... Жесть. Надо думать как полностью избавиться от понятия текущего каталога. Но я пока не понимаю... Ведь игра (lua код) должен быть с cwd каталога игры а не инстеда, например.

Да так и есть, для winmobile обычно я доступ к данным получаю по абсолютному пути, и вычисляю его как dirname где запускается программа + папки служебные + имена файлов.

7 (edited by SandySandy 2010-08-11 04:04:32)

Re: сборка для WinCE (WinMobile)

Peter wrote:

iconv есть -- но он как я понял есть только тогда когда iconv в системе был при сборке SDL, но вообще может и правда было бы идеологически вернее... Но мне очень не хочется пересобирать win SDL, а в нем iconv кажется нет.

У меня под WinCE тоже есть собранный iconv, но проблема заключается в том что: для WinСE я собираю один статический бинарник, так как там иначе придется регистрировать кучу сторонних либ, что для пользователя проблематично. И сам iconv по размеру большой, при статической сборке размер бинарника получался также большим, и самый глюк - бинарник при размере больше 4Мб на PDA не работает (м.б. это ошибка сборки mingw32ce).

Ваш проект собирается без системного iconv очень просто, я добавил sdl_iconv.h:


#ifndef _SDL_ICONV_H
#define _SDL_ICONV_H

#ifdef _HAVE_ICONV

#ifdef _USE_SDL_ICONV

#include <SDL_stdinc.h>
#define iconv SDL_iconv
#define iconv_t SDL_iconv_t
#define iconv_open SDL_iconv_open
#define iconv_close SDL_iconv_close

#else

#include <iconv.h>

#endif /* _USE_SDL_ICONV */

#endif /* _HAVE_ICONV */

#endif /* _SDL_ICONV_H */

И все <iconv.h> заменил на "sdl_iconv.h"
Заюзать флаг _USE_SDL_ICONV, в итоге получится что если SDL собран с iconv он его и заюзает иначе будет свой использовать.

Re: сборка для WinCE (WinMobile)

Peter wrote:

Надо думать как полностью избавиться от понятия текущего каталога. Но я пока не понимаю... Ведь игра (lua код) должен быть с cwd каталога игры а не инстеда, например.

у меня есть собранный lua51.exe могу проверить тесты если объясните что запускать

Re: сборка для WinCE (WinMobile)

Насчет iconv, тогда добавлю в svn.(добавил -- выбор основан на HAVE_ICONV в SDL_config + ./configue.sh изменил немного)

Насчет chdir. Мне сначала нужно хотя бы понять.
То-есть ВСЕ пути в wince ДОЛЖНЫ быть абсолютными?
Я пока не совсем это понимаю. Например, есть main.lua и из него
делается dofile "2.lua"

Получается, это уже не будет работать?

Или все-таки поянтие текущего каталога есть? Например, взять текущий каталог и на его основе сформировать полный путь?

dirname где запускается программа это что? getcwd в newlib cegcc какой-то кошмарный, но, наверное все-таки работает?

Наверное, это все можно решить прослойкой -- но придется повозиться.

Пока я это вижу так: chdir будет виртуально менять каталог, а функции открытия будут использовать строку "текущий каталог" для формирования полного пути.  Что касается sdl функций (музыка, графика, шрифты итд) -- нет проблем, так как пути уже проходят через функцию sdl_path. Что с lua пока не ясно, но если что -- напишу свою версию dofile. а doencfile уже своя. Сейчас мне нужна немного полная информация об этом поведении wince. Потом я попробую закоммитить изменения и сделаем тестовую сборку.

Какой дефайн определяет то, что это сборка под wince?

10 (edited by SandySandy 2010-08-11 11:43:17)

Re: сборка для WinCE (WinMobile)

Peter wrote:

Я пока не совсем это понимаю. Например, есть main.lua и из него
делается dofile "2.lua"

Получается, это уже не будет работать?

с lua не работал незнаю, м.б. возмет от текущего?

Peter wrote:

Или все-таки поянтие текущего каталога есть? Например, взять текущий каталог и на его основе сформировать полный путь?

поддерживаемой функции getcwd нету, но при запуске программы легко эмулируется через путь dirname(argv[0])

dirname - возвращает директорию из компонента пути, ее так же в WINCE нет но я использую:

    static char buff[PATH_MAX];
    strncpy(buff, path, PATH_MAX);
    char *c = strrchr(buff, SEPARATOR);
    if(!c) strcpy(buff, ".");
    else *c = 0;
    return buff;
Peter wrote:

Пока я это вижу так: chdir будет виртуально менять каталог, а функции открытия будут использовать строку "текущий каталог" для формирования полного пути.  Что касается sdl функций (музыка, графика, шрифты итд) -- нет проблем, так как пути уже проходят через функцию sdl_path. Что с lua пока не ясно, но если что -- напишу свою версию dofile. а doencfile уже своя. Сейчас мне нужна немного полная информация об этом поведении wince. Потом я попробую закоммитить изменения и сделаем тестовую сборку.

Какой дефайн определяет то, что это сборка под wince?

я обычно юзаю _WIN32_WCE это и в SDL так же используется.

11 (edited by SandySandy 2010-08-11 11:52:46)

Re: сборка для WinCE (WinMobile)

пока тестовый Rules.mingw32ce


VERSION := 1.2.0

PREFIX=./
DESTDIR=

BIN=$(DESTDIR)$(PREFIX)
STEADPATH=$(DESTDIR)$(PREFIX)stead
THEMESPATH=$(DESTDIR)$(PREFIX)themes
GAMESPATH=$(DESTDIR)$(PREFIX)games
ICONPATH=$(DESTDIR)$(PREFIX)icon
DOCPATH=$(DESTDIR)$(PREFIX)doc
LANGPATH=$(DESTDIR)$(PREFIX)languages
MANPATH=$(DESTDIR)$(PREFIX)doc

ZLIB_CFLAGS=
ZLIB_LFLAGS=

LUA_CFLAGS=
LUA_LFLAGS=

SDL_CFLAGS=
SDL_LFLAGS=

CFLAGS  += -Wall -march=armv4t -Os -static \
        -D_HAVE_ICONV -D_USE_SDL_ICONV -D_USE_UNPACK -D_USE_BROWSE -D_LOCAL_APPDATA -D_SDL_MOD_BUG \
        $(shell sdl-config --cflags) $(shell libpng-config --cflags) $(shell liblua-config --cflags)
LDFLAGS += -Wl,-Bstatic \
        $(shell sdl-config --libs) \
        -lSDL_mixer -lSDL -lmad -lvorbisfile -lvorbis -logg \
        -lSDL_ttf -lintl -lfreetype \
        -lSDL_image -lz $(shell libpng-config --libs) -ljpeg \
        $(shell liblua-config --libs) \
        -lmmtimer

CC=arm-mingw32ce-gcc
AR=arm-mingw32ce-ar rc
RANLIB=arm-mingw32ce-ranlib

RM=rm
EXE=.exe

INSTALLD=install -d -m 0755
INSTALLB=install -m 0755
INSTALL=install -m 0644
PLATFORM=windows.c iowin32.c
RESOURCES=resources.o

resources.o: resources.rc
        arm-mingw32ce-windres -i resources.rc -o resources.o

Re: сборка для WinCE (WinMobile)

еще забыл сказать отсутствует getcwd , нужно будет эмулировать тоже

Re: сборка для WinCE (WinMobile)

Угу, я пока на коленках сделал getdir/setdir, которые меняют виртуальный cwd и dirpath -- возвращающий путь, и у меня запустился tutorial. Надо будет еще dofile сделать и я думаю можно будет коммитить для первого теста. Но займет некоторое время, так-как видимо весь инстед нужно перевести на эти рельсы -- то есть написать аккуратно. Спасибо за make, добавлю его тоже,

Re: сборка для WinCE (WinMobile)

Выкладываю патч, который надо наложить на svn версию. Я тестировал на unix версии и игры запускались, если cwd был /, не работает urq, так как там напрямую i/o из lua, но это сейчас не важно. Просто для теста -- пока не коммичу, так как сделано на скорую руку.

Post's attachments

Attachment icon ce.patch.gz 3.1 kb, 155 downloads since 2010-08-11 

Re: сборка для WinCE (WinMobile)

обновился из svn + пропатчил.
пофиксил пару моментов, собралось, запускается, думаю куда выложить, могу на 4pda.ru

пофиксил что:

putenv в main.c, (putenv getenv отсутсвуют в WinCE, но можно заюзать SDL_* вариант)
sdl_iconv.h без флага _USE_SDL_ICONV не сработал
еще wince.c: app_dir() сделал на возврат game_cwd;
зафорсил параметр если нет параметра -mode на -mode "320x240", т.к. иначе ругается на 800х600

и в PocketPC трудно параметры командной строки вводить, надо продумать в конфиге это м.б.

Re: сборка для WinCE (WinMobile)

еще можно курсор выключать для WinCE, т.к. он лишний, есть вроде подсветка и стилус.

17 (edited by SandySandy 2010-08-12 07:21:20)

Re: сборка для WinCE (WinMobile)

но туториал не запустился, такая ошибка:
"/Storage Card/instead-1.2.0/./stead/stead.lua:2030 interrupt to index a nil value"

причем в этом экране координаты курсора отрабатываются противоположно друг другу

структура каталогов:

doc/
games/
languages/
stead/
themes/
sdl-instead.exe
setup.iss
setup-kit.iss

Re: сборка для WinCE (WinMobile)

Выкладывать еще рано,  совсем рано. smile Это только эксперименты пока.

Re: сборка для WinCE (WinMobile)

в структуру каталогов нужно добавить каталог appdata,
и вернуть app_dir как был.

app_dir должен возвращать cwd/appdata/

Вообще, оно сейчас упало на stead.lua -- это хорошо, скорее всего что то с save ами...

Параметры экрана можно вьить  в заранее подготовленный конфиг --это не проблема. Про инверсию координат -- пока не ясно, думаю рано еще об этом думать -- лишь бы начало работать хоть как.

>> sdl_iconv.h без флага _USE_SDL_ICONV не сработал

Странно, я нигде этот флаг не проверяю и тесты в linux проходят нормально... (configure.sh)

Re: сборка для WinCE (WinMobile)

Еще патч.

Потестил на unix, работает. Запускаю из произвольного места.

-D_WIN32_WCE определен? В прошлом патче код под этим дефайном не компилировался.

P.S. Туториал русский или английский? Попробуй английский -- может быть проблема с загрузкой модулей?

Post's attachments

Attachment icon ce2.patch.gz 3.22 kb, 161 downloads since 2010-08-12 

21 (edited by SandySandy 2010-08-12 11:29:24)

Re: сборка для WinCE (WinMobile)

с вторым патчем та же самая ошибка, выбор туториала не играет роли

-D_WIN32_WCE определен, app_dir поправил.

22 (edited by SandySandy 2010-08-12 11:52:35)

Re: сборка для WinCE (WinMobile)

сравнил запуск с версией под linux
в версии wince сразу открывается Select game to play
а под linux добро пожаловать и т.д.

Post's attachments

Attachment icon wince_step1.jpg 133.54 kb, 118 downloads since 2010-08-12 

23 (edited by SandySandy 2010-08-12 11:52:49)

Re: сборка для WinCE (WinMobile)

а вот ошибка

Post's attachments

Attachment icon wince_step2.jpg 130.31 kb, 119 downloads since 2010-08-12 

Re: сборка для WinCE (WinMobile)

Отличие связано с тем что на линуксе уже был старый insteadrc.
Подумаю еще, что тут может быть не так.... Фактически -- игра пытается выполняться, но вылетает из-за того, что where (позиция игрока) == nil.

Буду думать.

Re: сборка для WinCE (WinMobile)

Пока ничего не придумал -- можно попробовать добавить опцию -debug и посмотреть на более развернутый текст ошибки.