blob: 29b5328c820bd34f4578fb66b157630f4f1c710f [file] [log] [blame]
#!/usr/bin/perl
#
# Copyright Statement:
# --------------------
# This software is protected by Copyright and the information contained
# herein is confidential. The software may not be copied and the information
# contained herein may not be used or disclosed except with the written
# permission of MediaTek Inc. (C) 2006
#
# BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
# THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
# RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
# AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
# NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
# SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
# SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
# THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
# NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
# SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
#
# BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
# LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
# AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
# OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
# MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
#
# THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
# WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
# LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
# RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
# THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
#
#*****************************************************************************
#*
#* Filename:
#* ---------
#* fix_nosyms_library.pl
#*
#* Project:
#* --------
#* MAUI
#*
#* Description:
#* ------------
#* This script will add a armlibc_rvct.obj into a library, armlibc_rvct.obj only
#* has a single useless ____mtk_fix_empty_library_function_should_not_be_used_by_anybody
#* Author:
#* -------
#* Shuguang Wen (mtk80458)
#*
#*============================================================================
#* HISTORY
#* Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
#*------------------------------------------------------------------------------
#* $Revision$
#* $Modtime$
#* $Log$
#*
#* 08 16 2012 ying.xin
#* [MOLY00002197] [gcc]newlib tailoring and performance optimization check in
#* .
#*
#*
#*------------------------------------------------------------------------------
#* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
#*============================================================================
#****************************************************************************/
#
use warnings;
use strict;
sub generate_unused_object {
my $ARMCC = "armcc";
my $source = <<END;
#pragma arm section code="SHOULDBE_EMPTYSECTION"
void ____mtk_fix_empty_library_function_should_not_be_used_by_anybody(void)
{
return;
}
END
open FH, ">", "armlibc_rvct.c" || die "Can't open armlibc_rvct.c for writing";
print FH $source;
close FH;
my $status = system($ARMCC, "-c", "-o", "armlibc_rvct.obj", "armlibc_rvct.c");
if ($status != 0) {
die "Can't compile armlibc_rvct.c";
}
}
sub usage {
print STDERR "usage: perl $0 {option}* {library path to be fix}+\n";
print STDERR "supported options:\n";
print STDERR " --force replace armlibc_rvct.obj in library unconditionally\n";
}
# a specicial function to search object file in a library
if ($#ARGV >= 0 && $ARGV[0] eq "--search_object") {
my @objects = ();
shift @ARGV;
for (my $i = 0; $i <= $#ARGV; $i++) {
push @objects, $ARGV[$i];
}
exit 0 if $#objects == -1;
open FH, "<", "make/pcore/~sortedLibs.tmp" or die "can't find make/pcore/~sortedLibs.tmp";
my @words = map { chomp; split /\s+/; } <FH>;
close FH;
foreach my $f (@words) {
next if $f =~ /^-/;
next if not ($f =~ /\.lib$/ || $f =~ /\.a$/);
next if not -f $f;
open FH, "-|", "armar -t $f" or next;
my @objs_in_lib = map { chomp; split /\s+/; } <FH>;
close FH;
#print join("\n", @objs_in_lib);
foreach my $r (@objects) {
foreach my $o (@objs_in_lib) {
if (lc $r eq lc $o) {
print "found $r in $f\n";
last;
}
}
}
}
exit 0;
}
my $force_fix = 0;
my @to_be_fix_libs = ();
foreach (@ARGV) {
if ($_ eq "--force") {
$force_fix = 1;
}
else {
push @to_be_fix_libs, $_;
}
}
if ($#to_be_fix_libs < 0) {
print STDERR "No library need to be fix\n";
usage;
exit 1;
}
generate_unused_object;
for my $lib (@to_be_fix_libs) {
if (not -f $lib) {
print "$lib: failed, can't find this library\n";
next;
}
open PIPE, "-|", "armar -t $lib";
my @lib_objs = map { chomp; split /\s+/; } <PIPE>;
close PIPE;
if ($? != 0) {
print "$lib: failed, can't use armar -t to extract contents\n";
next;
}
if (not $force_fix) {
my $has_it = grep { lc $_ eq "armlibc_rvct.obj" } @lib_objs;
if ($has_it) {
print "$lib: failed, already has armlibc_rvct.obj\n";
next;
}
}
my $status = system("armar", "-sr", "$lib", "armlibc_rvct.obj");
if ($status != 0) {
print "$lib: failed, can't add armlibc_rvct.obj into $lib\n";
next;
}
print "$lib: succeeded\n";
}
unlink "armlibc_rvct.c", "armlibc_rvct.obj";