EXL's Developer Blog
Translate site on my language:

Каталог статей
Меню сайта

Категории раздела

Поиск

Друзья сайта
  • MotoFan.Ru
  • Dingoo A320.Русский Ресурс
  • Motorola Gaming site
  • Android Games Development
  • ROKR E2 Developments

  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0

    Приветствую Вас, Гость · RSS 19.04.2024, 22:05

    Главная » Статьи » Cтатьи

    Мануал по установке Tmake в тулчейн, и правки созданного им MakeFile
    Часто бывает, что есть некоторый набор исходных файлов, но нет ни Makefile, ни Configure, так необходимых для сборки.
    Конечно true луниксоиды скажут, что Мэйкфайл нужно писать самим, но у меня не так много времени, поэтому предлагаю воспользоваться такой вот удобной утилиткой.
    Для начала, скажу что этот способ тестировался на том тулчейне, установка которого описана в первом посте, на другие тулчейны знающим людям поставить tmake думаю не составит проблем.
    1. Для начала качаем следующий архив:
    Скачать
    2. Далее в лине переходим в ту папку, где установлен тулчейн. У меня эта папка: /opt/toolchains/motomagx/arm-eabi2
    в эту папку кидаем папку tmakelib из скачанного архива (В корень тулчейна)
    3. Два скрипта, написанных на perl кидаем в папку bin (/opt/toolchains/motomagx/arm-eabi2/bin)
    4. Ну и в скрипте запуска тулчейна (Тот скрипт, которым устанавливаете окружение. Если следовали пунктам из первого поста, то он у вас в /home/z6 , называется setenv-z6.sh) добавляем строку, можно в конец скрипта:
    Code
    export TMAKEPATH=$TOOLPREFIX/tmakelib/pwd/arm-linux-g++/

    5. Всё, Tmake установлен! Проверяем:
    5.1. Запускаем тулчейн
    Code
    cd /home/z6
    . setenv-z6.sh

    5.2. Переходим в папку с исходными файлами:
    Code
    cd /папка_с_вашими_исходниками/

    5.3. В папке выполняем следующие команды (Должны пройти без ошибок, обратите внимание на пути):
    Code
    progen -o 1.pro
    chmod +x /opt/toolchains/motomagx/arm-eabi2/bin/progen
    chmod +x /opt/toolchains/motomagx/arm-eabi2/bin/tmake
    progen -o 1.pro
    tmake 1.pro -o Makefile

    6. Должен создаться дефолтный Makefile, который нужно немножко поправить
    Дефолтный Makefile приблизительно такой:
    Code
    ############################################################################# <br> # Makefile for building 1 <br> # Generated by tmake at 20:26, 2010/09/16 <br> # Project: 1 <br> # Template: app <br> #############################################################################

    ####### Compiler, tools and options

    CC = arm-linux-gnueabi-gcc <br> CXX = arm-linux-gnueabi-g++ <br> CFLAGS = -pipe -Wall -W -O3 -DNO_DEBUG <br> CXXFLAGS= -pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O3 -DNO_DEBUG <br> INCPATH = -I$(QTDIR)/include <br> LINK = arm-linux-gnueabi-gcc <br> LFLAGS = -Wl,-rpath,$(QTDIR)/lib <br> LIBS = $(SUBLIBS) -L$(QTDIR)/lib -lm -lqte-mt -lezxappbase -lezxam <br> MOC = $(QTDIR)/bin/moc <br> UIC = $(QTDIR)/bin/uic

    TAR = tar -cf <br> GZIP = gzip -9f

    ####### Files

    HEADERS = <br> SOURCES = main.c <br> OBJECTS = main.o <br> INTERFACES = <br> UICDECLS = <br> UICIMPLS = <br> SRCMOC = <br> OBJMOC = <br> DIST = <br> TARGET = 1 <br> INTERFACE_DECL_PATH = .

    ####### Implicit rules

    .SUFFIXES: .cpp .cxx .cc .C .c

    .cpp.o: <br> $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<

    .cxx.o: <br> $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<

    .cc.o: <br> $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<

    .C.o: <br> $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<

    .c.o: <br> $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<

    ####### Build rules

    all: $(TARGET)

    $(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) <br> $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)

    moc: $(SRCMOC)

    tmake: Makefile

    Makefile: 1.pro <br> tmake 1.pro -o Makefile

    dist: <br> $(TAR) 1.tar 1.pro $(SOURCES) $(HEADERS) $(INTERFACES) $(DIST) <br> $(GZIP) 1.tar

    clean: <br> -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS) $(TARGET) <br> -rm -f *~ core

    ####### Sub-libraries

    ###### Combined headers

    ####### Compile

    main.o: main.c <br>

    6.1. Если вы хотите собрать SDL приложение:
    Правим верхнюю часть таким образом (Можно просто заменить часть Мэйкфайла (До строки #######Files) следующим) -

    Code

    #############################################################################
    # Makefile for building You Name Project
    # Generated by tmake at 07:49, 2010/07/25
    # Project: You Name Project
    # Template: app
    #############################################################################

    ####### Compiler, tools and options

    CC = arm-linux-gnueabi-gcc
    CXX = arm-linux-gnueabi-g++
    CFLAGS = `sdl-config --cflags` -march=armv6j -mtune=arm1136jf-s -mfpu=vfp -Os
    CXXFLAGS= `sdl-config --cflags` -march=armv6j -mtune=arm1136jf-s -mfpu=vfp -Os
    INCPATH = `sdl-config --cflags`
    LINK = arm-linux-gnueabi-gcc
    LFLAGS = `sdl-config --libs` -lSDL_ttf -lSDL_mixer -lfreetype -lSDL_image -lSDL_gfx
    LIBS = `sdl-config --libs` -lSDL_ttf -lSDL_mixer -lfreetype -lSDL_image -lSDL_gfx
    MOC = $(QTDIR)/bin/moc
    UIC = $(QTDIR)/bin/uic

    TAR = tar -cf
    GZIP = gzip -9f

    Обращаем внимание на CFLAGS, CXXFLAGS какие флаги туда поставить для корректной сборки, можно посмотреть в самих исходниках.
    Например -DGP2X -DDINGOO идр. для определённой платформы/параметров итд.
    -march=armv6j -mtune=arm1136jf-s -mfpu=vfp -Os - это оптимизация под наш процессор (ARM11) Спасибо за нахождение параметров Ant-On'у и XVilka
    -O3 или -O2 также оптимизация, но бывает что программа/игра терминируется после неё( Мне сказали, что это как-то связано с похаканным компилятором))

    6.2. Если вы хотите собрать QT приложение:
    Обрезаем наш дефолтный MakeFile до строчки ###########Files
    Ну и вставляем следующую конструкцию. Спасибо Ant-On'у за неё.

    Code
    # App can compile for platform:

    # PLATFORM=EZX-Z6

    # PLATFORM=EZX-Z6W

    # PLATFORM=EZX-U9

    # PLATFORM=EZX-ZN5

    # PLATFORM=EZX-V8

    # PLATFORM=EZX-E8 (default)

    # PLATFORM=EZX-VE66

    # PLATFORM=EZX-EM35

    #.

    # For example - compile this source for Motorla ZN5:

    #.

    # cd /PROJECT_FOLDER/

    # make clean

    # make PLATFORM=EZX-ZN5

    #.

    ######Config######

    APPNAME := You_name_project

    UPLOAD_PATH := /mmc/mmca1/bin/

    ##################

    TOOLPREFIX := /opt/toolchains/motomagx/arm-eabi

    ARMLIB := $(TOOLPREFIX)/arm-linux-gnueabi/lib

    ifeq ($(PLATFORM),)

    PLATFORM = EZX-ZN5 <br> endif

    ifeq ($(PLATFORM),EZX-Z6)

    QTDIR := $(TOOLPREFIX)/lib/qt-2.3.8

    EZXDIR := $(TOOLPREFIX)/lib/ezx-z6

    LINKLIB := -lm -lqte-mt -lezxpm -ljpeg -lezxappbase -lezxtapi-xscale-r -llog_util -llighting

    DIRECTIV := -DEZX_Z6

    TARGET = $(APPNAME)_Z6

    endif

    ifeq ($(PLATFORM),EZX-V8)

    QTDIR := $(TOOLPREFIX)/lib/qt-v8

    EZXDIR := $(TOOLPREFIX)/lib/ezx-v8

    LINKLIB := -lm -lqte-mt -lezxpm -lezxappbase

    DIRECTIV := -DEZX_V8

    TARGET = $(APPNAME)_V8

    ZNEWCHECKBOX = 1

    endif

    ifeq ($(PLATFORM),EZX-E8)

    ARMLIB := $(TOOLPREFIX)/arm-linux-gnueabi/lib_E8

    QTDIR := $(TOOLPREFIX)/lib/qt-e8

    EZXDIR := $(TOOLPREFIX)/lib/ezx-e8

    LINKLIB := -lm -lqte-mt -lezxappbase

    DIRECTIV := -DEZX_E8

    TARGET = $(APPNAME)_E8

    endif

    ifeq ($(PLATFORM),EZX-EM30)

    ARMLIB := $(TOOLPREFIX)/arm-linux-gnueabi/lib_E8

    QTDIR := $(TOOLPREFIX)/lib/qt-em30

    EZXDIR := $(TOOLPREFIX)/lib/ezx-em30

    EZXDIR2 := $(TOOLPREFIX)/lib/ezx-e8

    LINKLIB := -lm -lqte-mt -lezxappbase

    DIRECTIV := -DEZX_EM30

    TARGET = $(APPNAME)_EM30

    endif

    ifeq ($(PLATFORM),EZX-U9)

    QTDIR := $(TOOLPREFIX)/lib/qt-zn5

    EZXDIR := $(TOOLPREFIX)/lib/ezx-u9

    EZXDIR2 := $(TOOLPREFIX)/lib/ezx-zn5

    LINKLIB := -lm -lqte-mt -lezxappbase

    DIRECTIV := -DEZX_U9

    TARGET = $(APPNAME)_U9

    endif

    ifeq ($(PLATFORM),EZX-Z6W)

    QTDIR := $(TOOLPREFIX)/lib/qt-z6w

    EZXDIR := $(TOOLPREFIX)/lib/ezx-z6w

    LINKLIB := -lm -lqte-mt -lezxappbase

    DIRECTIV := -DEZX_Z6W

    TARGET = $(APPNAME)_Z6W

    endif

    ifeq ($(PLATFORM),EZX-ZN5)

    QTDIR := $(TOOLPREFIX)/lib/qt-zn5

    EZXDIR := $(TOOLPREFIX)/lib/ezx-zn5

    LINKLIB := -lm -lqte-mt -lezxappbase -lezxqtnapi -lezxtapi-xscale-r

    DIRECTIV := -DEZX_ZN5

    TARGET = $(APPNAME)_ZN5

    endif

    ifeq ($(PLATFORM),EZX-EM35)

    ARMLIB := $(TOOLPREFIX)/arm-linux-gnueabi/lib_E8

    QTDIR := $(TOOLPREFIX)/lib/qt-em35

    EZXDIR := $(TOOLPREFIX)/lib/ezx-em35

    LINKLIB := -lm -lqte-mt -lezxappbase

    DIRECTIV := -DEZX_EM35

    TARGET = $(APPNAME)_EM35

    endif

    ifeq ($(PLATFORM),EZX-VE66)

    ARMLIB := $(TOOLPREFIX)/arm-linux-gnueabi/lib_E8

    QTDIR := $(TOOLPREFIX)/lib/qt-em35

    EZXDIR := $(TOOLPREFIX)/lib/ezx-ve66

    LINKLIB := -lm -lqte-mt -lezxappbase

    DIRECTIV := -DEZX_VE66

    TARGET = $(APPNAME)_VE66

    endif

    CC = $(TOOLPREFIX)/bin/arm-linux-gnueabi-gcc

    CXX = $(TOOLPREFIX)/bin/arm-linux-gnueabi-g++

    LD = $(TOOLPREFIX)/bin/arm-linux-gnueabi-g++

    STRIP = $(TOOLPREFIX)/bin/arm-linux-strip

    CFLAGS = -pipe -Wall -W -O2 -DNO_DEBUG $(INCPATH)

    CXXFLAGS= -pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O2 -DNO_DEBUG $(DIRECTIV) $(INCPATH)

    INCPATH = -I$(QTDIR)/include -I$(EZXDIR)/include -I$(EZXDIR2)/include -I $(TOOLPREFIX)/arm-linux-gnueabi/include

    LDFLAGS = -s

    LINK = $(TOOLPREFIX)/bin/arm-linux-gnueabi-gcc

    LFLAGS = -Wl,-rpath-link,$(EZXDIR)/lib

    LIBS = $(SUBLIBS) -L$(EZXDIR)/lib -L$(EZXDIR2)/lib -L$(ARMLIB) -L$(QTDIR)/lib $(LINKLIB)

    MOC = $(QTDIR)/bin/moc

    UIC = $(QTDIR)/bin/uic

    Правим переменную, обычно это:
    Code
    TOOLPREFIX := /opt/toolchains/motomagx/arm-eabi

    Ну и редактируем блок EZX-ZN5

    7. Собственно всё. Спасибо большое Neomoto, за то, что напомнил :grin:

    Категория: Cтатьи | Добавил: EXL (16.09.2010)
    Просмотров: 1150 | Комментарии: 1 | Рейтинг: 0.0/0
    Всего комментариев: 0
    Имя *:
    Email *:
    Код *:
    Copyright EXL © 2024
    Сделать бесплатный сайт с uCoz