diff -r 000000000000 -r 83f4b4db085c sbsv1_os/e32toolp/platform/cl_edg.pm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sbsv1_os/e32toolp/platform/cl_edg.pm Tue Feb 02 01:39:43 2010 +0200 @@ -0,0 +1,496 @@ +# Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# Cl_edg; +# +# + +package Cl_edg; + +require Exporter; +@ISA=qw(Exporter); +@EXPORT=qw( + PMHelp_Mmp + PMStartBldList + PMBld + PMStartSrcList + PMStartSrc + PMSrcDepend + PMSrcBldDepend + PMEndSrcBld + PMEndSrc + PMEndSrcList +); +use cl_generic; +use Genutl; +use File::Path; +use Cwd; + +sub PMHelp_Mmp { + print "// No additional keywords for this platform\n"; +} + +my $epocroot = $ENV{EPOCROOT}; +$epocroot=~ s-\\$--; # chop trailing \\ +my $Makecmd; +sub PMStartBldList($) { + ($Makecmd) = @_; + my $BasicTrgType=&main::BasicTrgType; + my @BldList=&main::BldList; + my @ChopRTWSysIncPaths=&main::Path_Chop(&main::Path_RltToWork(&main::SysIncPaths)); # old style + my @ChopRTWUserIncPaths=&main::Path_Chop(&main::Path_RltToWork(&main::UserIncPaths)); # old style + my $RelPath="$epocroot\\EPOC32\\RELEASE"; + my $RPath = &main::Path_RltToWork($RelPath); + my @MacroList=&main::MacroList(); + my $VariantFile=&main::VariantFile(); + my $Trg=&main::Trg; + my $DPath = &main::Path_RltToWork($epocroot); + my $DefFile = &main::DefFile; + my $EABIDefFile = &main::EABIDef; + + my $EdgSysIncludeList = "Edg_sysinc_list.txt"; + my $EdgUserIncludeList = "Edg_userinc_list.txt"; + my $EdgUdebReportList = "Edg_udeb_rep_list.txt"; + my $EdgUrelReportList = "Edg_urel_rep_list.txt"; + + &Generic_Header(0,$Makecmd); # define standard things using relative paths + + # EDG report file generation + + &main::Output( + "GXPTRGUDEB = $RPath\\EDG\\UDEB\n", + "GXPTRGUREL = $RPath\\EDG\\UREL\n\n", + "DEFFILE = $DefFile\n\n", + "EABIDEFFILE = $EABIDefFile\n\n", + "EDG_SYSINC_LIST=\${EPOCBLD}\\..\\..\\", $EdgSysIncludeList, + "\n", + "EDG_USERINC_LIST=\${EPOCBLD}\\..\\..\\", $EdgUserIncludeList, + "\n", + "EDG_UREL_REP_LIST=\${EPOCBLD}\\..\\..\\",$EdgUrelReportList, + "\n", + "EDG_UDEB_REP_LIST=\${EPOCBLD}\\..\\..\\", $EdgUdebReportList, + "\n\n" + ); + + &main::Output( + "INCDIR =" + ); + + + foreach (@ChopRTWUserIncPaths) { + &main::Output( + " --include_directory \"$_\"" + ); + } + + &main::Output( + "\n" + ); + + + &main::Output( + "SYSINCDIR =" + ); + + foreach (@ChopRTWSysIncPaths) { + &main::Output( + " --sys_include \"$_\"", + ); + } + + &main::Output( + "\n", + "\n" + ); + + + my $preinclude = "--preinclude \$(EPOCINC)\\edg\\edg3_7_rvct2_2.h";#this is the variant line you must change to "simulate" another compiler. + &main::Output( + "GCCFLAGS = --wchar_t_keyword --no_code_gen --exceptions --no_warnings", + " ${preinclude}", + "\n" + ); + + &main::Output( + "GCCDEFS = -D __MARM_THUMB__ -D __MARM_INTERWORK__ -D __ARMCC__ -D __EPOC32__ -D __MARM__ -D __EABI__ -D __ARMCC_2__ -D __ARMCC_2_2__ -D __SUPPORT_CPP_EXCEPTIONS__ -D IMPORT_C= -D EXPORT_C= -D __softfp=" + ); + foreach(@MacroList) { + &main::Output( + " -D $_" + ); + } + if($VariantFile){ + &main::Output(" -D __PRODUCT_INCLUDE__=\\\"${VariantFile}\\\""); + } + &main::Output( + " \$(USERDEFS)\n", + "\n" + ); + + foreach (@BldList) { + &main::Output( + "GCC$_ = cpfe" + ); + + &main::Output( + ' $(GCCFLAGS)' + ); + foreach (&main::MacroList($_)) { + &main::Output( + " -D $_" + ); + } + + &main::Output( + " \$(GCCDEFS)\n" + ); + } + &main::Output( + "\n", + "\n" + ); + + &main::Output( + "LIBRARY:\n", + "\t\@echo Nothing to do\n" + ); + + &main::Output( + "RESOURCEUREL:\n", + "\t\@echo Nothing to do\n" + ); + + &main::Output( + "RESOURCEUDEB:\n", + "\t\@echo Nothing to do\n\n\n" + ); + + foreach (@BldList) { + &main::Output( + "$_ :" + ); + + if ($BasicTrgType !~ /IMPLIB/io) { + my $TrgBase = &main::Path_Split('base',$Trg); + &main::Output ( + " \\\n\t", + &Generic_Quote("\$(GXPTRG$_)\\$TrgBase.gxp") + ); + } + &main::Output( + "\n", + "\n" + ); + } +} + +sub PMBld { + my @ASSPLibList=&main::ASSPLibList; + my @SrcList=&main::SrcList; + my $BaseTrg=&main::BaseTrg; + my $Bld=&main::Bld; + my $ChopBldPath=&main::Path_Chop(&main::BldPath); + my $EPOCIncPath=&main::EPOCIncPath; + my $BasicTrgType=&main::BasicTrgType; + my $ChopRelPath=&main::Path_Chop(&main::RelPath); + my $RelPath=&main::RelPath; + my $Trg=&main::Trg; + my $TrgType=&main::TrgType; + my @UidList=&main::UidList; + # DefFile + my $DefFile = &main::DefFile; + # EABIDefFile + my $EABIDefFile = &main::EABIDef; + + # REAL TARGETS + #------------- + &main::Output( + "# REAL TARGET - BUILD VARIANT $Bld\n", + "\n" + ); + + &main::Output( + "WHAT$Bld : WHATGENERIC\n", + "\n", + "CLEAN$Bld : CLEANBUILD$Bld CLEANRELEASE$Bld\n", + "\n", + "CLEANBUILD$Bld : \n", + "\t\@perl -S ermdir.pl \"\$(EPOCBLD$Bld)\"\n", + "\n", + "CLEANRELEASE$Bld : CLEANGENERIC CLEANEDGTEMPFILES$Bld\n", + "\n" + ); + + &main::Output("CLEANEDGTEMPFILES$Bld :\n", + "\t\-\$(ERASE) \$(EDG_SYSINC_LIST) ", + "\$(EDG_USERINC_LIST) ", + "\$(EDG_${Bld}_REP_LIST) " + ); + + my @releaseables; + &Generic_WhatCleanTargets($Bld, "WHAT$Bld", "CLEANRELEASE$Bld", @releaseables); + &Generic_MakeWorkDir("MAKEWORK$Bld",$ChopBldPath); + &Generic_MakeWorkDir("MAKEWORK$Bld",$ChopRelPath); + + &main::Output( + "\n", + "\n" + ); + + # XML Stuff + &main::Output( + &Generic_Quote("\$(GXPTRG$Bld)\\$BaseTrg.gxp"), " : ", + &Generic_Quote("\$(EPOCBLD$Bld)\\$BaseTrg.gxp"), + ); + my @ChopRTWSysIncPaths=&main::Path_Chop(&main::Path_RltToWork(&main::SysIncPaths)); # old style + foreach my $incPath (@ChopRTWSysIncPaths) { + &main::Output( + "\n\t\@echo $incPath >> \$(EDG_SYSINC_LIST)", + ); + } + + my @ChopRTWUserIncPaths=&main::Path_Chop(&main::Path_RltToWork(&main::UserIncPaths)); # old style + foreach my $incPath (@ChopRTWUserIncPaths) { + &main::Output( + "\n\t\@echo $incPath >> \$(EDG_USERINC_LIST)", + ); + } + + &main::Output( + "\n", + "\n" + ); + + # TARGET *.GXP + #------------ + if (scalar @SrcList >150) { + # deal with very long lists by splitting them into 150 file pieces, which allows + # about 200 bytes per filename if the underlying max size is 32K + # + + my $counter1=150; # i.e. trigger new variable immediately + my $counter2=0; + my @objvarlist=(); + foreach (@SrcList) { + if ($counter1==150) { + $counter1=0; + $counter2++; + my $objvar = "OBJECTS$Bld$counter2"; + push @objvarlist, " \$($objvar)"; + &main::Output( + "\n", + "$objvar=" + ); + } + my $BaseSrc = &main::Path_Split('Base', $_); + my $Ext = &main::Path_Split('Ext', $_); + next if (lc($Ext) eq '.cia'); + &main::Output( + " \\\n\t", &Generic_Quote("\$(EPOCBLD$Bld)\\$BaseSrc$Ext.aut") + ); + $counter1++; + } + + &main::Output( + "\n\n" + ); + } else { + # shorter lists remain unchanged + # + &main::Output( + "OBJECTS$Bld=" + ); + foreach (@SrcList) { + my $BaseSource = &main::Path_Split('Base', $_); + my $Ext = &main::Path_Split('Ext', $_); + next if (lc($Ext) eq '.cia'); + &main::Output( + " \\\n\t", &Generic_Quote("\$(EPOCBLD$Bld)\\$BaseSource$Ext.aut") + ); + } + + &main::Output( + "\n", + "\n" + ); + + &main::Output("RESOURCEINFO$Bld="); + &main::Output("\n\n"); + + &main::Output( + + &Generic_Quote("\$(EPOCBLD$Bld)\\$BaseTrg.gxp"), " : \$(OBJECTS$Bld) \$(EABIDEFFILE) \$(RESOURCEINFO$Bld)\n", + "\n\n" + ); + } +} + + +sub PMStartSrcList { + + &main::Output( + "# SOURCES\n", + "\n" + ); +} + +sub PMStartSrc { + my $Src=&main::Src; + + &main::Output( + "# Source $Src\n", + "\n" + ); +} + +sub PMSrcDepend { + my @BldList=&main::BldList; + my @DepList=&main::DepList; + my $BaseSrc=&main::BaseSrc; + my $ExtSrc=&main::ExtSrc; + my $cia = (lc($ExtSrc) eq '.cia') ? "_" : ""; + + return if (@DepList == 0); + + foreach (@BldList) { + &main::Output( + &Generic_Quote("\$(EPOCBLD$_)\\$BaseSrc$cia.lis"), " ", + &Generic_Quote("\$(EPOCBLD$_)\\$BaseSrc$cia.aut"), " \\\n", + ); + } + &main::Output( + ":" + ); + foreach (@DepList) { + &main::Output( + " \\\n\t", &Generic_Quote($_) + ); + } + &main::Output( + "\n", + "\n" + ); +} + +sub PMSrcBldDepend { + my $Bld=&main::Bld; + my @DepList=&main::DepList; + my $BaseSrc=&main::BaseSrc; + my $ExtSrc=&main::ExtSrc; + my $cia = (lc($ExtSrc) eq '.cia') ? "" : ""; + + return if (@DepList == 0); + + &main::Output( + &Generic_Quote("\$(EPOCBLD$Bld)\\$BaseSrc$cia.lis"), " ", + &Generic_Quote("\$(EPOCBLD$Bld)\\$BaseSrc$cia.aut"), " :", + ); + foreach (@DepList) { + &main::Output( + " \\\n\t", &Generic_Quote($_) + ); + } + &main::Output( + "\n", + "\n" + ); +} + +my %sources; + +sub PMEndSrcBld { + my $ABI=&main::ABI; + my $BaseSrc=&main::BaseSrc; + my $Bld=&main::Bld; + my $Src=ucfirst lc &main::Src; + my $SrcPath=&main::SrcPath; + my $Ext = &main::Path_Split('Ext', $Src); + my $Cia = (lc($Ext) eq '.cia') ? 1 : 0; + + my $RTWSrcPath=&main::Path_Chop(&main::Path_RltToWork($SrcPath)); + + # add source path, source file and build type to hashmap. + $sources{$SrcPath}{$Src}{$Bld}=1; + + # Use GCC trick to get assembler source files preprocessed with CPP + $Src =~ s/\.s$/.S/i; + + @browser = (); + my $EdgReportFile = "\$(EDG_UREL_REP_LIST)"; + if($Bld =~ /udeb/i){ + $EdgReportFile = "\$(EDG_UDEB_REP_LIST)"; + } + + if ($Cia) { + &main::Output( + &Generic_Quote("\$(EPOCBLD$Bld)\\$BaseSrc\_.aut"), " : ", + &Generic_Quote("$SrcPath$Src"), "\n", + "\t\$(GCC$Bld) -D __CIA__ --include_directory \"$RTWSrcPath\" \$(INCDIR) --xref \"\$\@\" \"$RTWSrcPath\\$Src\"\n", + "\t\@echo \"\$\<\" >> $EdgReportFile\n", + "\n"); + } else { + + my $BldPath=&main::BldPath; + my $EdgReportFilePath=UpDir(UpDir(UpDir($BldPath))); + + &main::Output( + &Generic_Quote("\$(EPOCBLD$Bld)\\$BaseSrc$Ext.aut"), " : ", + &Generic_Quote("$SrcPath$Src"), "\n", + "\t\$(GCC$Bld) --include_directory \"$RTWSrcPath\" \$(INCDIR) \$(SYSINCDIR) --xref \"\$\@\" \"$RTWSrcPath\\$Src\"\n", + "\t\@echo \$(EPOCBLD$Bld)\\$BaseSrc$Ext.aut >> $EdgReportFile\n", + "\n" + ); + + foreach $browser (@browser) + { + print "$browser\n"; + } + } +} + +sub PMEndSrc { + &main::Output( + "\n", + "\n" + ); +} + +sub PMEndSrcList { + &Generic_End; +} + + + +sub UpDir($) + { + my ($aPath) = @_; + + my $lastChar = substr($aPath,-1); + my $end = length($aPath)-1; + + if ( ($lastChar eq '\\') || ($lastChar eq '/') ) + { + $end -= 1; + } + + my $last = rindex($aPath,'\\',$end); + if ( (rindex($aPath,'/',$end)>$last) | ($last == -1) ) + { $last = rindex($aPath,'/',$end); } + + if ($last == -1) + { return ""; } + else + { return substr($aPath,0,$last).'/'; } + } + +1;