summaryrefslogtreecommitdiffstats
path: root/bin
diff options
context:
space:
mode:
authoraxis <qt-info@nokia.com>2009-09-04 08:48:38 (GMT)
committeraxis <qt-info@nokia.com>2009-10-23 15:32:21 (GMT)
commitec7009af05cc91797ac90292add5e4dd5cea2973 (patch)
treed552c4c63e4d2a27c350e00e2d87d052a7d5b607 /bin
parent8782f3387bcd1dff3d44ae17ab0547ce08478fb1 (diff)
downloadQt-ec7009af05cc91797ac90292add5e4dd5cea2973.zip
Qt-ec7009af05cc91797ac90292add5e4dd5cea2973.tar.gz
Qt-ec7009af05cc91797ac90292add5e4dd5cea2973.tar.bz2
Changed the generation of def files and ordinal maps.
Instead of just creating a list, we now create a complete def file using makedeffile and then create the ordinal map from that. In addition we make an exp file, in the same way that Symbian does.
Diffstat (limited to 'bin')
-rwxr-xr-xbin/makedeffile48
-rwxr-xr-xbin/makeexpfile39
-rwxr-xr-xbin/makeordinalmap41
3 files changed, 93 insertions, 35 deletions
diff --git a/bin/makedeffile b/bin/makedeffile
new file mode 100755
index 0000000..e1534c4
--- /dev/null
+++ b/bin/makedeffile
@@ -0,0 +1,48 @@
+#!/usr/bin/perl -w
+
+my $deffile = $ARGV[0];
+
+shift @ARGV;
+
+sub uniqueify {
+ # String must be sorted beforehand.
+ my $c;
+ my $last = $_[0];
+ for ($c = 1; $c < scalar(@_); $c++) {
+ if ($_[$c] eq $last) {
+ splice(@_, $c, 1);
+ $c--;
+ } else {
+ $last = $_[$c];
+ }
+ }
+
+ return @_;
+}
+
+my @exports;
+
+foreach (@ARGV) {
+ my $file;
+ open($file, "< $_") or die("Could not open $_");
+ while (<$file>) {
+ s/[\r\n]//g;
+ push (@exports, $_);
+ }
+ close($file);
+}
+
+@exports = sort(@exports);
+
+@exports = uniqueify(@exports);
+
+open(HANDLE, "> $deffile");
+print (HANDLE "EXPORTS\n; NEW:\n");
+for (my $c = 0; $c < scalar(@exports); $c++) {
+ if ($exports[$c] =~ /[ ]*([^ ]+)(.*)/) {
+ print (HANDLE "\t$1 \@ " . ($c + 1) . " NONAME$2\n");
+ }
+}
+print(HANDLE "\n");
+close(HANDLE);
+
diff --git a/bin/makeexpfile b/bin/makeexpfile
new file mode 100755
index 0000000..521791d
--- /dev/null
+++ b/bin/makeexpfile
@@ -0,0 +1,39 @@
+#!/usr/bin/perl -w
+
+my $deffile = $ARGV[0];
+my $target = $ARGV[1];
+
+my @exports;
+open (HANDLE, "< $deffile") or die ("Could not open $deffile");
+while (<HANDLE>) {
+ while (/(_Z[^ ]+)/xg) {
+ push (@exports, $1);
+ }
+}
+close(HANDLE);
+
+open(HANDLE, "> $target.s") or die("Could not open $target.s");
+print (HANDLE "\tEXPORT __DLL_Export_Table__\n\n");
+print (HANDLE "\tEXPORT |DLL##ExportTable|\n\n");
+print (HANDLE "\tEXPORT |DLL##ExportTableSize|\n\n");
+print (HANDLE "\tAREA ExportTable, CODE\n");
+print (HANDLE "__DLL_Export_Table__\n");
+print (HANDLE "\tBX lr\n");
+print (HANDLE "|DLL##ExportTableSize|\n");
+print (HANDLE "\tDCD " . scalar(@exports) . "\n");
+print (HANDLE "|DLL##ExportTable|\n");
+print (HANDLE "\tPRESERVE8\n\n");
+for (my $c = 0; $c < scalar(@exports); $c++) {
+ print (HANDLE "\tIMPORT $exports[$c]\n");
+ print (HANDLE "\tDCD $exports[$c] ; \@ ". ($c + 1) . "\n");
+}
+print (HANDLE "\n");
+print (HANDLE "\tAREA |.directive|, READONLY, NOALLOC\n");
+print (HANDLE "\tDCB \"#<SYMEDIT>#\\n\"\n");
+print (HANDLE "\tDCB \"EXPORT DLL##ExportTable\\n\"\n");
+print (HANDLE "\tDCB \"EXPORT DLL##ExportTableSize\\n\"\n");
+print (HANDLE "\tEND\n");
+close(HANDLE);
+
+my $result = system("armasm --apcs /inter -o $target $target.s");
+die("Could not execute armar") if ($result);
diff --git a/bin/makeordinalmap b/bin/makeordinalmap
index 940a9e4..4642772 100755
--- a/bin/makeordinalmap
+++ b/bin/makeordinalmap
@@ -1,46 +1,17 @@
#!/usr/bin/perl -w
my $objects_dir = $ARGV[0];
-my $target = $ARGV[1];
+my $deffile = $ARGV[1];
my $dllFile = $ARGV[2];
-
-shift @ARGV;
-shift @ARGV;
-shift @ARGV;
-
-sub uniqueify {
- # String must be sorted beforehand.
- my $c;
- my $last = $_[0];
- for ($c = 1; $c < scalar(@_); $c++) {
- if ($_[$c] eq $last) {
- splice(@_, $c, 1);
- $c--;
- } else {
- $last = $_[$c];
- }
- }
-
- return @_;
-}
+my $target = $ARGV[3];
my @exports;
-
-foreach (@ARGV) {
- my $file;
- open($file, "< $_") or die("Could not open $_");
- while (<$file>) {
- push (@exports, $_);
+open (HANDLE, "< $deffile") or die ("Could not open $deffile");
+while (<HANDLE>) {
+ while (/(_Z[^ ]+)/xg) {
+ push (@exports, $1);
}
- close($file);
}
-
-@exports = sort(@exports);
-
-@exports = uniqueify(@exports);
-
-open(HANDLE, "> test.txt");
-print (HANDLE join("", @exports));
close(HANDLE);
my @ordinalfiles;