1#
2# Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
3# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4#
5# This code is free software; you can redistribute it and/or modify it
6# under the terms of the GNU General Public License version 2 only, as
7# published by the Free Software Foundation.
8#
9# This code is distributed in the hope that it will be useful, but WITHOUT
10# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12# version 2 for more details (a copy is included in the LICENSE file that
13# accompanied this code).
14#
15# You should have received a copy of the GNU General Public License version
16# 2 along with this work; if not, write to the Free Software Foundation,
17# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18#
19# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20# or visit www.oracle.com if you need additional information or have any
21# questions.
22#
23#
24
25# This shell script builds a vm.def file for the current VM variant.
26# The .def file exports vtbl symbols which allow the Serviceability
27# Agent to run on Windows. See make/windows/projectfiles/*/vm.def
28# for more information.
29#
30# The script expects to be executed in the directory containing all of
31# the object files.
32
33# Note that we currently do not have a way to set HotSpotMksHome in
34# the batch build, but so far this has not seemed to be a problem. The
35# reason this environment variable is necessary is that it seems that
36# Windows truncates very long PATHs when executing shells like MKS's
37# sh, and it has been found that sometimes `which sh` fails.
38if [ "x$HOTSPOTMKSHOME" != "x" ]; then
39 MKS_HOME="$HOTSPOTMKSHOME"
40else
41 SH=`which sh`
42 MKS_HOME=`dirname "$SH"`
43fi
44
45AWK="$MKS_HOME/awk.exe"
46if [ ! -e $AWK ]; then
47    AWK="$MKS_HOME/gawk.exe"
48fi
49GREP="$MKS_HOME/grep.exe"
50SORT="$MKS_HOME/sort.exe"
51UNIQ="$MKS_HOME/uniq.exe"
52CAT="$MKS_HOME/cat.exe"
53RM="$MKS_HOME/rm.exe"
54DUMPBIN="link.exe /dump"
55
56if [ "$1" = "-nosa" ]; then
57    echo EXPORTS > vm.def
58    echo ""
59    echo "***"
60    echo "*** Not building SA: BUILD_WIN_SA != 1"
61    echo "*** C++ Vtables NOT included in vm.def"
62    echo "*** This jvm.dll will NOT work properly with SA."
63    echo "***"
64    echo "*** When in doubt, set BUILD_WIN_SA=1, clean and rebuild."
65    echo "***"
66    echo ""
67    exit
68fi
69
70echo "EXPORTS" > vm1.def
71
72# When called from IDE the first param should contain the link version, otherwise may be nill
73if [ "x$1" != "x" ]; then
74LD_VER="$1"
75fi
76
77if [ "x$LD_VER" != "x800" -a  "x$LD_VER" != "x900" -a "x$LD_VER" != "x1000" ]; then
78$DUMPBIN /symbols *.obj | "$GREP" "??_7.*@@6B@" | "$GREP" -v "type_info" | "$AWK" '{print $7}' | "$SORT" | "$UNIQ" > vm2.def
79else
80# Can't use pipes when calling cl.exe or link.exe from IDE. Using transit file vm3.def
81$DUMPBIN /OUT:vm3.def /symbols *.obj
82"$CAT" vm3.def | "$GREP" "??_7.*@@6B@" | "$GREP" -v "type_info" | "$AWK" '{print $7}' | "$SORT" | "$UNIQ" > vm2.def
83"$RM" -f vm3.def
84fi
85
86"$CAT" vm1.def vm2.def > vm.def
87"$RM" -f vm1.def vm2.def
88