1 #
   2 # Copyright (c) 2011, 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.  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. Only used on windows.
  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 ifeq ($(OPENJDK_TARGET_CPU_ARCH), sparc)
 446   UNPACKEXE_CFLAGS += -xregs=no%appl
 447   UNPACKEXE_LDFLAGS_solaris += -xmemalign=4s
 448 endif
 449 
 450 UNPACKEXE_LANG := C
 451 ifeq ($(OPENJDK_TARGET_OS), solaris)
 452   UNPACKEXE_LANG := C++
 453 endif
 454 UNPACKEXE_DEBUG_SYMBOLS := true
 455 # On windows, unpack200 is linked completely differently to all other
 456 # executables, using the compiler with the compiler arguments.
 457 # It's also linked incrementally, producing a .ilk file that needs to
 458 # be kept away.
 459 ifeq ($(OPENJDK_TARGET_OS), windows)
 460   BUILD_UNPACKEXE_LDEXE := $(CC)
 461   EXE_OUT_OPTION_save := $(EXE_OUT_OPTION)
 462   EXE_OUT_OPTION := -Fe
 463   # With the current way unpack200 is built, debug symbols aren't supported
 464   # anyway.
 465   UNPACKEXE_DEBUG_SYMBOLS :=
 466 endif
 467 
 468 # The linker on older SuSE distros (e.g. on SLES 10) complains with:
 469 # "Invalid version tag `SUNWprivate_1.1'. Only anonymous version tag is allowed in executable."
 470 # if feeded with a version script which contains named tags.
 471 ifeq ($(USING_BROKEN_SUSE_LD), yes)
 472   UNPACK_MAPFILE = $(JDK_TOPDIR)/make/mapfiles/libunpack/mapfile-vers-unpack200.anonymous
 473 else
 474   UNPACK_MAPFILE = $(JDK_TOPDIR)/make/mapfiles/libunpack/mapfile-vers-unpack200
 475 endif
 476 
 477 $(eval $(call SetupNativeCompilation,BUILD_UNPACKEXE, \
 478     SRC := $(JDK_TOPDIR)/src/share/native/com/sun/java/util/jar/pack, \
 479     EXCLUDE_FILES := jni.cpp, \
 480     LANG := $(UNPACKEXE_LANG), \
 481     OPTIMIZATION := LOW, \
 482     CFLAGS := $(UNPACKEXE_CFLAGS) $(CXXFLAGS_JDKEXE) \
 483         -DFULL, \
 484     CFLAGS_release := -DPRODUCT, \
 485     CFLAGS_linux := -fPIC, \
 486     CFLAGS_solaris := -KPIC, \
 487     CFLAGS_macosx := -fPIC, \
 488     MAPFILE := $(UNPACK_MAPFILE),\
 489     LDFLAGS := $(UNPACKEXE_ZIPOBJS), \
 490     LDFLAGS_windows := $(CXXFLAGS_JDKEXE), \
 491     LDFLAGS_posix := $(LDFLAGS_JDKEXE) $(LDFLAGS_CXX_JDK) \
 492         $(call SET_SHARED_LIBRARY_NAME,$(LIBRARY_PREFIX)unpack$(SHARED_LIBRARY_SUFFIX)) \
 493         $(call SET_SHARED_LIBRARY_ORIGIN), \
 494     LDFLAGS_linux := -lc, \
 495     LDFLAGS_solaris := $(UNPACKEXE_LDFLAGS_solaris) -lc, \
 496     LDFLAGS_SUFFIX := $(LIBCXX), \
 497     OBJECT_DIR := $(JDK_OUTPUTDIR)/objs/unpackexe$(OUTPUT_SUBDIR), \
 498     OUTPUT_DIR := $(JDK_OUTPUTDIR)/objs/unpackexe$(OUTPUT_SUBDIR), \
 499     PROGRAM := unpack200, \
 500     VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/windows/resource/version.rc, \
 501     RC_FLAGS := $(RC_FLAGS) \
 502         -D "JDK_FNAME=unpack200.exe" \
 503         -D "JDK_INTERNAL_NAME=unpack200" \
 504         -D "JDK_FTYPE=0x1L", \
 505     DEBUG_SYMBOLS := $(UNPACKEXE_DEBUG_SYMBOLS), \
 506     MANIFEST := $(JDK_TOPDIR)/src/windows/resource/unpack200_proto.exe.manifest))
 507 
 508 ifeq ($(OPENJDK_TARGET_OS), windows)
 509   EXE_OUT_OPTION := $(EXE_OUT_OPTION_save)
 510 endif
 511 
 512 ifneq ($(USE_EXTERNAL_LIBZ), true)
 513 
 514   $(BUILD_UNPACKEXE): $(UNPACKEXE_ZIPOBJS)
 515 
 516 endif
 517 
 518 # Build into object dir and copy executable afterwards to avoid .ilk file in
 519 # image. The real fix would be clean up linking of unpack200 using
 520 # -link -incremental:no
 521 # like all other launchers.
 522 $(JDK_OUTPUTDIR)/bin$(OUTPUT_SUBDIR)/unpack200$(EXE_SUFFIX): $(BUILD_UNPACKEXE)
 523         $(call install-file)
 524 
 525 BUILD_LAUNCHERS += $(JDK_OUTPUTDIR)/bin$(OUTPUT_SUBDIR)/unpack200$(EXE_SUFFIX)
 526 
 527 ##########################################################################################
 528 
 529 
 530 BUILD_JEXEC :=
 531 BUILD_JEXEC_SRC :=
 532 BUILD_JEXEC_INC :=
 533 BUILD_JEXEC_DST_DIR := $(JDK_OUTPUTDIR)/lib$(OPENJDK_TARGET_CPU_LIBDIR)
 534 
 535 #
 536 # UNHANDLED:
 537 # - COMPILE_APPROACH = normal
 538 #
 539 
 540 #
 541 # jdk/make/java/Makefile
 542 #
 543 ifeq ($(OPENJDK_TARGET_OS), solaris)
 544   ifeq ($(OPENJDK_TARGET_CPU_BITS), 32)
 545     BUILD_JEXEC := 1
 546   endif
 547 endif
 548 
 549 ifeq ($(OPENJDK_TARGET_OS), linux)
 550   BUILD_JEXEC := 1
 551 endif # OPENJDK_TARGET_OS
 552 
 553 #
 554 # jdk/make/java/jexec/Makefile
 555 #
 556 ifeq ($(BUILD_JEXEC), 1)
 557 
 558   ifeq ($(OPENJDK_TARGET_OS), windows)
 559   else ifeq ($(OPENJDK_TARGET_OS), macosx)
 560     BUILD_JEXEC_SRC := $(JDK_TOPDIR)/src/macosx/bin
 561   else
 562     BUILD_JEXEC_SRC := $(JDK_TOPDIR)/src/solaris/bin
 563   endif
 564 
 565   ifeq ($(OPENJDK_TARGET_OS), linux)
 566     BUILD_JEXEC_DST_DIR := $(JDK_OUTPUTDIR)/lib
 567     BUILD_JEXEC_INC += -I$(JDK_TOPDIR)/src/share/bin
 568   endif
 569 endif
 570 
 571 #
 572 # Note that the two Makefile's seems to contradict each other,
 573 # and that src/macosx/bin/jexec.c seems unused
 574 #
 575 ifneq ($(BUILD_JEXEC_SRC), )
 576   $(eval $(call SetupNativeCompilation,BUILD_JEXEC, \
 577       SRC := $(BUILD_JEXEC_SRC), \
 578       INCLUDE_FILES := jexec.c, \
 579       LANG := C, \
 580       OPTIMIZATION := LOW, \
 581       CFLAGS := $(CFLAGS_JDKEXE) \
 582           $(BUILD_JEXEC_INC), \
 583       CFLAGS_linux := -fPIC, \
 584       CFLAGS_solaris := -KPIC, \
 585       LDFLAGS := $(LDFLAGS_JDKEXE) \
 586           $(call SET_SHARED_LIBRARY_NAME,$(LIBRARY_PREFIX)$(SHARED_LIBRARY_SUFFIX)), \
 587       OBJECT_DIR := $(JDK_OUTPUTDIR)/objs/jexec_obj, \
 588       OUTPUT_DIR := $(BUILD_JEXEC_DST_DIR), \
 589       DEBUG_SYMBOLS := true, \
 590       PROGRAM := jexec))
 591 
 592   BUILD_LAUNCHERS += $(BUILD_JEXEC)
 593 endif
 594 
 595 ##########################################################################################
 596 
 597 #
 598 # The java-rmi.cgi script in bin/ only gets delivered in certain situations
 599 #
 600 JAVA_RMI_CGI := $(JDK_OUTPUTDIR)/bin$(OUTPUT_SUBDIR)/java-rmi.cgi
 601 ifeq ($(OPENJDK_TARGET_OS), linux)
 602   BUILD_LAUNCHERS += $(JAVA_RMI_CGI)
 603 endif
 604 ifeq ($(OPENJDK_TARGET_OS), solaris)
 605   BUILD_LAUNCHERS += $(JAVA_RMI_CGI)
 606 endif
 607 
 608 # TODO:
 609 # On windows java-rmi.cgi shouldn't be bundled since Java 1.2, but has been built all
 610 # this time anyway. Since jdk6, it has been built from the wrong source and resulted
 611 # in a (almost) copy of the standard java launcher named "java-rmi.exe" ending up in
 612 # the final images bin dir. This weird behavior is mimicked here in the converted
 613 # makefiles for now. Should probably just be deleted.
 614 # http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6512052
 615 ifeq ($(OPENJDK_TARGET_OS), windows)
 616   $(eval $(call SetupLauncher,java-rmi, , \
 617       $(call SET_SHARED_LIBRARY_MAPFILE,$(JDK_TOPDIR)/make/java/main/java/mapfile-$(OPENJDK_TARGET_CPU))))
 618 else
 619   $(JAVA_RMI_CGI): $(JDK_TOPDIR)/src/solaris/bin/java-rmi.cgi.sh
 620         $(call install-file)
 621         $(CHMOD) a+x $@
 622 endif
 623 
 624 ##########################################################################################
 625 
 626 BUILD_JSPAWNHELPER :=
 627 BUILD_JSPAWNHELPER_SRC := $(JDK_TOPDIR)/src/solaris/native/java/lang
 628 BUILD_JSPAWNHELPER_DST_DIR := $(JDK_OUTPUTDIR)/lib$(OPENJDK_TARGET_CPU_LIBDIR)
 629 LINK_JSPAWNHELPER_OBJECTS := $(JDK_OUTPUTDIR)/objs/libjava/childproc.o
 630 LINK_JSPAWNHELPER_FLAGS :=
 631 
 632 ifneq ($(findstring $(OPENJDK_TARGET_OS), macosx solaris aix), )
 633   BUILD_JSPAWNHELPER := 1
 634 endif
 635 
 636 ifeq ($(OPENJDK_TARGET_OS), macosx)
 637   BUILD_JSPAWNHELPER_DST_DIR := $(JDK_OUTPUTDIR)/lib
 638 endif
 639 
 640 ifeq ($(OPENJDK_TARGET_CPU_BITS), 64)
 641   LINK_JSPAWNHELPER_FLAGS += $(COMPILER_TARGET_BITS_FLAG)64
 642 endif
 643 
 644 ifeq ($(BUILD_JSPAWNHELPER), 1)
 645   $(eval $(call SetupNativeCompilation,BUILD_JSPAWNHELPER, \
 646       SRC := $(BUILD_JSPAWNHELPER_SRC), \
 647       INCLUDE_FILES := jspawnhelper.c, \
 648       LANG := C, \
 649       OPTIMIZATION := LOW, \
 650       CFLAGS := $(CFLAGS_JDKEXE), \
 651       LDFLAGS := $(LDFLAGS_JDKEXE) $(LINK_JSPAWNHELPER_FLAGS), \
 652       LDFLAGS_SUFFIX := $(LINK_JSPAWNHELPER_OBJECTS), \
 653       OBJECT_DIR := $(JDK_OUTPUTDIR)/objs/jspawnhelper, \
 654       OUTPUT_DIR := $(BUILD_JSPAWNHELPER_DST_DIR), \
 655       PROGRAM := jspawnhelper))
 656 
 657   $(BUILD_JSPAWNHELPER): $(LINK_JSPAWNHELPER_OBJECTS)
 658 
 659   BUILD_LAUNCHERS += $(BUILD_JSPAWNHELPER)
 660 endif
 661 
 662 ##########################################################################################
 663 # jabswitch
 664 
 665 ifndef OPENJDK
 666   ifeq ($(OPENJDK_TARGET_OS), windows)
 667 
 668     $(eval $(call SetupNativeCompilation,BUILD_JABSWITCH, \
 669         SRC := $(JDK_TOPDIR)/src/closed/windows/native/sun/bridge, \
 670         INCLUDE_FILES := jabswitch.cpp, \
 671         LANG := C++, \
 672         CFLAGS := $(filter-out -Zc:wchar_t-, $(CFLAGS_JDKEXE)) -Zc:wchar_t \
 673             -analyze- -Od -Gd -D_WINDOWS \
 674             -D_UNICODE -DUNICODE -RTC1 -EHsc, \
 675         LDFLAGS := $(LDFLAGS_JDKEXE) \
 676             Advapi32.lib Version.lib User32.lib, \
 677         OBJECT_DIR := $(JDK_OUTPUTDIR)/objs/jabswitch, \
 678         OUTPUT_DIR := $(JDK_OUTPUTDIR)/bin, \
 679         PROGRAM := jabswitch, \
 680         DEBUG_SYMBOLS := true, \
 681         VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/closed/windows/native/sun/bridge/AccessBridgeStatusWindow.rc, \
 682         RC_FLAGS := $(RC_FLAGS), \
 683         MANIFEST := $(JDK_TOPDIR)/src/closed/windows/native/sun/bridge/jabswitch.manifest))
 684 
 685     BUILD_LAUNCHERS += $(BUILD_JABSWITCH)
 686 
 687   endif
 688 endif
 689 
 690 ##########################################################################################
 691 
 692 $(BUILD_LAUNCHERS): $(JDK_TOPDIR)/make/CompileLaunchers.gmk
 693 
 694 all: $(BUILD_LAUNCHERS)
 695 
 696 .PHONY: all