* Implemented support for custom RC compiler and .RES linker

git-svn-id: trunk@8164 -
This commit is contained in:
michael 2007-07-25 12:06:57 +00:00
parent 0cd246808e
commit bedf0151cc
5 changed files with 79 additions and 57 deletions

View File

@ -53,6 +53,9 @@ type
procedure CompileResourceFiles; procedure CompileResourceFiles;
procedure CollectResourceFiles; procedure CollectResourceFiles;
Var
ResCompiler : String;
RCCompiler : String;
implementation implementation
@ -96,6 +99,16 @@ end;
procedure tresourcefile.compile(output: tresoutput; const OutName: ansistring); procedure tresourcefile.compile(output: tresoutput; const OutName: ansistring);
Function SelectBin(Const Bin1,Bin2 : String) : String;
begin
If (Bin1<>'') then
SelectBin:=Bin1
else
SelectBin:=Bin2;
end;
var var
respath, respath,
srcfilepath, srcfilepath,
@ -106,9 +119,9 @@ var
objused : boolean; objused : boolean;
begin begin
if output=roRES then if output=roRES then
bin:=target_res.rcbin Bin:=SelectBin(RCCompiler,target_res.rcbin)
else else
bin:=target_res.resbin; Bin:=SelectBin(ResCompiler,target_res.resbin);
if bin='' then if bin='' then
exit; exit;
resfound:=false; resfound:=false;

View File

@ -2519,6 +2519,7 @@ S*2Aas_assemble using GNU AS
**1F<x>_set file names and paths: **1F<x>_set file names and paths:
**2Fa<x>[,y]_for a program load first units <x> and [y] before uses is parsed **2Fa<x>[,y]_for a program load first units <x> and [y] before uses is parsed
**2Fc<x>_sets input codepage to <x> **2Fc<x>_sets input codepage to <x>
**2FC<x>_sets RC compiler binary name to <x>
**2FD<x>_sets the directory where to search for compiler utilities **2FD<x>_sets the directory where to search for compiler utilities
**2Fe<x>_redirect error output to <x> **2Fe<x>_redirect error output to <x>
**2FE<x>_set exe/unit output path to <x> **2FE<x>_set exe/unit output path to <x>
@ -2528,6 +2529,7 @@ S*2Aas_assemble using GNU AS
**2Fm<x>_load unicode conversion table from <x>.txt in the compiler dir **2Fm<x>_load unicode conversion table from <x>.txt in the compiler dir
**2Fo<x>_adds <x> to object path **2Fo<x>_adds <x> to object path
**2Fr<x>_load error message file <x> **2Fr<x>_load error message file <x>
**2FR<x>_sets resource (.res) linker to <x>
**2Fu<x>_adds <x> to unit path **2Fu<x>_adds <x> to unit path
**2FU<x>_set unit output path to <x>, overrides -FE **2FU<x>_set unit output path to <x>, overrides -FE
*g1g_generate debugger information: *g1g_generate debugger information:

View File

@ -729,7 +729,7 @@ const
option_info=11024; option_info=11024;
option_help_pages=11025; option_help_pages=11025;
MsgTxtSize = 43738; MsgTxtSize = 43827;
MsgIdxMax : array[1..20] of longint=( MsgIdxMax : array[1..20] of longint=(
24,83,237,83,63,49,107,22,135,60, 24,83,237,83,63,49,107,22,135,60,

View File

@ -895,168 +895,171 @@ const msgtxt : array[0..000182,1..240] of char=(
'**2Fa<x>[,y]_for a program load first units <x> and [y] before uses',' '+ '**2Fa<x>[,y]_for a program load first units <x> and [y] before uses',' '+
'is parsed'#010+ 'is parsed'#010+
'**2Fc<x>_sets input codepage to <x>'#010+ '**2Fc<x>_sets input codepage to <x>'#010+
'**2FC<x>_sets RC compiler binary name to <x>'#010+
'**2FD<x>_sets the directory where to search for compiler utilities'#010+ '**2FD<x>_sets the directory where to search for compiler utilities'#010+
'**2Fe<x>_redirect error output to <x>'#010+ '**2Fe<x>_redirect error output to <x>'#010+
'**2FE<x>_set exe/unit output path to <x>'#010+ '**2FE<x>_set exe/unit output path to <x>'#010+
'**2Fi<x>_adds <x> to include path'#010+ '**','2Fi<x>_adds <x> to include path'#010+
'**2Fl<x>_adds',' <x> to library path'#010+ '**2Fl<x>_adds <x> to library path'#010+
'**2FL<x>_uses <x> as dynamic linker'#010+ '**2FL<x>_uses <x> as dynamic linker'#010+
'**2Fm<x>_load unicode conversion table from <x>.txt in the compiler di'+ '**2Fm<x>_load unicode conversion table from <x>.txt in the compiler di'+
'r'#010+ 'r'#010+
'**2Fo<x>_adds <x> to object path'#010+ '**2Fo<x>_adds <x> to object path'#010+
'**2Fr<x>_load error message file <x>'#010+ '**2Fr<x>_load error message file ','<x>'#010+
'**2FR<x>_sets resource (.res) linker to <x>'#010+
'**2Fu<x>_adds <x> to unit path'#010+ '**2Fu<x>_adds <x> to unit path'#010+
'**2FU<x>_s','et unit output path to <x>, overrides -FE'#010+ '**2FU<x>_set unit output path to <x>, overrides -FE'#010+
'*g1g_generate debugger information:'#010+ '*g1g_generate debugger information:'#010+
'*g2gc_generate checks for pointers'#010+ '*g2gc_generate checks for pointers'#010+
'*g2gd_use dbx'#010+ '*g2gd_use dbx'#010+
'*g2gg_use gsym'#010+ '*g2gg_use gsym'#010+
'*g2gh_use heap trace unit (for memory leak debugging)'#010+ '*g2gh_use',' heap trace unit (for memory leak debugging)'#010+
'*g2gl_use line info unit to show more info f','or backtraces'#010+ '*g2gl_use line info unit to show more info for backtraces'#010+
'*g2gp_preserve case in stabs symbol names'#010+ '*g2gp_preserve case in stabs symbol names'#010+
'*g2gt_trash local variables (to detect uninitialized uses)'#010+ '*g2gt_trash local variables (to detect uninitialized uses)'#010+
'*g2gv_generates programs traceable with valgrind'#010+ '*g2gv_generates programs traceable w','ith valgrind'#010+
'*g2gw_generate dwarf debugging info'#010+ '*g2gw_generate dwarf debugging info'#010+
'**1i_information'#010+ '**1i_information'#010+
'**2iD_return compiler d','ate'#010+ '**2iD_return compiler date'#010+
'**2iV_return compiler version'#010+ '**2iV_return compiler version'#010+
'**2iW_return full compiler version'#010+ '**2iW_return full compiler version'#010+
'**2iSO_return compiler OS'#010+ '**2iSO_return compiler OS'#010+
'**2iSP_return compiler processor'#010+ '**2iSP_return compiler processor'#010+
'**2iTO_return target OS'#010+ '**2iTO_return target OS',#010+
'**2iTP_return target processor'#010+ '**2iTP_return target processor'#010+
'**1I<x>_adds <x> to include path'#010+ '**1I<x>_adds <x> to include path'#010+
'**1k<x>_Pass <x> to the ','linker'#010+ '**1k<x>_Pass <x> to the linker'#010+
'**1l_write logo'#010+ '**1l_write logo'#010+
'**1M<x>_set language mode to <x>'#010+ '**1M<x>_set language mode to <x>'#010+
'**2Mfpc_free pascal dialect (default)'#010+ '**2Mfpc_free pascal dialect (default)'#010+
'**2Mobjfpc_switch some Delphi 2 extensions on'#010+ '**2Mobjfpc_switch some Delphi 2 extensions on'#010+
'**2Mdelphi_tries to be Delphi compatible'#010+ '**2Mdelphi_','tries to be Delphi compatible'#010+
'**2Mtp_tries to be TP/BP 7.0 compatible'#010+ '**2Mtp_tries to be TP/BP 7.0 compatible'#010+
'**2Mmacpas_tries to',' be compatible to the macintosh pascal dialects'#010+ '**2Mmacpas_tries to be compatible to the macintosh pascal dialects'#010+
'**1n_don'#039't read the default config file'#010+ '**1n_don'#039't read the default config file'#010+
'**1N<x>_node tree optimizations'#010+ '**1N<x>_node tree optimizations'#010+
'**2Nu_unroll loops'#010+ '**2Nu_unroll loops'#010+
'**1o<x>_change the name of the executable produced to <x>'#010+ '**1o<x>_chan','ge the name of the executable produced to <x>'#010+
'**1O<x>_optimizations:'#010+ '**1O<x>_optimizations:'#010+
'**2O-_disable optimi','zations'#010+ '**2O-_disable optimizations'#010+
'**2O1_level 1 optimizations (quick and debugger friendly)'#010+ '**2O1_level 1 optimizations (quick and debugger friendly)'#010+
'**2O2_level 2 optimizations (-O1 + quick optimizations)'#010+ '**2O2_level 2 optimizations (-O1 + quick optimizations)'#010+
'**2O3_level 3 optimizations (-O2 + slow optimizations)'#010+ '**2O3_level 3 optimizations (','-O2 + slow optimizations)'#010+
'**2Oa<x>=<y>_set alignment'#010+ '**2Oa<x>=<y>_set alignment'#010+
'**2Oo[NO]<x>_enable or disable optim','izations, see fpc -i for possibl'+ '**2Oo[NO]<x>_enable or disable optimizations, see fpc -i for possible '+
'e values'#010+ 'values'#010+
'**2Op<x>_set target cpu for optimizing, see fpc -i for possible values'+ '**2Op<x>_set target cpu for optimizing, see fpc -i for possible values'+
#010+ #010+
'**2Os_generate smaller code'#010+ '**2Os_generate smaller code'#010+
'**1pg_generate profile code for gprof (defines FPC_PROFILE)'#010+ '**1pg_gener','ate profile code for gprof (defines FPC_PROFILE)'#010+
'**1R<x>_assembler reading style:'#010+ '**1R<x>_assembler reading style:'#010+
'**2Rdef','ault_use default assembler'#010+ '**2Rdefault_use default assembler'#010+
'3*2Ratt_read AT&T style assembler'#010+ '3*2Ratt_read AT&T style assembler'#010+
'3*2Rintel_read Intel style assembler'#010+ '3*2Rintel_read Intel style assembler'#010+
'6*2RMOT_read motorola style assembler'#010+ '6*2RMOT_read motorola style assembler'#010+
'**1S<x>_syntax options:'#010+ '**1S<x>_syntax ','options:'#010+
'**2S2_same as -Mobjfpc'#010+ '**2S2_same as -Mobjfpc'#010+
'**2Sc_supports operators like C (*=,+=,/= and -=)'#010+ '**2Sc_supports operators like C (*=,+=,/= and -=)'#010+
'**2Sa_i','nclude assertion code.'#010+ '**2Sa_include assertion code.'#010+
'**2Sd_same as -Mdelphi'#010+ '**2Sd_same as -Mdelphi'#010+
'**2Se<x>_error options. <x> is a combination of the following:'#010+ '**2Se<x>_error options. <x> is a combination of the following:'#010+
'**3*_<n> : compiler stops after the <n> errors (default is 1)'#010+ '**3*_<n> : compiler stops after the <n> er','rors (default is 1)'#010+
'**3*_w : compiler stops also after warnings'#010+ '**3*_w : compiler stops also after warnings'#010+
'**3*_n : compiler stops a','lso after notes'#010+ '**3*_n : compiler stops also after notes'#010+
'**3*_h : compiler stops also after hints'#010+ '**3*_h : compiler stops also after hints'#010+
'**2Sg_allow LABEL and GOTO'#010+ '**2Sg_allow LABEL and GOTO'#010+
'**2Sh_Use ansistrings'#010+ '**2Sh_Use ansistrings'#010+
'**2Si_support C++ styled INLINE'#010+ '**2Si_support C++ styled INLINE'#010+
'**2Sk_load fpcylix unit'#010+ '**2Sk_load fp','cylix unit'#010+
'**2SI<x>_set interface style to <x>'#010+ '**2SI<x>_set interface style to <x>'#010+
'**3SIcom_COM compatible interface (default',')'#010+ '**3SIcom_COM compatible interface (default)'#010+
'**3SIcorba_CORBA compatible interface'#010+ '**3SIcorba_CORBA compatible interface'#010+
'**2Sm_support macros like C (global)'#010+ '**2Sm_support macros like C (global)'#010+
'**2So_same as -Mtp'#010+ '**2So_same as -Mtp'#010+
'**2Sp_same as -Mgpc'#010+ '**2Sp_same as -Mgpc'#010+
'**2Ss_constructor name must be init (destructor must be done)'#010+ '**2Ss_constructor name must be init',' (destructor must be done)'#010+
'**2St_allow static keyword in objects'#010+ '**2St_allow static keyword in objects'#010+
'**2Sx_enable exception k','eywords (default in Delphi/ObjFPC modes)'#010+ '**2Sx_enable exception keywords (default in Delphi/ObjFPC modes)'#010+
'**1s_don'#039't call assembler and linker'#010+ '**1s_don'#039't call assembler and linker'#010+
'**2sh_Generate script to link on host'#010+ '**2sh_Generate script to link on host'#010+
'**2st_Generate script to link on target'#010+ '**2st_Generate script to link on ta','rget'#010+
'**2sr_Skip register allocation phase (use with -alr)'#010+ '**2sr_Skip register allocation phase (use with -alr)'#010+
'**1T<x>_Target operating system',':'#010+ '**1T<x>_Target operating system:'#010+
'3*2Temx_OS/2 via EMX (including EMX/RSX extender)'#010+ '3*2Temx_OS/2 via EMX (including EMX/RSX extender)'#010+
'3*2Tfreebsd_FreeBSD'#010+ '3*2Tfreebsd_FreeBSD'#010+
'3*2Tgo32v2_Version 2 of DJ Delorie DOS extender'#010+ '3*2Tgo32v2_Version 2 of DJ Delorie DOS extender'#010+
'3*2Tlinux_Linux'#010+ '3*2Tlinux_Linux'#010+
'3*2Tnetbsd_NetBSD'#010+ '3*2Tnetbsd_NetB','SD'#010+
'3*2Tnetware_Novell Netware Module (clib)'#010+ '3*2Tnetware_Novell Netware Module (clib)'#010+
'3*2Tnetwlibc_Novell Netware Module (libc)'#010+ '3*2Tnetwlibc_Novell Netware Module (libc)'#010+
'3*2','Topenbsd_OpenBSD'#010+ '3*2Topenbsd_OpenBSD'#010+
'3*2Tos2_OS/2 / eComStation'#010+ '3*2Tos2_OS/2 / eComStation'#010+
'3*2Tsunos_SunOS/Solaris'#010+ '3*2Tsunos_SunOS/Solaris'#010+
'3*2Twatcom_Watcom compatible DOS extender'#010+ '3*2Twatcom_Watcom compatible DOS extender'#010+
'3*2Twdosx_WDOSX DOS extender'#010+ '3*2Twdosx_WDOSX DOS extender'#010+
'3*2Twin32_Windows 32 Bit'#010+ '3*2Twin32_Wi','ndows 32 Bit'#010+
'3*2Twince_Windows CE'#010+ '3*2Twince_Windows CE'#010+
'4*2Tlinux_Linux'#010+ '4*2Tlinux_Linux'#010+
'6*2Tamiga_Commodore Amiga'#010+ '6*2Tamiga_Commodore Amiga'#010+
'6*2Tatari_Ata','ri ST/STe/TT'#010+ '6*2Tatari_Atari ST/STe/TT'#010+
'6*2Tlinux_Linux/m68k'#010+ '6*2Tlinux_Linux/m68k'#010+
'6*2Tmacos_Macintosh m68k (not supported)'#010+ '6*2Tmacos_Macintosh m68k (not supported)'#010+
'6*2Tpalmos_PalmOS'#010+ '6*2Tpalmos_PalmOS'#010+
'A*2Tlinux_Linux'#010+ 'A*2Tlinux_Linux'#010+
'A*2Twince_Windows CE'#010+ 'A*2Twince_Windows CE'#010+
'P*2Tamiga_AmigaOS on PowerPC'#010+ 'P*2Tamiga_AmigaOS on ','PowerPC'#010+
'P*2Tdarwin_Darwin and Mac OS X on PowerPC'#010+ 'P*2Tdarwin_Darwin and Mac OS X on PowerPC'#010+
'P*2Tlinux_Linux on PowerPC'#010+ 'P*2Tlinux_Linux on PowerPC'#010+
'P*2Tmacos_Ma','c OS (classic) on PowerPC'#010+ 'P*2Tmacos_Mac OS (classic) on PowerPC'#010+
'P*2Tmorphos_MorphOS'#010+ 'P*2Tmorphos_MorphOS'#010+
'S*2Tlinux_Linux'#010+ 'S*2Tlinux_Linux'#010+
'**1u<x>_undefines the symbol <x>'#010+ '**1u<x>_undefines the symbol <x>'#010+
'**1U_unit options:'#010+ '**1U_unit options:'#010+
'**2Un_don'#039't check the unit name'#010+ '**2Un_don'#039't check the unit name'#010+
'**2Ur_generate release unit files'#010+ '**2Ur','_generate release unit files'#010+
'**2Us_compile a system unit'#010+ '**2Us_compile a system unit'#010+
'**1v<x>_Be verbose. <x> is a com','bination of the following letters:'#010+ '**1v<x>_Be verbose. <x> is a combination of the following letters:'#010+
'**2*_e : Show errors (default) 0 : Show nothing (except errors)'#010+ '**2*_e : Show errors (default) 0 : Show nothing (except errors)'#010+
'**2*_w : Show warnings u : Show unit info'#010+ '**2*_w : Show warnings u : Show ','unit info'#010+
'**2*_n : Show notes t : Show tried/used files'#010+ '**2*_n : Show notes t : Show tried/used files'#010+
'**2*_h : Show hi','nts c : Show conditionals'#010+ '**2*_h : Show hints c : Show conditionals'#010+
'**2*_i : Show general info d : Show debug info'#010+ '**2*_i : Show general info d : Show debug info'#010+
'**2*_l : Show linenumbers r : Rhide/GCC compatibility mode'#010+ '**2*_l : Show linenumbers r : Rhide/GCC ','compatibility mod'+
'**2*_a : Show everything x : Executable info (Win32 only)'#010, 'e'#010+
'**2*_a : Show everything x : Executable info (Win32 only)'#010+
'**2*_b : Write file names messages with full path'#010+ '**2*_b : Write file names messages with full path'#010+
'**2*_v : write fpcdebug.txt with p : Write tree.log with parse tre'+ '**2*_v : write fpcdebug.txt with p : Write tree.log with parse tre'+
'e'#010+ 'e'#010+
'**2*_ lots of debugging info'#010+ '**2*_ lots of debugging in','fo'#010+
'3*1W<x>_Win32-like target options'#010+ '3*1W<x>_Win32-like target options'#010+
'3*2WB_Create a relocatable image'#010+ '3*2WB_Create a relocatable image'#010+
'3*2WB<x>_Set Image ','base to Hexadecimal <x> value'#010+ '3*2WB<x>_Set Image base to Hexadecimal <x> value'#010+
'3*2WC_Specify console type application'#010+ '3*2WC_Specify console type application'#010+
'3*2WD_Use DEFFILE to export functions of DLL or EXE'#010+ '3*2WD_Use DEFFILE to export functions of DLL or EXE'#010+
'3*2WF_Specify full-screen type application (OS/2 only)'#010+ '3*2WF_Specify full-screen type',' application (OS/2 only)'#010+
'3*2WG_Specify graphic type application'#010+ '3*2WG_Specify graphic type application'#010+
'3*2WN_Do not generate rel','ocation code (necessary for debugging)'#010+ '3*2WN_Do not generate relocation code (necessary for debugging)'#010+
'3*2WR_Generate relocation code'#010+ '3*2WR_Generate relocation code'#010+
'P*2WC_Specify console type application (Mac OS only)'#010+ 'P*2WC_Specify console type application (Mac OS only)'#010+
'P*2WG_Specify graphic type application (Mac OS only)'#010+ 'P*2WG_Specify graphic type a','pplication (Mac OS only)'#010+
'P*2WT_Specify tool type application (MPW tool, Mac OS only)'#010+ 'P*2WT_Specify tool type application (MPW tool, Mac OS only)'#010+
'**1X','_executable options:'#010+ '**1X_executable options:'#010+
'**2Xc_pass --shared to the linker (Unix only)'#010+ '**2Xc_pass --shared to the linker (Unix only)'#010+
'**2Xd_don'#039't use standard library search path (needed for cross com'+ '**2Xd_don'#039't use standard library search path (needed for cross com'+
'pile)'#010+ 'pile)'#010+
'**2Xe_use external linker'#010+ '**2Xe_use ex','ternal linker'#010+
'**2XD_try to link units dynamic (defines FPC_LINK_DYNAMIC)'#010+ '**2XD_try to link units dynamic (defines FPC_LINK_DYNAMIC)'#010+
'**2Xi_u','se internal linker'#010+ '**2Xi_use internal linker'#010+
'**2Xm_generate link map'#010+ '**2Xm_generate link map'#010+
'**2XM<x>_set the name of the '#039'main'#039' program routine (default i'+ '**2XM<x>_set the name of the '#039'main'#039' program routine (default i'+
's '#039'main'#039')'#010+ 's '#039'main'#039')'#010+
'**2XP<x>_prepend the binutils names with the prefix <x>'#010+ '**2XP<x>_prepend the binutils names ','with the prefix <x>'#010+
'**2Xr<x>_set library search path to <x> (needed for cross compile)'#010+ '**2Xr<x>_set library search path to <x> (needed for cross compile)'#010+
'**','2Xs_strip all symbols from executable'#010+ '**2Xs_strip all symbols from executable'#010+
'**2XS_try to link units static (default) (defines FPC_LINK_STATIC)'#010+ '**2XS_try to link units static (default) (defines FPC_LINK_STATIC)'#010+
'**2Xt_link with static libraries (-static is passed to linker)'#010+ '**2Xt_link with static libraries (-static is p','assed to linker)'#010+
'**2XX_try to link units smart (defines FPC_LINK_SMART)'#010+ '**2XX_try to link units smart (defines FPC_LINK_SMART)'#010+
'**1*_'#010, '**1*_'#010+
'**1?_shows this help'#010+ '**1?_shows this help'#010+
'**1h_shows this help without waiting'#000 '**1h_shows this help without waiting'#000
); );

View File

@ -27,7 +27,7 @@ interface
uses uses
CClasses,cfileutl, CClasses,cfileutl,
globtype,globals,verbose,systems,cpuinfo; globtype,globals,verbose,systems,cpuinfo, comprsrc;
Type Type
TOption=class TOption=class
@ -704,6 +704,8 @@ begin
else else
init_settings.sourcecodepage:=more; init_settings.sourcecodepage:=more;
end; end;
'C' :
RCCompiler := More;
'D' : 'D' :
utilsdirectory:=FixPath(More,true); utilsdirectory:=FixPath(More,true);
'e' : 'e' :
@ -750,6 +752,8 @@ begin
end; end;
'r' : 'r' :
Msgfilename:=More; Msgfilename:=More;
'R' :
ResCompiler := More;
'u' : 'u' :
begin begin
if ispara then if ispara then