1 #
   2 # Copyright (c) 2011, 2014, 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.  Oracle designates this
   8 # particular file as subject to the "Classpath" exception as provided
   9 # by Oracle in the LICENSE file that accompanied this code.
  10 #
  11 # This code is distributed in the hope that it will be useful, but WITHOUT
  12 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14 # version 2 for more details (a copy is included in the LICENSE file that
  15 # accompanied this code).
  16 #
  17 # You should have received a copy of the GNU General Public License version
  18 # 2 along with this work; if not, write to the Free Software Foundation,
  19 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20 #
  21 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22 # or visit www.oracle.com if you need additional information or have any
  23 # questions.
  24 #
  25 
  26 default: all
  27 
  28 include $(SPEC)
  29 include MakeBase.gmk
  30 include NativeCompilation.gmk
  31 
  32 # Setup the java compilers for the JDK build.
  33 include Setup.gmk
  34 
  35 # Prepare the find cache.
  36 $(eval $(call FillCacheFind, $(JDK_TOPDIR)/src/share/bin))
  37 
  38 # Build tools
  39 include Tools.gmk
  40 
  41 BUILD_LAUNCHERS =
  42 
  43 # When building a legacy overlay image (on solaris 64 bit), the launchers
  44 # need to be built with a different rpath and a different output dir.
  45 ifeq ($(OVERLAY_IMAGES), true)
  46   ORIGIN_ROOT := /../..
  47   OUTPUT_SUBDIR := $(OPENJDK_TARGET_CPU_ISADIR)
  48 else
  49   ORIGIN_ROOT := /..
  50 endif
  51 
  52 ifeq ($(OPENJDK_TARGET_OS), macosx)
  53   ORIGIN_ARG := $(call SET_EXECUTABLE_ORIGIN)
  54 else
  55   ORIGIN_ARG := $(call SET_EXECUTABLE_ORIGIN,$(ORIGIN_ROOT)/lib$(OPENJDK_TARGET_CPU_LIBDIR)/jli)
  56 endif
  57 
  58 #
  59 # Applications expect to be able to link against libjawt without invoking
  60 # System.loadLibrary("jawt") first. This was the behaviour described in the
  61 # devloper documentation of JAWT and what worked with OpenJDK6.
  62 #
  63 ifneq ($(findstring $(OPENJDK_TARGET_OS), linux solaris), )
  64   ORIGIN_ARG += $(call SET_EXECUTABLE_ORIGIN,$(ORIGIN_ROOT)/lib$(OPENJDK_TARGET_CPU_LIBDIR))
  65 endif
  66 
  67 define SetupLauncher
  68   # TODO: Fix mapfile on solaris. Won't work with ld as linker.
  69   # Parameter 1 is the name of the launcher (java, javac, jar...)
  70   # Parameter 2 is extra CFLAGS
  71   # Parameter 3 is extra LDFLAGS
  72   # Parameter 4 is extra LDFLAGS_SUFFIX_posix
  73   # Parameter 5 is extra LDFLAGS_SUFFIX_windows
  74   # Parameter 6 is optional Windows JLI library (full path)
  75   # Parameter 7 is optional Windows resource (RC) flags
  76   # Parameter 8 is optional Windows version resource file (.rc)
  77   # Parameter 9 is different output dir
  78   # Parameter 10 if set, link statically with c runtime on windows.
  79   # Parameter 11 if set, override plist file on macosx.
  80 
  81   $1_WINDOWS_JLI_LIB := $(JDK_OUTPUTDIR)/objs/libjli/jli.lib
  82   ifneq ($6, )
  83     $1_WINDOWS_JLI_LIB := $6
  84   endif
  85   $1_VERSION_INFO_RESOURCE := $(JDK_TOPDIR)/src/windows/resource/version.rc
  86   ifneq ($8, )
  87     $1_VERSION_INFO_RESOURCE := $8
  88   endif
  89 
  90   $1_LDFLAGS := $3
  91   $1_LDFLAGS_SUFFIX :=
  92   ifeq ($(OPENJDK_TARGET_OS), macosx)
  93     $1_PLIST_FILE := Info-cmdline.plist
  94     ifneq ($(11), )
  95       $1_PLIST_FILE := $(11)
  96       ifneq ($$(findstring privileged, $$($1_PLIST_FILE)), )
  97         $1_CODESIGN := true
  98       endif
  99     endif
 100 
 101     $1_LDFLAGS += -Wl,-all_load $(JDK_OUTPUTDIR)/objs/libjli_static.a \
 102         -framework Cocoa -framework Security -framework ApplicationServices \
 103         -sectcreate __TEXT __info_plist $(JDK_TOPDIR)/src/macosx/lib/$$($1_PLIST_FILE)
 104         $1_LDFLAGS_SUFFIX += -pthread
 105   endif
 106 
 107   ifeq ($(OPENJDK_TARGET_OS), aix)
 108     $1_LDFLAGS_SUFFIX += -L$(JDK_OUTPUTDIR)/objs -ljli_static
 109   endif
 110 
 111   ifeq ($(USE_EXTERNAL_LIBZ), true)
 112     $1_LDFLAGS_SUFFIX += -lz
 113   endif
 114 
 115   $1_OUTPUT_DIR_ARG := $9
 116   ifeq (, $$($1_OUTPUT_DIR_ARG))
 117     $1_OUTPUT_DIR_ARG := $(JDK_OUTPUTDIR)/bin
 118   endif
 119 
 120   # TODO: maybe it's better to move this if-statement out of this function
 121   ifeq ($1, java)
 122     $1_OPTIMIZATION_ARG := HIGH
 123     $1_LDFLAGS_solaris := -R$(OPENWIN_HOME)/lib$(OPENJDK_TARGET_CPU_ISADIR)
 124   else
 125   $1_OPTIMIZATION_ARG := LOW
 126   endif
 127 
 128   $1_CFLAGS := $(CFLAGS_JDKEXE)
 129   ifeq ($(10), true)
 130     $1_CFLAGS := $(filter-out -MD, $(CFLAGS_JDKEXE))
 131   endif
 132 
 133   # The linker on older SuSE distros (e.g. on SLES 10) complains with:
 134   # "Invalid version tag `SUNWprivate_1.1'. Only anonymous version tag is allowed in executable."
 135   # if feeded with a version script which contains named tags.
 136   ifeq ($(USING_BROKEN_SUSE_LD),yes)
 137     ifneq ($(wildcard $(JDK_TOPDIR)/make/mapfiles/launchers/mapfile-$(OPENJDK_TARGET_CPU).anonymous), )
 138       $1_MAPFILE := $(JDK_TOPDIR)/make/mapfiles/launchers/mapfile-$(OPENJDK_TARGET_CPU).anonymous
 139     else
 140       $1_MAPFILE :=
 141     endif
 142   else
 143     ifneq ($(wildcard $(JDK_TOPDIR)/make/mapfiles/launchers/mapfile-$(OPENJDK_TARGET_CPU)), )
 144       $1_MAPFILE := $(JDK_TOPDIR)/make/mapfiles/launchers/mapfile-$(OPENJDK_TARGET_CPU)
 145     else
 146       $1_MAPFILE :=
 147     endif
 148   endif
 149 
 150   $(call SetupNativeCompilation,BUILD_LAUNCHER_$1, \
 151       SRC := $(JDK_TOPDIR)/src/share/bin, \
 152       INCLUDE_FILES := main.c, \
 153       LANG := C, \
 154       OPTIMIZATION := $$($1_OPTIMIZATION_ARG), \
 155       CFLAGS := $$($1_CFLAGS) \
 156           -I$(JDK_TOPDIR)/src/share/bin \
 157           -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/bin \
 158           -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS)/bin \
 159           -DFULL_VERSION='"$(FULL_VERSION)"' \
 160           -DJDK_MAJOR_VERSION='"$(JDK_MAJOR_VERSION)"' \
 161           -DJDK_MINOR_VERSION='"$(JDK_MINOR_VERSION)"' \
 162           -DLAUNCHER_NAME='"$(LAUNCHER_NAME)"' \
 163           -DPROGNAME='"$1"' $(DPACKAGEPATH) \
 164           $2, \
 165       CFLAGS_linux := -fPIC, \
 166       CFLAGS_solaris := -KPIC -DHAVE_GETHRTIME, \
 167       LDFLAGS := $(LDFLAGS_JDKEXE) \
 168           $(ORIGIN_ARG) \
 169           $$($1_LDFLAGS), \
 170       LDFLAGS_macosx := $(call SET_SHARED_LIBRARY_NAME,$1), \
 171       LDFLAGS_linux := -lpthread \
 172           $(call SET_SHARED_LIBRARY_NAME,$(LIBRARY_PREFIX)$(SHARED_LIBRARY_SUFFIX)), \
 173       LDFLAGS_solaris := $$($1_LDFLAGS_solaris) \
 174           $(call SET_SHARED_LIBRARY_NAME,$(LIBRARY_PREFIX)$(SHARED_LIBRARY_SUFFIX)), \
 175       MAPFILE := $$($1_MAPFILE), \
 176       LDFLAGS_SUFFIX := $(LDFLAGS_JDKEXE_SUFFIX) $$($1_LDFLAGS_SUFFIX), \
 177       LDFLAGS_SUFFIX_posix := $4, \
 178       LDFLAGS_SUFFIX_windows := $$($1_WINDOWS_JLI_LIB) \
 179           $(JDK_OUTPUTDIR)/objs/libjava/java.lib advapi32.lib $5, \
 180       LDFLAGS_SUFFIX_linux := -L$(JDK_OUTPUTDIR)/lib$(OPENJDK_TARGET_CPU_LIBDIR)/jli -ljli $(LIBDL) -lc, \
 181       LDFLAGS_SUFFIX_solaris := -L$(JDK_OUTPUTDIR)/lib$(OPENJDK_TARGET_CPU_LIBDIR)/jli -ljli -lthread $(LIBDL) -lc, \
 182       OBJECT_DIR := $(JDK_OUTPUTDIR)/objs/$1_objs$(OUTPUT_SUBDIR), \
 183       OUTPUT_DIR := $$($1_OUTPUT_DIR_ARG)$(OUTPUT_SUBDIR), \
 184       PROGRAM := $1, \
 185       DEBUG_SYMBOLS := true, \
 186       VERSIONINFO_RESOURCE := $$($1_VERSION_INFO_RESOURCE), \
 187       RC_FLAGS := $(RC_FLAGS) \
 188           -D "JDK_FNAME=$1$(EXE_SUFFIX)" \
 189           -D "JDK_INTERNAL_NAME=$1" \
 190           -D "JDK_FTYPE=0x1L" \
 191           $7, \
 192       MANIFEST := $(JDK_TOPDIR)/src/windows/resource/java.manifest, \
 193       CODESIGN := $$($1_CODESIGN))
 194 
 195   BUILD_LAUNCHERS += $$(BUILD_LAUNCHER_$1)
 196 
 197   ifneq (,$(filter $(OPENJDK_TARGET_OS), macosx aix))
 198     $$(BUILD_LAUNCHER_$1): $(JDK_OUTPUTDIR)/objs/libjli_static.a
 199   endif
 200 
 201   ifeq ($(OPENJDK_TARGET_OS), windows)
 202     $$(BUILD_LAUNCHER_$1): $(JDK_OUTPUTDIR)/objs/libjava/java.lib \
 203         $$($1_WINDOWS_JLI_LIB)
 204   endif
 205 endef
 206 
 207 ##########################################################################################
 208 
 209 XLIBS := $(X_LIBS) -lX11
 210 ifeq ($(OPENJDK_TARGET_OS), macosx)
 211   DPACKAGEPATH := -DPACKAGE_PATH='"$(PACKAGE_PATH)"'
 212   XLIBS :=
 213 endif
 214 
 215 ifdef OPENJDK
 216   JAVA_RC_FLAGS += -i "$(JDK_TOPDIR)/src/windows/resource/icons"
 217 else
 218   JAVA_RC_FLAGS += -i "$(JDK_TOPDIR)/src/closed/windows/native/sun/windows"
 219 endif
 220 
 221 # On windows, the debuginfo files get the same name as for java.dll. Build
 222 # into another dir and copy selectively so debuginfo for java.dll isn't
 223 # overwritten.
 224 $(eval $(call SetupLauncher,java, \
 225     -DEXPAND_CLASSPATH_WILDCARDS,,,user32.lib comctl32.lib, \
 226     $(JDK_OUTPUTDIR)/objs/jli_static.lib, $(JAVA_RC_FLAGS), \
 227     $(JDK_TOPDIR)/src/windows/resource/java.rc, $(JDK_OUTPUTDIR)/objs/java_objs,true))
 228 
 229 $(JDK_OUTPUTDIR)/bin$(OUTPUT_SUBDIR)/java$(EXE_SUFFIX): $(BUILD_LAUNCHER_java)
 230         $(MKDIR) -p $(@D)
 231         $(RM) $@
 232         $(CP) $(JDK_OUTPUTDIR)/objs/java_objs$(OUTPUT_SUBDIR)/java$(EXE_SUFFIX) $@
 233 
 234 BUILD_LAUNCHERS += $(JDK_OUTPUTDIR)/bin$(OUTPUT_SUBDIR)/java$(EXE_SUFFIX)
 235 
 236 ifeq ($(OPENJDK_TARGET_OS), windows)
 237   $(eval $(call SetupLauncher,javaw, \
 238       -DJAVAW -DEXPAND_CLASSPATH_WILDCARDS,,,user32.lib comctl32.lib, \
 239       $(JDK_OUTPUTDIR)/objs/jli_static.lib, $(JAVA_RC_FLAGS), \
 240       $(JDK_TOPDIR)/src/windows/resource/java.rc,,true))
 241 endif
 242 
 243 
 244 ifndef BUILD_HEADLESS_ONLY
 245   $(eval $(call SetupLauncher,appletviewer, \
 246       -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "sun.applet.Main"$(COMMA) }',, \
 247       $(XLIBS)))
 248 endif
 249 
 250 $(eval $(call SetupLauncher,extcheck, \
 251     -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "com.sun.tools.extcheck.Main"$(COMMA) }'))
 252 
 253 $(eval $(call SetupLauncher,idlj, \
 254     -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "com.sun.tools.corba.se.idl.toJavaPortable.Compile"$(COMMA) }'))
 255 
 256 $(eval $(call SetupLauncher,jar, \
 257     -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "sun.tools.jar.Main"$(COMMA) }'))
 258 
 259 $(eval $(call SetupLauncher,jarsigner, \
 260     -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "sun.security.tools.jarsigner.Main"$(COMMA) }'))
 261 
 262 $(eval $(call SetupLauncher,javac, \
 263     -DEXPAND_CLASSPATH_WILDCARDS \
 264     -DNEVER_ACT_AS_SERVER_CLASS_MACHINE \
 265     -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "com.sun.tools.javac.Main"$(COMMA) }'))
 266 
 267 ifeq ($(ENABLE_SJAVAC), yes)
 268   $(eval $(call SetupLauncher,sjavac, \
 269       -DEXPAND_CLASSPATH_WILDCARDS \
 270       -DNEVER_ACT_AS_SERVER_CLASS_MACHINE \
 271       -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "com.sun.tools.sjavac.Main"$(COMMA) }'))
 272 endif
 273 
 274 $(eval $(call SetupLauncher,javadoc, \
 275     -DEXPAND_CLASSPATH_WILDCARDS \
 276     -DNEVER_ACT_AS_SERVER_CLASS_MACHINE \
 277     -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "com.sun.tools.javadoc.Main"$(COMMA) }'))
 278 
 279 $(eval $(call SetupLauncher,javah, \
 280     -DEXPAND_CLASSPATH_WILDCARDS \
 281     -DNEVER_ACT_AS_SERVER_CLASS_MACHINE \
 282     -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "com.sun.tools.javah.Main"$(COMMA) }'))
 283 
 284 $(eval $(call SetupLauncher,javap, \
 285     -DEXPAND_CLASSPATH_WILDCARDS \
 286     -DNEVER_ACT_AS_SERVER_CLASS_MACHINE \
 287     -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "com.sun.tools.javap.Main"$(COMMA) }'))
 288 
 289 $(eval $(call SetupLauncher,jdeps, \
 290     -DEXPAND_CLASSPATH_WILDCARDS \
 291     -DNEVER_ACT_AS_SERVER_CLASS_MACHINE \
 292     -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "com.sun.tools.jdeps.Main"$(COMMA) }'))
 293 
 294 BUILD_LAUNCHER_jconsole_CFLAGS_windows := -DJAVAW
 295 BUILD_LAUNCHER_jconsole_LDFLAGS_windows := user32.lib
 296 
 297 $(eval $(call SetupLauncher,jconsole, \
 298     -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "-J-Djconsole.showOutputViewer"$(COMMA) "sun.tools.jconsole.JConsole"$(COMMA) }' \
 299     -DAPP_CLASSPATH='{ "/lib/jconsole.jar"$(COMMA) "/lib/tools.jar"$(COMMA) "/classes" }'))
 300 
 301 $(eval $(call SetupLauncher,jdb, \
 302     -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "com.sun.tools.example.debug.tty.TTY"$(COMMA) }' \
 303     -DAPP_CLASSPATH='{ "/lib/tools.jar"$(COMMA) "/lib/sa-jdi.jar"$(COMMA) "/classes" }'))
 304 
 305 $(eval $(call SetupLauncher,jhat, \
 306     -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "com.sun.tools.hat.Main"$(COMMA) }'))
 307 
 308 $(eval $(call SetupLauncher,jinfo, \
 309     -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) \
 310         "-J-Dsun.jvm.hotspot.debugger.useProcDebugger"$(COMMA) \
 311         "-J-Dsun.jvm.hotspot.debugger.useWindbgDebugger"$(COMMA) \
 312         "sun.tools.jinfo.JInfo"$(COMMA) }' \
 313     -DAPP_CLASSPATH='{ "/lib/tools.jar"$(COMMA) "/lib/sa-jdi.jar"$(COMMA) "/classes" }' \
 314     ,,,,,,,,,Info-privileged.plist))
 315 
 316 $(eval $(call SetupLauncher,jmap, \
 317     -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) \
 318         "-J-Dsun.jvm.hotspot.debugger.useProcDebugger"$(COMMA) \
 319         "-J-Dsun.jvm.hotspot.debugger.useWindbgDebugger"$(COMMA) \
 320         "sun.tools.jmap.JMap"$(COMMA) }' \
 321     -DAPP_CLASSPATH='{ "/lib/tools.jar"$(COMMA) "/lib/sa-jdi.jar"$(COMMA) "/classes" }' \
 322     ,,,,,,,,,Info-privileged.plist))
 323 
 324 $(eval $(call SetupLauncher,jps, \
 325     -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "sun.tools.jps.Jps"$(COMMA) }'))
 326 
 327 $(eval $(call SetupLauncher,jrunscript, \
 328     -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "com.sun.tools.script.shell.Main"$(COMMA) }'))
 329 
 330 $(eval $(call SetupLauncher,jjs, \
 331     -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "jdk.nashorn.tools.Shell"$(COMMA) }'))
 332 
 333 $(eval $(call SetupLauncher,jsadebugd, \
 334     -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "sun.jvm.hotspot.jdi.SADebugServer"$(COMMA) }' \
 335     -DAPP_CLASSPATH='{ "/lib/tools.jar"$(COMMA) "/lib/sa-jdi.jar"$(COMMA) "/classes" }' \
 336     ,,,,,,,,,Info-privileged.plist))
 337 
 338 $(eval $(call SetupLauncher,jstack, \
 339     -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) \
 340         "-J-Dsun.jvm.hotspot.debugger.useProcDebugger"$(COMMA) \
 341         "-J-Dsun.jvm.hotspot.debugger.useWindbgDebugger"$(COMMA) \
 342         "sun.tools.jstack.JStack"$(COMMA) }' \
 343     -DAPP_CLASSPATH='{ "/lib/tools.jar"$(COMMA) "/lib/sa-jdi.jar"$(COMMA) "/classes" }' \
 344     ,,,,,,,,,Info-privileged.plist))
 345 
 346 $(eval $(call SetupLauncher,jstat, \
 347     -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "sun.tools.jstat.Jstat"$(COMMA) }'))
 348 
 349 $(eval $(call SetupLauncher,jstatd, \
 350     -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "sun.tools.jstatd.Jstatd"$(COMMA) }'))
 351 
 352 $(eval $(call SetupLauncher,keytool, \
 353     -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "sun.security.tools.keytool.Main"$(COMMA) }'))
 354 
 355 $(eval $(call SetupLauncher,native2ascii, \
 356     -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "sun.tools.native2ascii.Main"$(COMMA) }'))
 357 
 358 ifndef BUILD_HEADLESS_ONLY
 359   $(eval $(call SetupLauncher,policytool, \
 360       -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "sun.security.tools.policytool.PolicyTool"$(COMMA) }',, \
 361       $(XLIBS)))
 362 endif
 363 
 364 $(eval $(call SetupLauncher,rmic, \
 365     -DEXPAND_CLASSPATH_WILDCARDS \
 366     -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "sun.rmi.rmic.Main"$(COMMA) }'))
 367 
 368 $(eval $(call SetupLauncher,schemagen, \
 369     -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "com.sun.tools.internal.jxc.SchemaGenerator"$(COMMA) }'))
 370 
 371 $(eval $(call SetupLauncher,serialver, \
 372     -DEXPAND_CLASSPATH_WILDCARDS \
 373     -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "sun.tools.serialver.SerialVer"$(COMMA) }'))
 374 
 375 $(eval $(call SetupLauncher,xjc, \
 376     -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "com.sun.tools.internal.xjc.Driver"$(COMMA) }'))
 377 
 378 $(eval $(call SetupLauncher,wsgen, \
 379     -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "com.sun.tools.internal.ws.WsGen"$(COMMA) }'))
 380 
 381 $(eval $(call SetupLauncher,wsimport, \
 382     -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "com.sun.tools.internal.ws.WsImport"$(COMMA) }'))
 383 
 384 $(eval $(call SetupLauncher,orbd, \
 385     -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) \
 386         "-J-Dcom.sun.CORBA.activation.DbDir=./orb.db"$(COMMA) \
 387         "-J-Dcom.sun.CORBA.activation.Port=1049"$(COMMA) \
 388         "-J-Dcom.sun.CORBA.POA.ORBServerId=1"$(COMMA) \
 389         "com.sun.corba.se.impl.activation.ORBD"$(COMMA) }'))
 390 
 391 $(eval $(call SetupLauncher,servertool, \
 392     -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "com.sun.corba.se.impl.activation.ServerTool"$(COMMA) }'))
 393 
 394 $(eval $(call SetupLauncher,tnameserv, \
 395     -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) \
 396         "-J-Dcom.sun.CORBA.activation.DbDir=./orb.db"$(COMMA) \
 397         "-J-Djava.util.logging.LoggingPermission=contol"$(COMMA) \
 398         "-J-Dcom.sun.CORBA.POA.ORBServerId=1"$(COMMA) \
 399         "com.sun.corba.se.impl.naming.cosnaming.TransientNameServer"$(COMMA) }'))
 400 
 401 $(eval $(call SetupLauncher,pack200, \
 402     -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "com.sun.java.util.jar.pack.Driver"$(COMMA) }'))
 403 
 404 $(eval $(call SetupLauncher,rmid, \
 405     -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "sun.rmi.server.Activation"$(COMMA) }'))
 406 
 407 $(eval $(call SetupLauncher,rmiregistry, \
 408     -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "sun.rmi.registry.RegistryImpl"$(COMMA) }'))
 409 
 410 $(eval $(call SetupLauncher,jcmd, \
 411     -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "sun.tools.jcmd.JCmd"$(COMMA) }'))
 412 
 413 ifeq ($(OPENJDK_TARGET_OS), windows)
 414   $(eval $(call SetupLauncher,kinit, \
 415       -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "sun.security.krb5.internal.tools.Kinit"$(COMMA) }'))
 416 
 417   $(eval $(call SetupLauncher,klist, \
 418       -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "sun.security.krb5.internal.tools.Klist"$(COMMA) }'))
 419 
 420   $(eval $(call SetupLauncher,ktab, \
 421       -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "sun.security.krb5.internal.tools.Ktab"$(COMMA) }'))
 422 endif
 423 
 424 ##########################################################################################
 425 # The order of the object files on the link command line affects the size of the resulting
 426 # binary (at least on linux) which causes the size to differ between old and new build.
 427 ifeq ($(USE_EXTERNAL_LIBZ), true)
 428   UNPACKEXE_CFLAGS := -DSYSTEM_ZLIB
 429   UNPACKEXE_ZIPOBJS := -lz
 430 else
 431   UNPACKEXE_CFLAGS := -I$(JDK_TOPDIR)/src/share/native/java/util/zip/zlib-1.2.5
 432   UNPACKEXE_ZIPOBJS := $(JDK_OUTPUTDIR)/objs/libzip/zcrc32$(OBJ_SUFFIX) \
 433       $(JDK_OUTPUTDIR)/objs/libzip/deflate$(OBJ_SUFFIX) \
 434       $(JDK_OUTPUTDIR)/objs/libzip/trees$(OBJ_SUFFIX) \
 435       $(JDK_OUTPUTDIR)/objs/libzip/zadler32$(OBJ_SUFFIX) \
 436       $(JDK_OUTPUTDIR)/objs/libzip/compress$(OBJ_SUFFIX) \
 437       $(JDK_OUTPUTDIR)/objs/libzip/zutil$(OBJ_SUFFIX) \
 438       $(JDK_OUTPUTDIR)/objs/libzip/inflate$(OBJ_SUFFIX) \
 439       $(JDK_OUTPUTDIR)/objs/libzip/infback$(OBJ_SUFFIX) \
 440       $(JDK_OUTPUTDIR)/objs/libzip/inftrees$(OBJ_SUFFIX) \
 441       $(JDK_OUTPUTDIR)/objs/libzip/inffast$(OBJ_SUFFIX)
 442 
 443 endif
 444 
 445 UNPACKEXE_LANG := C
 446 ifeq ($(OPENJDK_TARGET_OS), solaris)
 447   UNPACKEXE_LANG := C++
 448 endif
 449 UNPACKEXE_DEBUG_SYMBOLS := true
 450 # On windows, unpack200 is linked completely differently to all other
 451 # executables, using the compiler with the compiler arguments.
 452 # It's also linked incrementally, producing a .ilk file that needs to
 453 # be kept away.
 454 ifeq ($(OPENJDK_TARGET_OS), windows)
 455   BUILD_UNPACKEXE_LDEXE := $(CC)
 456   EXE_OUT_OPTION_save := $(EXE_OUT_OPTION)
 457   EXE_OUT_OPTION := -Fe
 458   # With the current way unpack200 is built, debug symbols aren't supported
 459   # anyway.
 460   UNPACKEXE_DEBUG_SYMBOLS :=
 461 endif
 462 
 463 # The linker on older SuSE distros (e.g. on SLES 10) complains with:
 464 # "Invalid version tag `SUNWprivate_1.1'. Only anonymous version tag is allowed in executable."
 465 # if feeded with a version script which contains named tags.
 466 ifeq ($(USING_BROKEN_SUSE_LD), yes)
 467   UNPACK_MAPFILE = $(JDK_TOPDIR)/make/mapfiles/libunpack/mapfile-vers-unpack200.anonymous
 468 else
 469   UNPACK_MAPFILE = $(JDK_TOPDIR)/make/mapfiles/libunpack/mapfile-vers-unpack200
 470 endif
 471 
 472 $(eval $(call SetupNativeCompilation,BUILD_UNPACKEXE, \
 473     SRC := $(JDK_TOPDIR)/src/share/native/com/sun/java/util/jar/pack, \
 474     EXCLUDE_FILES := jni.cpp, \
 475     LANG := $(UNPACKEXE_LANG), \
 476     OPTIMIZATION := LOW, \
 477     CFLAGS := $(UNPACKEXE_CFLAGS) $(CXXFLAGS_JDKEXE) \
 478         -DFULL, \
 479     CFLAGS_release := -DPRODUCT, \
 480     CFLAGS_linux := -fPIC, \
 481     CFLAGS_solaris := -KPIC, \
 482     CFLAGS_macosx := -fPIC, \
 483     MAPFILE := $(UNPACK_MAPFILE),\
 484     LDFLAGS := $(UNPACKEXE_ZIPOBJS), \
 485     LDFLAGS_windows := $(CXXFLAGS_JDKEXE), \
 486     LDFLAGS_posix := $(LDFLAGS_JDKEXE) $(LDFLAGS_CXX_JDK) \
 487         $(call SET_SHARED_LIBRARY_NAME,$(LIBRARY_PREFIX)unpack$(SHARED_LIBRARY_SUFFIX)) \
 488         $(call SET_SHARED_LIBRARY_ORIGIN), \
 489     LDFLAGS_linux := -lc, \
 490     LDFLAGS_solaris := $(UNPACKEXE_LDFLAGS_solaris) -lc, \
 491     LDFLAGS_SUFFIX := $(LIBCXX), \
 492     OBJECT_DIR := $(JDK_OUTPUTDIR)/objs/unpackexe$(OUTPUT_SUBDIR), \
 493     OUTPUT_DIR := $(JDK_OUTPUTDIR)/objs/unpackexe$(OUTPUT_SUBDIR), \
 494     PROGRAM := unpack200, \
 495     VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/windows/resource/version.rc, \
 496     RC_FLAGS := $(RC_FLAGS) \
 497         -D "JDK_FNAME=unpack200.exe" \
 498         -D "JDK_INTERNAL_NAME=unpack200" \
 499         -D "JDK_FTYPE=0x1L", \
 500     DEBUG_SYMBOLS := $(UNPACKEXE_DEBUG_SYMBOLS), \
 501     MANIFEST := $(JDK_TOPDIR)/src/windows/resource/unpack200_proto.exe.manifest))
 502 
 503 ifeq ($(OPENJDK_TARGET_OS), windows)
 504   EXE_OUT_OPTION := $(EXE_OUT_OPTION_save)
 505 endif
 506 
 507 ifneq ($(USE_EXTERNAL_LIBZ), true)
 508 
 509   $(BUILD_UNPACKEXE): $(UNPACKEXE_ZIPOBJS)
 510 
 511 endif
 512 
 513 # Build into object dir and copy executable afterwards to avoid .ilk file in
 514 # image. The real fix would be clean up linking of unpack200 using
 515 # -link -incremental:no
 516 # like all other launchers.
 517 $(JDK_OUTPUTDIR)/bin$(OUTPUT_SUBDIR)/unpack200$(EXE_SUFFIX): $(BUILD_UNPACKEXE)
 518         $(call install-file)
 519 
 520 BUILD_LAUNCHERS += $(JDK_OUTPUTDIR)/bin$(OUTPUT_SUBDIR)/unpack200$(EXE_SUFFIX)
 521 
 522 ##########################################################################################
 523 
 524 
 525 BUILD_JEXEC :=
 526 BUILD_JEXEC_SRC :=
 527 BUILD_JEXEC_INC :=
 528 BUILD_JEXEC_DST_DIR := $(JDK_OUTPUTDIR)/lib$(OPENJDK_TARGET_CPU_LIBDIR)
 529 
 530 #
 531 # UNHANDLED:
 532 # - COMPILE_APPROACH = normal
 533 #
 534 
 535 #
 536 # jdk/make/java/Makefile
 537 #
 538 ifeq ($(OPENJDK_TARGET_OS), solaris)
 539   ifeq ($(OPENJDK_TARGET_CPU_BITS), 32)
 540     BUILD_JEXEC := 1
 541   endif
 542 endif
 543 
 544 ifeq ($(OPENJDK_TARGET_OS), linux)
 545   BUILD_JEXEC := 1
 546 endif # OPENJDK_TARGET_OS
 547 
 548 #
 549 # jdk/make/java/jexec/Makefile
 550 #
 551 ifeq ($(BUILD_JEXEC), 1)
 552 
 553   ifeq ($(OPENJDK_TARGET_OS), windows)
 554   else ifeq ($(OPENJDK_TARGET_OS), macosx)
 555     BUILD_JEXEC_SRC := $(JDK_TOPDIR)/src/macosx/bin
 556   else
 557     BUILD_JEXEC_SRC := $(JDK_TOPDIR)/src/solaris/bin
 558   endif
 559 
 560   ifeq ($(OPENJDK_TARGET_OS), linux)
 561     BUILD_JEXEC_DST_DIR := $(JDK_OUTPUTDIR)/lib
 562     BUILD_JEXEC_INC += -I$(JDK_TOPDIR)/src/share/bin
 563   endif
 564 endif
 565 
 566 #
 567 # Note that the two Makefile's seems to contradict each other,
 568 # and that src/macosx/bin/jexec.c seems unused
 569 #
 570 ifneq ($(BUILD_JEXEC_SRC), )
 571   $(eval $(call SetupNativeCompilation,BUILD_JEXEC, \
 572       SRC := $(BUILD_JEXEC_SRC), \
 573       INCLUDE_FILES := jexec.c, \
 574       LANG := C, \
 575       OPTIMIZATION := LOW, \
 576       CFLAGS := $(CFLAGS_JDKEXE) \
 577           $(BUILD_JEXEC_INC), \
 578       CFLAGS_linux := -fPIC, \
 579       CFLAGS_solaris := -KPIC, \
 580       LDFLAGS := $(LDFLAGS_JDKEXE) \
 581           $(call SET_SHARED_LIBRARY_NAME,$(LIBRARY_PREFIX)$(SHARED_LIBRARY_SUFFIX)), \
 582       OBJECT_DIR := $(JDK_OUTPUTDIR)/objs/jexec_obj, \
 583       OUTPUT_DIR := $(BUILD_JEXEC_DST_DIR), \
 584       DEBUG_SYMBOLS := true, \
 585       PROGRAM := jexec))
 586 
 587   BUILD_LAUNCHERS += $(BUILD_JEXEC)
 588 endif
 589 
 590 ##########################################################################################
 591 
 592 #
 593 # The java-rmi.cgi script in bin/ only gets delivered in certain situations
 594 #
 595 JAVA_RMI_CGI := $(JDK_OUTPUTDIR)/bin$(OUTPUT_SUBDIR)/java-rmi.cgi
 596 ifeq ($(OPENJDK_TARGET_OS), linux)
 597   BUILD_LAUNCHERS += $(JAVA_RMI_CGI)
 598 endif
 599 ifeq ($(OPENJDK_TARGET_OS), solaris)
 600   BUILD_LAUNCHERS += $(JAVA_RMI_CGI)
 601 endif
 602 
 603 # TODO:
 604 # On windows java-rmi.cgi shouldn't be bundled since Java 1.2, but has been built all
 605 # this time anyway. Since jdk6, it has been built from the wrong source and resulted
 606 # in a (almost) copy of the standard java launcher named "java-rmi.exe" ending up in
 607 # the final images bin dir. This weird behavior is mimicked here in the converted
 608 # makefiles for now. Should probably just be deleted.
 609 # http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6512052
 610 ifeq ($(OPENJDK_TARGET_OS), windows)
 611   $(eval $(call SetupLauncher,java-rmi, , \
 612       $(call SET_SHARED_LIBRARY_MAPFILE,$(JDK_TOPDIR)/make/java/main/java/mapfile-$(OPENJDK_TARGET_CPU))))
 613 else
 614   $(JAVA_RMI_CGI): $(JDK_TOPDIR)/src/solaris/bin/java-rmi.cgi.sh
 615         $(call install-file)
 616         $(CHMOD) a+x $@
 617 endif
 618 
 619 ##########################################################################################
 620 
 621 BUILD_JSPAWNHELPER :=
 622 BUILD_JSPAWNHELPER_SRC := $(JDK_TOPDIR)/src/solaris/native/java/lang
 623 BUILD_JSPAWNHELPER_DST_DIR := $(JDK_OUTPUTDIR)/lib$(OPENJDK_TARGET_CPU_LIBDIR)
 624 LINK_JSPAWNHELPER_OBJECTS := $(JDK_OUTPUTDIR)/objs/libjava/childproc.o
 625 LINK_JSPAWNHELPER_FLAGS :=
 626 
 627 ifneq ($(findstring $(OPENJDK_TARGET_OS), macosx solaris aix), )
 628   BUILD_JSPAWNHELPER := 1
 629 endif
 630 
 631 ifeq ($(OPENJDK_TARGET_OS), macosx)
 632   BUILD_JSPAWNHELPER_DST_DIR := $(JDK_OUTPUTDIR)/lib
 633 endif
 634 
 635 ifeq ($(OPENJDK_TARGET_CPU_BITS), 64)
 636   LINK_JSPAWNHELPER_FLAGS += $(COMPILER_TARGET_BITS_FLAG)64
 637 endif
 638 
 639 ifeq ($(BUILD_JSPAWNHELPER), 1)
 640   $(eval $(call SetupNativeCompilation,BUILD_JSPAWNHELPER, \
 641       SRC := $(BUILD_JSPAWNHELPER_SRC), \
 642       INCLUDE_FILES := jspawnhelper.c, \
 643       LANG := C, \
 644       OPTIMIZATION := LOW, \
 645       CFLAGS := $(CFLAGS_JDKEXE), \
 646       LDFLAGS := $(LDFLAGS_JDKEXE) $(LINK_JSPAWNHELPER_FLAGS), \
 647       LDFLAGS_SUFFIX := $(LINK_JSPAWNHELPER_OBJECTS), \
 648       OBJECT_DIR := $(JDK_OUTPUTDIR)/objs/jspawnhelper, \
 649       OUTPUT_DIR := $(BUILD_JSPAWNHELPER_DST_DIR), \
 650       PROGRAM := jspawnhelper))
 651 
 652   $(BUILD_JSPAWNHELPER): $(LINK_JSPAWNHELPER_OBJECTS)
 653 
 654   BUILD_LAUNCHERS += $(BUILD_JSPAWNHELPER)
 655 endif
 656 
 657 ##########################################################################################
 658 # jabswitch
 659 
 660 ifndef OPENJDK
 661   ifeq ($(OPENJDK_TARGET_OS), windows)
 662 
 663     $(eval $(call SetupNativeCompilation,BUILD_JABSWITCH, \
 664         SRC := $(JDK_TOPDIR)/src/closed/windows/native/sun/bridge, \
 665         INCLUDE_FILES := jabswitch.cpp, \
 666         LANG := C++, \
 667         CFLAGS := $(filter-out -Zc:wchar_t-, $(CFLAGS_JDKEXE)) -Zc:wchar_t \
 668             -analyze- -Od -Gd -D_WINDOWS \
 669             -D_UNICODE -DUNICODE -RTC1 -EHsc, \
 670         LDFLAGS := $(LDFLAGS_JDKEXE) \
 671             Advapi32.lib Version.lib User32.lib, \
 672         OBJECT_DIR := $(JDK_OUTPUTDIR)/objs/jabswitch, \
 673         OUTPUT_DIR := $(JDK_OUTPUTDIR)/bin, \
 674         PROGRAM := jabswitch, \
 675         DEBUG_SYMBOLS := true, \
 676         VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/closed/windows/native/sun/bridge/AccessBridgeStatusWindow.rc, \
 677         RC_FLAGS := $(RC_FLAGS) \
 678             -D "JDK_FNAME=jabswitch.exe" \
 679             -D "JDK_INTERNAL_NAME=jabswitch" \
 680             -D "JDK_FTYPE=0x01L", \
 681         MANIFEST := $(JDK_TOPDIR)/src/closed/windows/native/sun/bridge/jabswitch.manifest))
 682 
 683     BUILD_LAUNCHERS += $(BUILD_JABSWITCH)
 684 
 685   endif
 686 endif
 687 
 688 ##########################################################################################
 689 
 690 $(BUILD_LAUNCHERS): $(JDK_TOPDIR)/make/CompileLaunchers.gmk
 691 
 692 all: $(BUILD_LAUNCHERS)
 693 
 694 .PHONY: all