mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-10 17:57:58 +02:00
653 lines
19 KiB
ObjectPascal
653 lines
19 KiB
ObjectPascal
{
|
|
compiler.pas
|
|
|
|
Compiling, Linking and Registering in Emulator methods
|
|
|
|
Copyright (C) 2006-2007 Felipe Monteiro de Carvalho
|
|
|
|
This file is part of MkSymbian build tool.
|
|
|
|
MkSymbian is free software;
|
|
you can redistribute it and/or modify it under the
|
|
terms of the GNU General Public License version 2
|
|
as published by the Free Software Foundation.
|
|
|
|
MkSymbian is distributed in the hope
|
|
that it will be useful, but WITHOUT ANY WARRANTY; without even
|
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
PURPOSE. See the GNU General Public License for more details.
|
|
|
|
Please note that the General Public License version 2 does not permit
|
|
incorporating MkSymbian into proprietary programs.
|
|
}
|
|
unit compiler;
|
|
|
|
{$ifdef fpc}
|
|
{$mode delphi}{$H+}
|
|
{$endif}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, Process,
|
|
constants;
|
|
|
|
type
|
|
|
|
{ TCompiler }
|
|
|
|
TCompiler = class(TObject)
|
|
private
|
|
AProcess: TProcess;
|
|
CurrentDirectory: string;
|
|
MakeFolder, MakePartialFolder, BindingsUnitsFolder: string;
|
|
public
|
|
opts: TMkSymbianOptions;
|
|
constructor Create;
|
|
destructor Destroy; override;
|
|
procedure FileCopy(source, dest: string);
|
|
procedure MakeBuildPascal;
|
|
procedure MakeBuildPascal_UIQ21_ARM;
|
|
procedure MakeBuildPascal_UIQ3_Emulator;
|
|
procedure MakeBuildCpp;
|
|
procedure MakeBuildBindings;
|
|
procedure BuildUIDFile;
|
|
procedure BuildResource(AFileName: string);
|
|
procedure InstallResource(AFileName: string);
|
|
procedure RegisterInEmulator;
|
|
end;
|
|
|
|
var
|
|
vCompiler: TCompiler;
|
|
|
|
implementation
|
|
|
|
uses sdkutil, projectparser;
|
|
|
|
{ TCompiler }
|
|
|
|
{*******************************************************************
|
|
* TCompiler.Create ()
|
|
*
|
|
* DESCRIPTION: Initializes the compiler controlling object
|
|
*
|
|
* PARAMETERS: None
|
|
*
|
|
* RETURNS: Nothing
|
|
*
|
|
*******************************************************************}
|
|
constructor TCompiler.Create;
|
|
begin
|
|
inherited Create;
|
|
|
|
AProcess := TProcess.Create(nil);
|
|
|
|
CurrentDirectory := ExtractFilePath(ParamStr(0));
|
|
MakePartialFolder := Copy(CurrentDirectory, 3, Length(CurrentDirectory) - 2);
|
|
MakeFolder := IncludeTrailingBackslash(CurrentDirectory);
|
|
|
|
{ When compiling the bindings we use a relative directory to get the output dir }
|
|
BindingsUnitsFolder := MakeFolder + '../../units/i386-symbian/';
|
|
|
|
AProcess.Options := AProcess.Options + [poWaitOnExit];
|
|
end;
|
|
|
|
{*******************************************************************
|
|
* TCompiler.Destroy ()
|
|
*
|
|
* DESCRIPTION: Finalizes the compiler controlling object
|
|
*
|
|
* PARAMETERS: None
|
|
*
|
|
* RETURNS: Nothing
|
|
*
|
|
*******************************************************************}
|
|
destructor TCompiler.Destroy;
|
|
begin
|
|
AProcess.Free;
|
|
|
|
inherited Destroy;
|
|
end;
|
|
|
|
{*******************************************************************
|
|
* TCompiler.FileCopy ()
|
|
*
|
|
* DESCRIPTION: Copyes a file from source to dest
|
|
*
|
|
* PARAMETERS: source - Source file
|
|
* dest - Destination file
|
|
*
|
|
* RETURNS: Nothing
|
|
*
|
|
*******************************************************************}
|
|
procedure TCompiler.FileCopy(source, dest: string);
|
|
var
|
|
SourceStream, DestStream: TFileStream;
|
|
begin
|
|
WriteLn('');
|
|
WriteLn('Copying file: ', source);
|
|
WriteLn('To: ', dest);
|
|
WriteLn('');
|
|
|
|
SourceStream := TFileStream.Create(source, fmOpenRead);
|
|
try
|
|
DestStream := TFileStream.Create(dest, fmCreate);
|
|
try
|
|
DestStream.CopyFrom(SourceStream, 0);
|
|
finally
|
|
DestStream.Free;
|
|
end;
|
|
finally
|
|
SourceStream.Free;
|
|
end;
|
|
end;
|
|
|
|
{*******************************************************************
|
|
* TCompiler.MakeBuildPascal ()
|
|
*
|
|
* DESCRIPTION: Builds and links a Object Pascal project
|
|
*
|
|
* PARAMETERS: None
|
|
*
|
|
* RETURNS: Nothing
|
|
*
|
|
*******************************************************************}
|
|
procedure TCompiler.MakeBuildPascal;
|
|
begin
|
|
case vSDKUtil.SDKVersion of
|
|
sdkUIQ21: MakeBuildPascal_UIQ21_ARM;
|
|
sdkUIQ3: MakeBuildPascal_UIQ3_Emulator;
|
|
end;
|
|
end;
|
|
|
|
procedure TCompiler.MakeBuildPascal_UIQ21_ARM;
|
|
var
|
|
EPOCSTATLINKUREL, EPOCLINKUREL, LIBSUREL: string;
|
|
begin
|
|
WriteLn('');
|
|
WriteLn('Preparations for compiling');
|
|
WriteLn('');
|
|
|
|
{ Creation of directories }
|
|
|
|
{ Compiling the source files }
|
|
|
|
WriteLn('');
|
|
WriteLn('Compiling file ' + vProject.MainSource);
|
|
WriteLn('');
|
|
|
|
AProcess.CommandLine := vProject.CompilerPath + ' -a -s -Fu' + vProject.RTLUnitsDir +
|
|
' -Tsymbian ' + vProject.MainSource;
|
|
WriteLn(AProcess.CommandLine);
|
|
AProcess.Execute;
|
|
|
|
WriteLn('');
|
|
WriteLn('Assembling file '+ vProject.MainSourceAsm);
|
|
WriteLn('');
|
|
|
|
AProcess.CommandLine := vProject.AssemblerPath + ' ' +
|
|
vProject.MainSourceAsm + ' -o ' + vProject.MainSourceObj;
|
|
WriteLn(AProcess.CommandLine);
|
|
AProcess.Execute;
|
|
|
|
{ Linking and library creation }
|
|
|
|
WriteLn('');
|
|
WriteLn('Linking and library creation');
|
|
WriteLn('');
|
|
|
|
EPOCSTATLINKUREL := vSDKUtil.SDKPartialFolder + 'EPOC32\RELEASE\THUMB\UREL\';
|
|
EPOCLINKUREL := vSDKUtil.SDKPartialFolder + 'EPOC32\RELEASE\THUMB\UREL\';
|
|
|
|
LIBSUREL := EPOCSTATLINKUREL + 'EDLLSTUB.LIB '
|
|
+ EPOCSTATLINKUREL + 'EGCC.LIB '
|
|
+ EPOCLINKUREL + 'EUSER.LIB '
|
|
+ EPOCLINKUREL + 'APPARC.LIB '
|
|
+ EPOCLINKUREL + 'CONE.LIB '
|
|
+ EPOCLINKUREL + 'EIKCORE.LIB '
|
|
+ EPOCLINKUREL + 'EIKCOCTL.LIB ';
|
|
|
|
AProcess.CommandLine := 'dlltool -m thumb '
|
|
+ '--output-def "' + MakePartialFolder + 'HELLOWORLD.inf" "'
|
|
+ MakePartialFolder + 'HELLOWORLD.in" ';
|
|
WriteLn('');
|
|
WriteLn(AProcess.CommandLine);
|
|
WriteLn('');
|
|
AProcess.Execute;
|
|
|
|
AProcess.CommandLine := 'perl -S ' + vSdkUtil.SDKFolder + Str_Path_UIQ2_Makmake
|
|
+ ' -Deffile "' + MakePartialFolder + 'HELLOWORLD.inf" -1 NewApplication__Fv "'
|
|
+ MakePartialFolder + 'HELLOWORLD.dev"';
|
|
WriteLn('');
|
|
WriteLn(AProcess.CommandLine);
|
|
WriteLn('');
|
|
AProcess.Execute;
|
|
|
|
{ -$(ERASE) "$(EPOCBLDUREL)\HELLOWORLD.inf" }
|
|
|
|
AProcess.CommandLine := 'dlltool -m thumb --def "'
|
|
+ MakePartialFolder + 'HELLOWORLD.def" --output-exp "'
|
|
+ MakePartialFolder + 'HELLOWORLD.exp" --dllname "HELLOWORLD[101f6163].APP"';
|
|
WriteLn('');
|
|
WriteLn(AProcess.CommandLine);
|
|
WriteLn('');
|
|
AProcess.Execute;
|
|
|
|
AProcess.CommandLine := 'ld -s --thumb-entry _E32Dll '
|
|
+ '-u _E32Dll "' + MakePartialFolder + 'HELLOWORLD.exp" '
|
|
+ '--dll --base-file "' + MakePartialFolder + 'HELLOWORLD.bas" '
|
|
+ '-o "' + MakePartialFolder + 'HELLOWORLD.APP" "'
|
|
+ EPOCSTATLINKUREL + 'EDLL.LIB" '
|
|
+ '--whole-archive "' + MakePartialFolder + 'HELLOWORLD.in" '
|
|
+ '--no-whole-archive ' + LIBSUREL;
|
|
WriteLn('');
|
|
WriteLn(AProcess.CommandLine);
|
|
WriteLn('');
|
|
AProcess.Execute;
|
|
|
|
{ -$(ERASE) "$(EPOCBLDUREL)\HELLOWORLD.exp"
|
|
-$(ERASE) "$(EPOCBLDUREL)\HELLOWORLD.APP"
|
|
}
|
|
|
|
AProcess.CommandLine := 'dlltool -m thumb '
|
|
+ '--def "' + MakePartialFolder + 'HELLOWORLD.def" '
|
|
+ '--dllname "HELLOWORLD[101f6163].APP" '
|
|
+ '--base-file "' + MakePartialFolder + 'HELLOWORLD.bas" '
|
|
+ '--output-exp ' + MakePartialFolder + 'HELLOWORLD.exp"';
|
|
WriteLn('');
|
|
WriteLn(AProcess.CommandLine);
|
|
WriteLn('');
|
|
AProcess.Execute;
|
|
|
|
AProcess.CommandLine := 'ld -s --thumb-entry _E32Dll -u _E32Dll --dll "'
|
|
+ MakePartialFolder + 'HELLOWORLD.exp" -Map "'
|
|
+ MakePartialFolder + 'HELLOWORLD.APP.map" -o "'
|
|
+ MakePartialFolder + 'HELLOWORLD.APP" "'
|
|
+ EPOCSTATLINKUREL + 'EDLL.LIB" --whole-archive "'
|
|
+ MakePartialFolder + 'HELLOWORLD.in" --no-whole-archive '
|
|
+ LIBSUREL;
|
|
WriteLn('');
|
|
WriteLn(AProcess.CommandLine);
|
|
WriteLn('');
|
|
AProcess.Execute;
|
|
|
|
AProcess.CommandLine := 'petran "'
|
|
+ MakePartialFolder + 'HELLOWORLD.APP" "'
|
|
+ MakePartialFolder + 'HELLOWORLD.APP" '
|
|
+ '-nocall -uid1 0x10000079 -uid2 0x100039ce -uid3 0x101f6163';
|
|
WriteLn('');
|
|
WriteLn(AProcess.CommandLine);
|
|
WriteLn('');
|
|
AProcess.Execute;
|
|
end;
|
|
|
|
procedure TCompiler.MakeBuildPascal_UIQ3_Emulator;
|
|
var
|
|
STR_LINK_FLAGSUDEB, STR_EPOCBLDUDEB, STR_LINK_OBJSUDEB: string;
|
|
STR_FPC_RTL_OBJECTS: string;
|
|
i: Integer;
|
|
begin
|
|
|
|
WriteLn('');
|
|
WriteLn('Preparations for compiling');
|
|
WriteLn('');
|
|
|
|
// First command
|
|
|
|
{ AProcess.CommandLine := 'perl -S makmake.pl -D ' + MakePartialFolder + 'QHELLOWORLD WINSCW';
|
|
WriteLn(AProcess.CommandLine);
|
|
AProcess.Execute;}
|
|
|
|
{ Creation of directories }
|
|
|
|
ForceDirectories(vSDKUtil.SDKFolder + 'EPOC32\DATA\Z\private\10003a3f\apps');
|
|
|
|
ForceDirectories(vSDKUtil.SDKFolder + 'EPOC32\RELEASE\WINSCW\UDEB\Z\private\10003a3f\apps');
|
|
|
|
ForceDirectories(MakeFolder + 'WINSCW\UDEB');
|
|
|
|
{ Compilation }
|
|
|
|
WriteLn('');
|
|
WriteLn('Compiling file ' + vProject.MainSource);
|
|
WriteLn('');
|
|
|
|
AProcess.CommandLine := vProject.CompilerPath + ' -a -s -Fu' + vProject.RTLUnitsDir +
|
|
' -Tsymbian ' + vProject.MainSource;
|
|
WriteLn(AProcess.CommandLine);
|
|
AProcess.Execute;
|
|
|
|
WriteLn('');
|
|
WriteLn('Assembling file '+ vProject.MainSourceAsm);
|
|
WriteLn('');
|
|
|
|
AProcess.CommandLine := vProject.AssemblerPath + ' ' +
|
|
vProject.MainSourceAsm + ' -o ' + vProject.MainSourceObj;
|
|
WriteLn(AProcess.CommandLine);
|
|
AProcess.Execute;
|
|
|
|
{ UID File }
|
|
|
|
BuildUIDFile;
|
|
|
|
{ Linking }
|
|
|
|
STR_LINK_FLAGSUDEB := '-msgstyle gcc -stdlib "' +
|
|
vSDKUtil.SDKPartialFolder + 'EPOC32\RELEASE\WINSCW\UDEB\EEXE.LIB" -m' +
|
|
' "?_E32Bootstrap@@YGXXZ" -subsystem windows -g ' +
|
|
vSDKUtil.SDKPartialFolder + 'EPOC32\RELEASE\WINSCW\UDEB\EUSER.LIB ' +
|
|
'-o "' + MakeFolder + 'QPasHello.exe" -noimplib';
|
|
STR_EPOCBLDUDEB := MakeFolder + 'WINSCW\UDEB';
|
|
|
|
STR_LINK_OBJSUDEB :=
|
|
' ' + MakeFolder + UID_OBJECT_FILENAME;
|
|
|
|
for i := 0 to vProject.ObjectFiles.Count - 1 do
|
|
STR_LINK_OBJSUDEB := STR_LINK_OBJSUDEB +
|
|
' ' + MakeFolder + vProject.ObjectFiles.Strings[i];
|
|
|
|
STR_FPC_RTL_OBJECTS :=
|
|
' ' + vProject.RTLUnitsDir + 'system.o' +
|
|
' ' + vProject.RTLUnitsDir + 'symbian.o' +
|
|
' ' + vProject.RTLUnitsDir + 'ctypes.o' +
|
|
' ' + vProject.RTLUnitsDir + 'objpas.o' +
|
|
' ' + vProject.RTLUnitsDir + 'pbeexe.o';
|
|
|
|
WriteLn('');
|
|
WriteLn('Linking stage');
|
|
WriteLn('');
|
|
|
|
AProcess.CommandLine := vSDKUtil.SDKFolder + Str_Path_CWTools +
|
|
'mwldsym2.exe ' + STR_LINK_FLAGSUDEB +
|
|
' -l ' + MakeFolder +
|
|
' -search ' + STR_LINK_OBJSUDEB + STR_FPC_RTL_OBJECTS;
|
|
WriteLn(AProcess.CommandLine);
|
|
AProcess.Execute;
|
|
|
|
FileCopy(MakeFolder + 'QPasHello.exe',
|
|
vSDKUtil.SDKPartialFolder + 'EPOC32\RELEASE\WINSCW\UDEB\' + 'QPasHello.exe');
|
|
end;
|
|
|
|
{*******************************************************************
|
|
* TCompiler.MakeBuildCpp ()
|
|
*
|
|
* DESCRIPTION: Builds and links a C++ project
|
|
*
|
|
* PARAMETERS: None
|
|
*
|
|
* RETURNS: Nothing
|
|
*
|
|
*******************************************************************}
|
|
procedure TCompiler.MakeBuildCpp;
|
|
var
|
|
STR_LINK_FLAGSUDEB, STR_EPOCBLDUDEB, STR_LINK_OBJSUDEB,
|
|
STR_CWUFLAGS, STR_CWDEFS, STR_INCDIR, STR_CWUDEB: string;
|
|
begin
|
|
|
|
WriteLn('');
|
|
WriteLn('Preparations for compiling');
|
|
WriteLn('');
|
|
|
|
// First command
|
|
|
|
AProcess.CommandLine := 'perl -S makmake.pl -D ' + MakePartialFolder + 'QHELLOWORLD WINSCW';
|
|
WriteLn(AProcess.CommandLine);
|
|
AProcess.Execute;
|
|
|
|
{ Creation of directories }
|
|
|
|
ForceDirectories(vSDKUtil.SDKFolder + 'EPOC32\DATA\Z\private\10003a3f\apps');
|
|
|
|
ForceDirectories(vSDKUtil.SDKFolder + 'EPOC32\RELEASE\WINSCW\UDEB\Z\private\10003a3f\apps');
|
|
|
|
ForceDirectories(MakeFolder + 'WINSCW\UDEB');
|
|
|
|
// TODO: Check if this can be safely removed
|
|
// ForceDirectories(MakeFolder + 'QHelloWorld\WINSCW');
|
|
|
|
{ Compilation }
|
|
|
|
STR_CWUFLAGS := '-wchar_t off -align 4 -warnings on ' +
|
|
'-w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -nostdinc';
|
|
STR_CWDEFS := '-d "__SYMBIAN32__" -d "__CW32__" -d "__WINS__" -d "__WINSCW__" -d "__EXE__" -d "__SUPPORT_CPP_EXCEPTIONS__" ';
|
|
STR_INCDIR := '-cwd source -i- ' +
|
|
'-i "' + vSDKUtil.SDKPartialFolder + 'EPOC32\include" ' +
|
|
'-i "' + vSDKUtil.SDKPartialFolder + 'epoc32\include\variant" ' +
|
|
'-i "' + vSDKUtil.SDKPartialFolder + 'epoc32\include\variant\ " ' +
|
|
'-include "UIQ_3.0.hrh"';
|
|
STR_CWUDEB := 'mwccsym2.exe -g -O0 -inline off ' + STR_CWUFLAGS + ' -d _DEBUG -d _UNICODE ' + STR_CWDEFS + STR_INCDIR;
|
|
|
|
WriteLn('');
|
|
WriteLn('Compiling file ' + vProject.MainSource);
|
|
WriteLn('');
|
|
|
|
AProcess.CommandLine := STR_CWUDEB +
|
|
' -o "' + MakeFolder + 'WINSCW\UDEB\' + vProject.MainSourceNoExt + '.o"' +
|
|
' -c "' + MakeFolder + 'src\' + vProject.MainSource + '"';
|
|
WriteLn(AProcess.CommandLine);
|
|
AProcess.Execute;
|
|
|
|
{ UID File }
|
|
|
|
BuildUIDFile;
|
|
|
|
{ Linking }
|
|
|
|
STR_LINK_FLAGSUDEB := '-msgstyle gcc' +
|
|
' -stdlib "' + vSDKUtil.SDKPartialFolder + 'EPOC32\RELEASE\WINSCW\UDEB\EEXE.LIB"' +
|
|
' -m "?_E32Bootstrap@@YGXXZ" -subsystem windows' +
|
|
' -g ' + vSDKUtil.SDKPartialFolder + 'EPOC32\RELEASE\WINSCW\UDEB\EUSER.LIB' +
|
|
' -o "' + vSDKUtil.SDKPartialFolder + 'EPOC32\RELEASE\WINSCW\UDEB\' + vProject.MainSourceNoExt + '.exe"' +
|
|
' -noimplib';
|
|
STR_EPOCBLDUDEB := MakeFolder + 'WINSCW\UDEB';
|
|
STR_LINK_OBJSUDEB := vProject.MainSourceNoExt + '.o ' + UID_OBJECT_FILENAME;
|
|
|
|
WriteLn('');
|
|
WriteLn('Linking stage');
|
|
WriteLn('');
|
|
|
|
AProcess.CommandLine := 'mwldsym2.exe ' + STR_LINK_FLAGSUDEB +
|
|
' -l ' + STR_EPOCBLDUDEB +
|
|
' -search ' + STR_LINK_OBJSUDEB;
|
|
WriteLn(AProcess.CommandLine);
|
|
AProcess.Execute;
|
|
end;
|
|
|
|
{*******************************************************************
|
|
* TCompiler.MakeBuildBindings ()
|
|
*
|
|
* DESCRIPTION: Builds and links the C interface for the symbian libraries
|
|
*
|
|
* Note the we use a output directory relative to the current directory
|
|
*
|
|
* PARAMETERS: None
|
|
*
|
|
* RETURNS: Nothing
|
|
*
|
|
*******************************************************************}
|
|
procedure TCompiler.MakeBuildBindings;
|
|
var
|
|
STR_CWUFLAGS, STR_CWDEFS, STR_INCDIR, STR_CWUDEB, STR_CWCOMPILER: string;
|
|
begin
|
|
{ Makes sure that the output directory exists }
|
|
|
|
SysUtils.ForceDirectories(BindingsUnitsFolder);
|
|
|
|
{ Compilation }
|
|
|
|
STR_CWUFLAGS := '-wchar_t off -align 4 -warnings on ' +
|
|
'-w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -nostdinc';
|
|
STR_CWDEFS := '-d "__SYMBIAN32__" -d "__CW32__" -d "__WINS__" -d "__WINSCW__" -d "__EXE__" -d "__SUPPORT_CPP_EXCEPTIONS__" ';
|
|
STR_INCDIR := '-cwd source -i-' +
|
|
' -i "' + vSDKUtil.SDKPartialFolder + 'EPOC32\include"' +
|
|
' -i "' + vSDKUtil.SDKPartialFolder + 'epoc32\include\variant"' +
|
|
' -i "' + vSDKUtil.SDKPartialFolder + 'epoc32\include\variant\ "' +
|
|
' -include "UIQ_3.0.hrh"';
|
|
STR_CWCOMPILER := vSDKUtil.SDKFolder + Str_Path_CWTools + 'mwccsym2.exe';
|
|
STR_CWUDEB := STR_CWCOMPILER + ' -g -O0 -inline off ' + STR_CWUFLAGS + ' -d _DEBUG -d _UNICODE ' + STR_CWDEFS + STR_INCDIR;
|
|
|
|
WriteLn('');
|
|
WriteLn('Compiling file pbeexe.cpp');
|
|
WriteLn('');
|
|
|
|
AProcess.CommandLine := STR_CWUDEB +
|
|
' -o "' + BindingsUnitsFolder + 'pbeexe.o" ' +
|
|
'-c "' + MakePartialFolder + 'pbeexe.cpp"';
|
|
WriteLn(AProcess.CommandLine);
|
|
AProcess.Execute;
|
|
end;
|
|
|
|
{*******************************************************************
|
|
* TCompiler.BuildUIDFile ()
|
|
*
|
|
* DESCRIPTION: Generates and compiles a UID file
|
|
*
|
|
* PARAMETERS: None
|
|
*
|
|
* RETURNS: Nothing
|
|
*
|
|
*******************************************************************}
|
|
procedure TCompiler.BuildUIDFile;
|
|
var
|
|
Str_UIDFile: string;
|
|
UIDFile: TFileStream;
|
|
STR_CWUFLAGS, STR_CWDEFS, STR_INCDIR, STR_CWUDEB, STR_CWCOMPILER: string;
|
|
begin
|
|
{ First creates the UID file }
|
|
|
|
WriteLn('');
|
|
WriteLn('Creating UID file');
|
|
WriteLn('');
|
|
|
|
Str_UIDFile :=
|
|
'// mksymbian-generated uid source file' + LineEnding +
|
|
'#include <e32cmn.h>' + LineEnding +
|
|
'#pragma data_seg(".SYMBIAN")' + LineEnding +
|
|
'__EMULATOR_IMAGE_HEADER2(0x1000007a,' + vProject.UID2 + ',' + vProject.UID3 +
|
|
',EPriorityForeground,0x00000000u,0x00000000u,0x01000001,0,0x00010000,0)' + LineEnding +
|
|
'#pragma data_seg()' + LineEnding;
|
|
|
|
UIDFile := TFileStream.Create(UID_SOURCE_FILENAME, fmCreate);
|
|
try
|
|
UIDFile.Write(Pointer(Str_UIDFile)^, Length(Str_UIDFile));
|
|
finally
|
|
UIDFile.Free;
|
|
end;
|
|
|
|
{ Compilation }
|
|
|
|
STR_CWUFLAGS := '-wchar_t off -align 4 -warnings on ' +
|
|
'-w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -nostdinc';
|
|
STR_CWDEFS := '-d "__SYMBIAN32__" -d "__CW32__" -d "__WINS__" -d "__WINSCW__" -d "__EXE__" -d "__SUPPORT_CPP_EXCEPTIONS__" ';
|
|
STR_INCDIR := '-cwd source -i- ' +
|
|
' -i "' + vSDKUtil.SDKPartialFolder + 'EPOC32\include" ' +
|
|
' -i "' + vSDKUtil.SDKPartialFolder + 'epoc32\include\variant" ' +
|
|
' -i "' + vSDKUtil.SDKPartialFolder + 'epoc32\include\variant\ "' +
|
|
' -include "UIQ_3.0.hrh"';
|
|
STR_CWCOMPILER := vSDKUtil.SDKFolder + Str_Path_CWTools + 'mwccsym2.exe';
|
|
STR_CWUDEB := STR_CWCOMPILER + ' -g -O0 -inline off ' + STR_CWUFLAGS + ' -d _DEBUG -d _UNICODE ' + STR_CWDEFS + STR_INCDIR;
|
|
|
|
WriteLn('');
|
|
WriteLn('Compiling file ' + UID_SOURCE_FILENAME);
|
|
WriteLn('');
|
|
|
|
AProcess.CommandLine := STR_CWUDEB +
|
|
' -o "' + MakeFolder + UID_OBJECT_FILENAME + '"' +
|
|
' -c "' + MakeFolder + UID_SOURCE_FILENAME + '"';
|
|
WriteLn(AProcess.CommandLine);
|
|
AProcess.Execute;
|
|
end;
|
|
|
|
{*******************************************************************
|
|
* TCompiler.BuildResource ()
|
|
*
|
|
* DESCRIPTION: Builds a resource file
|
|
*
|
|
* PARAMETERS: None
|
|
*
|
|
* RETURNS: Nothing
|
|
*
|
|
*******************************************************************}
|
|
procedure TCompiler.BuildResource(AFileName: string);
|
|
begin
|
|
WriteLn('');
|
|
WriteLn('Preprocessing resource file: ' + AFileName);
|
|
WriteLn('');
|
|
|
|
AProcess.CommandLine := vSDKUtil.SDKFolder + Str_Path_Cpp +
|
|
' -lang-c++' +
|
|
' -I ' + vSDKUtil.SDKPartialFolder + 'EPOC32\include' +
|
|
' -I ' + vSDKUtil.SDKPartialFolder + 'epoc32\include\variant' +
|
|
' ' + MakeFolder + AFileName +
|
|
' ' + MakeFolder + ChangeFileExt(AFileName, STR_RESOURCE_TMP_EXT);
|
|
WriteLn(AProcess.CommandLine);
|
|
AProcess.Execute;
|
|
|
|
WriteLn('');
|
|
WriteLn('Building resource file: ' + AFileName);
|
|
WriteLn('');
|
|
|
|
AProcess.CommandLine := vSDKUtil.SDKFolder + Str_Path_RComp +
|
|
' -v -u' +
|
|
' -o"' + MakeFolder + ChangeFileExt(AFileName, STR_RESOURCE_EXT) + '"' +
|
|
' -s"' + MakeFolder + ChangeFileExt(AFileName, STR_RESOURCE_TMP_EXT) + '"';
|
|
WriteLn(AProcess.CommandLine);
|
|
WriteLn('');
|
|
System.Flush(System.StdOut);
|
|
AProcess.Execute;
|
|
end;
|
|
|
|
{*******************************************************************
|
|
* TCompiler.InstallResource ()
|
|
*
|
|
* DESCRIPTION: Install a resource file
|
|
*
|
|
* PARAMETERS: None
|
|
*
|
|
* RETURNS: Nothing
|
|
*
|
|
*******************************************************************}
|
|
procedure TCompiler.InstallResource(AFileName: string);
|
|
var
|
|
StrFrom, StrTo: string;
|
|
begin
|
|
WriteLn('');
|
|
WriteLn('Installing resource file: ', AFileName);
|
|
WriteLn('');
|
|
|
|
StrFrom := MakeFolder + ChangeFileExt(vProject.MainResource, STR_RESOURCE_EXT);
|
|
StrTo := vSDKUtil.SDKFolder + Str_Path_Resource_Files +
|
|
ChangeFileExt(vProject.MainResource, STR_RESOURCE_EXT);
|
|
|
|
FileCopy(StrFrom, StrTo);
|
|
end;
|
|
|
|
{*******************************************************************
|
|
* TCompiler.RegisterInEmulator ()
|
|
*
|
|
* DESCRIPTION: Registers a software in the emulator
|
|
* At this point the resource file must already be compiled
|
|
*
|
|
* PARAMETERS: None
|
|
*
|
|
* RETURNS: Nothing
|
|
*
|
|
*******************************************************************}
|
|
procedure TCompiler.RegisterInEmulator;
|
|
var
|
|
StrFrom, StrTo: string;
|
|
begin
|
|
WriteLn('');
|
|
WriteLn('Registering the software on the emulator');
|
|
WriteLn('');
|
|
|
|
StrFrom := MakeFolder + ChangeFileExt(vProject.MainResource, STR_RESOURCE_EXT);
|
|
StrTo := vSDKUtil.SDKFolder + Str_Path_Emulator_Registration +
|
|
ChangeFileExt(vProject.MainResource, STR_RESOURCE_EXT);
|
|
|
|
FileCopy(StrFrom, StrTo);
|
|
end;
|
|
|
|
end.
|
|
|