jdk/make/launcher/LauncherCommon.gmk
changeset 33523 eb067bcd9414
parent 33406 4680f7495292
child 33666 7908508d9e1c
child 34013 79c21cd6fcfc
equal deleted inserted replaced
33522:8d13fc52c3c4 33523:eb067bcd9414
    26 include NativeCompilation.gmk
    26 include NativeCompilation.gmk
    27 
    27 
    28 # Prepare the find cache.
    28 # Prepare the find cache.
    29 $(eval $(call FillCacheFind, $(JDK_TOPDIR)/src/java.base/share/native/launcher))
    29 $(eval $(call FillCacheFind, $(JDK_TOPDIR)/src/java.base/share/native/launcher))
    30 
    30 
    31 # When building a legacy overlay image (on solaris 64 bit), the launchers
       
    32 # need to be built with a different rpath and a different output dir.
       
    33 ifeq ($(OVERLAY_IMAGES), true)
       
    34   ORIGIN_ROOT := /../..
       
    35   OUTPUT_SUBDIR := $(OPENJDK_TARGET_CPU_ISADIR)
       
    36 else
       
    37   ORIGIN_ROOT := /..
       
    38 endif
       
    39 
       
    40 ifeq ($(OPENJDK_TARGET_OS), macosx)
    31 ifeq ($(OPENJDK_TARGET_OS), macosx)
    41   ORIGIN_ARG := $(call SET_EXECUTABLE_ORIGIN)
    32   ORIGIN_ARG := $(call SET_EXECUTABLE_ORIGIN)
    42 else
    33 else
    43   ORIGIN_ARG := $(call SET_EXECUTABLE_ORIGIN,$(ORIGIN_ROOT)/lib$(OPENJDK_TARGET_CPU_LIBDIR)/jli)
    34   ORIGIN_ARG := $(call SET_EXECUTABLE_ORIGIN,/../lib$(OPENJDK_TARGET_CPU_LIBDIR)/jli)
    44 endif
    35 
    45 
    36   # Applications expect to be able to link against libjawt without invoking
    46 #
    37   # System.loadLibrary("jawt") first. This was the behaviour described in the
    47 # Applications expect to be able to link against libjawt without invoking
    38   # devloper documentation of JAWT and what worked with OpenJDK6.
    48 # System.loadLibrary("jawt") first. This was the behaviour described in the
    39   ifneq ($(findstring $(OPENJDK_TARGET_OS), linux solaris), )
    49 # devloper documentation of JAWT and what worked with OpenJDK6.
    40     ORIGIN_ARG += $(call SET_EXECUTABLE_ORIGIN,/../lib$(OPENJDK_TARGET_CPU_LIBDIR))
    50 #
    41   endif
    51 ifneq ($(findstring $(OPENJDK_TARGET_OS), linux solaris), )
       
    52   ORIGIN_ARG += $(call SET_EXECUTABLE_ORIGIN,$(ORIGIN_ROOT)/lib$(OPENJDK_TARGET_CPU_LIBDIR))
       
    53 endif
    42 endif
    54 
    43 
    55 LAUNCHER_SRC := $(JDK_TOPDIR)/src/java.base/share/native/launcher
    44 LAUNCHER_SRC := $(JDK_TOPDIR)/src/java.base/share/native/launcher
    56 LAUNCHER_CFLAGS := -I$(JDK_TOPDIR)/src/java.base/share/native/launcher \
    45 LAUNCHER_CFLAGS := -I$(JDK_TOPDIR)/src/java.base/share/native/launcher \
    57     -I$(JDK_TOPDIR)/src/java.base/share/native/libjli \
    46     -I$(JDK_TOPDIR)/src/java.base/share/native/libjli \
    59     -I$(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS)/native/libjli \
    48     -I$(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS)/native/libjli \
    60     #
    49     #
    61 GLOBAL_VERSION_INFO_RESOURCE := $(JDK_TOPDIR)/src/java.base/windows/native/common/version.rc
    50 GLOBAL_VERSION_INFO_RESOURCE := $(JDK_TOPDIR)/src/java.base/windows/native/common/version.rc
    62 JAVA_VERSION_INFO_RESOURCE := $(JDK_TOPDIR)/src/java.base/windows/native/launcher/java.rc
    51 JAVA_VERSION_INFO_RESOURCE := $(JDK_TOPDIR)/src/java.base/windows/native/launcher/java.rc
    63 MACOSX_PLIST_DIR := $(JDK_TOPDIR)/src/java.base/macosx/native/launcher
    52 MACOSX_PLIST_DIR := $(JDK_TOPDIR)/src/java.base/macosx/native/launcher
    64 # Until the shuffle is permanent, we can't add this in configure
       
    65 CFLAGS_JDKEXE := $(filter-out %javavm/export, $(CFLAGS_JDKEXE))
       
    66 CFLAGS_JDKEXE += -I$(JDK_TOPDIR)/src/java.base/share/native/include \
       
    67     -I$(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/native/include
       
    68 CXXFLAGS_JDKEXE := $(filter-out %javavm/export, $(CXXFLAGS_JDKEXE))
       
    69 CXXFLAGS_JDKEXE += -I$(JDK_TOPDIR)/src/java.base/share/native/include \
       
    70     -I$(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_TYPE)/native/include
       
    71 JAVA_MANIFEST := $(JDK_TOPDIR)/src/java.base/windows/native/launcher/java.manifest
    53 JAVA_MANIFEST := $(JDK_TOPDIR)/src/java.base/windows/native/launcher/java.manifest
    72 
    54 
    73 define SetupLauncher
    55 ################################################################################
    74   # TODO: Fix mapfile on solaris. Won't work with ld as linker.
    56 # Build standard launcher.
    75   # Parameter 1 is the name of the launcher (java, javac, jar...)
    57 
    76   # Parameter 2 is extra CFLAGS
    58 # Setup make rules for building a standard launcher.
    77   # Parameter 3 is extra LDFLAGS
    59 #
    78   # Parameter 4 is extra LIBS_unix
    60 # Parameter 1 is the name of the rule. This name is used as variable prefix,
    79   # Parameter 5 is extra LIBS_windows
    61 # and the targets generated are listed in a variable by that name. It is also
    80   # Parameter 6 is optional Windows JLI library (full path)
    62 # used as the name of the executable.
    81   # Parameter 7 is optional Windows resource (RC) flags
    63 #
    82   # Parameter 8 is optional Windows version resource file (.rc)
    64 # Remaining parameters are named arguments. These include:
    83   # Parameter 9 is different output dir
    65 # MAIN_CLASS   The Java main class to launch
    84   # Parameter 10 if set, link statically with c runtime on windows.
    66 # JAVA_ARGS   Processed into a -DJAVA_ARGS C flag
    85   # Parameter 11 if set, override plist file on macosx.
    67 # APP_CLASSPATH   Processed into a -DAPP_CLASSPATH C flag
    86   $(call LogSetupMacroEntry,SetupLauncher($1),$2,$3,$4,$5,$6,$7,$8,$9,$(10),$(11))
    68 # CFLAGS   Additional CFLAGS
    87   $(if $(13),$(error Internal makefile error: Too many arguments to SetupLauncher, please update CompileLaunchers.gmk))
    69 # CFLAGS_windows   Additional CFLAGS_windows
    88 
    70 # LIBS_unix   Additional LIBS_unix
    89   $1_WINDOWS_JLI_LIB := $(SUPPORT_OUTPUTDIR)/native/java.base/libjli/jli.lib
    71 # LIBS_windows   Additional LIBS_windows
    90   ifneq ($6, )
    72 # LDFLAGS_solaris Additional LDFLAGS_solaris
    91     $1_WINDOWS_JLI_LIB := $6
    73 # RC_FLAGS   Additional RC_FLAGS
    92   endif
    74 # MACOSX_SIGNED   On macosx, sign this binary
    93   $1_VERSION_INFO_RESOURCE := $(GLOBAL_VERSION_INFO_RESOURCE)
    75 # WINDOWS_STATIC_LINK   On windows, link statically with C runtime and libjli.
    94   ifneq ($8, )
    76 # OPTIMIZATION   Override default optimization level (LOW)
    95     $1_VERSION_INFO_RESOURCE := $8
    77 # OUTPUT_DIR   Override default output directory
    96   endif
    78 # VERSION_INFO_RESOURCE   Override default Windows resource file
    97 
    79 # NO_JAVA_MS   Do not add -ms8m to JAVA_ARGS.
    98   $1_LDFLAGS := $3
    80 SetupBuildLauncher = $(NamedParamsMacroTemplate)
       
    81 define SetupBuildLauncherBody
       
    82   # Setup default values (unless overridden)
       
    83   ifeq ($$($1_VERSION_INFO_RESOURCE), )
       
    84     $1_VERSION_INFO_RESOURCE := $(GLOBAL_VERSION_INFO_RESOURCE)
       
    85   endif
       
    86 
       
    87   ifeq ($$($1_OUTPUT_DIR), )
       
    88     $1_OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/modules_cmds/$(MODULE)
       
    89   endif
       
    90 
       
    91   ifeq ($$($1_OPTIMIZATION), )
       
    92     $1_OPTIMIZATION := LOW
       
    93   endif
       
    94 
       
    95   ifneq ($$($1_NO_JAVA_MS), true)
       
    96     # The norm is to append -ms8m, unless otherwise instructed.
       
    97     $1_JAVA_ARGS += -ms8m
       
    98   endif
       
    99 
       
   100   ifneq ($$($1_JAVA_ARGS), )
       
   101     $1_JAVA_ARGS_STR := '{ $$(strip $$(foreach a, \
       
   102         $$(addprefix -J, $$($1_JAVA_ARGS)) $$($1_MAIN_CLASS), "$$a"$(COMMA) )) }'
       
   103     $1_CFLAGS += -DJAVA_ARGS=$$($1_JAVA_ARGS_STR)
       
   104   endif
       
   105 
       
   106   ifneq ($$($1_APP_CLASSPATH), )
       
   107     $1_APP_CLASSPATH_STR := '{ $$(strip $$(foreach a, \
       
   108         $$($1_APP_CLASSPATH), "$$a"$(COMMA) )) }'
       
   109     # Remove the trailing comma
       
   110     $1_APP_CLASSPATH_STR := $$(strip $$(subst $$(COMMA) }', }', \
       
   111         $$($1_APP_CLASSPATH_STR)))
       
   112     $1_CFLAGS += -DAPP_CLASSPATH=$$($1_APP_CLASSPATH_STR)
       
   113   endif
       
   114 
    99   $1_LIBS :=
   115   $1_LIBS :=
   100   ifeq ($(OPENJDK_TARGET_OS), macosx)
   116   ifeq ($(OPENJDK_TARGET_OS), macosx)
   101     $1_PLIST_FILE := Info-cmdline.plist
   117     ifeq ($$($1_MACOSX_SIGNED), true)
   102     ifneq ($(11), )
   118       $1_PLIST_FILE := Info-privileged.plist
   103       $1_PLIST_FILE := $(11)
       
   104       ifneq ($$(findstring privileged, $$($1_PLIST_FILE)), )
       
   105         $1_CODESIGN := true
   119         $1_CODESIGN := true
   106       endif
   120     else
       
   121       $1_PLIST_FILE := Info-cmdline.plist
   107     endif
   122     endif
   108 
   123 
       
   124     $1_CFLAGS += -DPACKAGE_PATH='"$(PACKAGE_PATH)"'
   109     $1_LDFLAGS += -Wl,-all_load $(SUPPORT_OUTPUTDIR)/native/java.base/libjli_static.a \
   125     $1_LDFLAGS += -Wl,-all_load $(SUPPORT_OUTPUTDIR)/native/java.base/libjli_static.a \
   110         -sectcreate __TEXT __info_plist $(MACOSX_PLIST_DIR)/$$($1_PLIST_FILE)
   126         -sectcreate __TEXT __info_plist $(MACOSX_PLIST_DIR)/$$($1_PLIST_FILE)
   111     $1_LIBS += -framework Cocoa -framework Security \
   127     $1_LIBS += -framework Cocoa -framework Security \
   112         -framework ApplicationServices
   128         -framework ApplicationServices
   113   endif
   129   endif
   119 
   135 
   120   ifeq ($(USE_EXTERNAL_LIBZ), true)
   136   ifeq ($(USE_EXTERNAL_LIBZ), true)
   121     $1_LIBS += -lz
   137     $1_LIBS += -lz
   122   endif
   138   endif
   123 
   139 
   124   $1_OUTPUT_DIR_ARG := $9
   140   ifeq ($$($1_WINDOWS_STATIC_LINK), true)
   125   ifeq (, $$($1_OUTPUT_DIR_ARG))
   141     $1_CFLAGS += $(filter-out -MD, $(CFLAGS_JDKEXE))
   126     $1_OUTPUT_DIR_ARG := $(SUPPORT_OUTPUTDIR)/modules_cmds/$(MODULE)
   142     $1_WINDOWS_JLI_LIB := $(SUPPORT_OUTPUTDIR)/native/java.base/jli_static.lib
   127   endif
       
   128 
       
   129   # TODO: maybe it's better to move this if-statement out of this function
       
   130   ifeq ($1, java)
       
   131     $1_OPTIMIZATION_ARG := HIGH
       
   132     $1_LDFLAGS_solaris := -R$(OPENWIN_HOME)/lib$(OPENJDK_TARGET_CPU_ISADIR)
       
   133   else
   143   else
   134     $1_OPTIMIZATION_ARG := LOW
   144     $1_CFLAGS += $(CFLAGS_JDKEXE)
   135   endif
   145     $1_WINDOWS_JLI_LIB := $(SUPPORT_OUTPUTDIR)/native/java.base/libjli/jli.lib
   136 
       
   137   $1_CFLAGS := $(CFLAGS_JDKEXE)
       
   138   ifeq ($(10), true)
       
   139     $1_CFLAGS := $(filter-out -MD, $(CFLAGS_JDKEXE))
       
   140   endif
   146   endif
   141 
   147 
   142   # The linker on older SuSE distros (e.g. on SLES 10) complains with:
   148   # The linker on older SuSE distros (e.g. on SLES 10) complains with:
   143   # "Invalid version tag `SUNWprivate_1.1'. Only anonymous version tag is allowed in executable."
   149   # "Invalid version tag `SUNWprivate_1.1'. Only anonymous version tag is allowed in executable."
   144   # if feeded with a version script which contains named tags.
   150   # if feeded with a version script which contains named tags.
   154     else
   160     else
   155       $1_MAPFILE :=
   161       $1_MAPFILE :=
   156     endif
   162     endif
   157   endif
   163   endif
   158 
   164 
   159   $(call SetupNativeCompilation,BUILD_LAUNCHER_$1, \
   165   $$(eval $$(call SetupNativeCompilation, BUILD_LAUNCHER_$1, \
   160       SRC := $(LAUNCHER_SRC), \
   166       SRC := $(LAUNCHER_SRC), \
   161       INCLUDE_FILES := main.c, \
   167       INCLUDE_FILES := main.c, \
   162       OPTIMIZATION := $$($1_OPTIMIZATION_ARG), \
   168       OPTIMIZATION := $$($1_OPTIMIZATION), \
   163       CFLAGS := $$($1_CFLAGS) \
   169       CFLAGS := $$($1_CFLAGS) \
   164           $(LAUNCHER_CFLAGS) \
   170           $(LAUNCHER_CFLAGS) \
   165           -DFULL_VERSION='"$(FULL_VERSION)"' \
   171           -DFULL_VERSION='"$(FULL_VERSION)"' \
   166           -DJDK_MAJOR_VERSION='"$(JDK_MAJOR_VERSION)"' \
   172           -DJDK_MAJOR_VERSION='"$(JDK_MAJOR_VERSION)"' \
   167           -DJDK_MINOR_VERSION='"$(JDK_MINOR_VERSION)"' \
   173           -DJDK_MINOR_VERSION='"$(JDK_MINOR_VERSION)"' \
   168           -DLAUNCHER_NAME='"$(LAUNCHER_NAME)"' \
   174           -DLAUNCHER_NAME='"$(LAUNCHER_NAME)"' \
   169           -DPROGNAME='"$1"' $(DPACKAGEPATH) \
   175           -DPROGNAME='"$1"' \
   170           $2, \
   176           $$($1_CFLAGS), \
   171       CFLAGS_linux := -fPIC, \
   177       CFLAGS_linux := -fPIC, \
   172       CFLAGS_solaris := -KPIC -DHAVE_GETHRTIME, \
   178       CFLAGS_solaris := -KPIC -DHAVE_GETHRTIME, \
       
   179       CFLAGS_windows := $$($1_CFLAGS_windows), \
   173       LDFLAGS := $(LDFLAGS_JDKEXE) \
   180       LDFLAGS := $(LDFLAGS_JDKEXE) \
   174           $(ORIGIN_ARG) \
   181           $$(ORIGIN_ARG) \
   175           $$($1_LDFLAGS), \
   182           $$($1_LDFLAGS), \
   176       LDFLAGS_linux := \
   183       LDFLAGS_linux := \
   177           $(call SET_SHARED_LIBRARY_NAME,$(LIBRARY_PREFIX)$(SHARED_LIBRARY_SUFFIX)) \
   184           $(call SET_SHARED_LIBRARY_NAME,$(LIBRARY_PREFIX)$(SHARED_LIBRARY_SUFFIX)) \
   178           -L$(SUPPORT_OUTPUTDIR)/modules_libs/java.base$(OPENJDK_TARGET_CPU_LIBDIR)/jli, \
   185           -L$(SUPPORT_OUTPUTDIR)/modules_libs/java.base$(OPENJDK_TARGET_CPU_LIBDIR)/jli, \
   179       LDFLAGS_macosx := $(call SET_SHARED_LIBRARY_NAME,$1), \
   186       LDFLAGS_macosx := $(call SET_SHARED_LIBRARY_NAME,$1), \
   180       LDFLAGS_solaris := $$($1_LDFLAGS_solaris) \
   187       LDFLAGS_solaris := $$($1_LDFLAGS_solaris) \
   181           $(call SET_SHARED_LIBRARY_NAME,$(LIBRARY_PREFIX)$(SHARED_LIBRARY_SUFFIX)) \
   188           $(call SET_SHARED_LIBRARY_NAME,$(LIBRARY_PREFIX)$(SHARED_LIBRARY_SUFFIX)) \
   182           -L$(SUPPORT_OUTPUTDIR)/modules_libs/java.base$(OPENJDK_TARGET_CPU_LIBDIR)/jli, \
   189           -L$(SUPPORT_OUTPUTDIR)/modules_libs/java.base$(OPENJDK_TARGET_CPU_LIBDIR)/jli, \
   183       MAPFILE := $$($1_MAPFILE), \
   190       MAPFILE := $$($1_MAPFILE), \
   184       LIBS := $(JDKEXE_LIBS) $$($1_LIBS), \
   191       LIBS := $(JDKEXE_LIBS) $$($1_LIBS), \
   185       LIBS_unix := $4, \
   192       LIBS_unix := $$($1_LIBS_unix), \
   186       LIBS_linux := -lpthread -ljli $(LIBDL) -lc, \
   193       LIBS_linux := -lpthread -ljli $(LIBDL) -lc, \
   187       LIBS_solaris := -ljli -lthread $(LIBDL) -lc, \
   194       LIBS_solaris := -ljli -lthread $(LIBDL) -lc, \
   188       LIBS_windows := $$($1_WINDOWS_JLI_LIB) \
   195       LIBS_windows := $$($1_WINDOWS_JLI_LIB) \
   189           $(SUPPORT_OUTPUTDIR)/native/java.base/libjava/java.lib advapi32.lib $5, \
   196           $(SUPPORT_OUTPUTDIR)/native/java.base/libjava/java.lib advapi32.lib \
   190       OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/$1_objs$(OUTPUT_SUBDIR), \
   197           $$($1_LIBS_windows), \
   191       OUTPUT_DIR := $$($1_OUTPUT_DIR_ARG)$(OUTPUT_SUBDIR), \
   198       OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/$1_objs, \
       
   199       OUTPUT_DIR := $$($1_OUTPUT_DIR), \
   192       PROGRAM := $1, \
   200       PROGRAM := $1, \
   193       DEBUG_SYMBOLS := true, \
   201       DEBUG_SYMBOLS := true, \
   194       VERSIONINFO_RESOURCE := $$($1_VERSION_INFO_RESOURCE), \
   202       VERSIONINFO_RESOURCE := $$($1_VERSION_INFO_RESOURCE), \
   195       RC_FLAGS := $(RC_FLAGS) \
   203       RC_FLAGS := $$(RC_FLAGS) \
   196           -D "JDK_FNAME=$1$(EXE_SUFFIX)" \
   204           -D "JDK_FNAME=$1$(EXE_SUFFIX)" \
   197           -D "JDK_INTERNAL_NAME=$1" \
   205           -D "JDK_INTERNAL_NAME=$1" \
   198           -D "JDK_FTYPE=0x1L" \
   206           -D "JDK_FTYPE=0x1L" \
   199           $7, \
   207           $$($1_RC_FLAGS), \
   200       MANIFEST := $(JAVA_MANIFEST), \
   208       MANIFEST := $(JAVA_MANIFEST), \
   201       MANIFEST_VERSION := $(JDK_VERSION_FOR_MANIFEST), \
   209       MANIFEST_VERSION := $(JDK_VERSION_FOR_MANIFEST), \
   202       CODESIGN := $$($1_CODESIGN), \
   210       CODESIGN := $$($1_CODESIGN), \
   203   )
   211   ))
   204 
   212 
   205   TARGETS += $$(BUILD_LAUNCHER_$1)
   213   $1 += $$(BUILD_LAUNCHER_$1)
       
   214   TARGETS += $$($1)
   206 
   215 
   207   ifneq (,$(filter $(OPENJDK_TARGET_OS), macosx aix))
   216   ifneq (,$(filter $(OPENJDK_TARGET_OS), macosx aix))
   208     $$(BUILD_LAUNCHER_$1): $(SUPPORT_OUTPUTDIR)/native/java.base/libjli_static.a
   217     $$(BUILD_LAUNCHER_$1): $(SUPPORT_OUTPUTDIR)/native/java.base/libjli_static.a
   209   endif
   218   endif
   210 
   219 
   211   ifeq ($(OPENJDK_TARGET_OS), windows)
   220   ifeq ($(OPENJDK_TARGET_OS), windows)
   212     $$(BUILD_LAUNCHER_$1): $(SUPPORT_OUTPUTDIR)/native/java.base/libjava/java.lib \
   221     $$(BUILD_LAUNCHER_$1): $(SUPPORT_OUTPUTDIR)/native/java.base/libjava/java.lib \
   213         $$($1_WINDOWS_JLI_LIB)
   222         $$($1_WINDOWS_JLI_LIB)
   214   endif
   223   endif
   215 endef
   224 endef
   216 
       
   217 ##########################################################################################
       
   218 
       
   219 XLIBS := $(X_LIBS) -lX11
       
   220 ifeq ($(OPENJDK_TARGET_OS), macosx)
       
   221   DPACKAGEPATH := -DPACKAGE_PATH='"$(PACKAGE_PATH)"'
       
   222   XLIBS :=
       
   223 endif
       
   224 
       
   225 JAVA_RC_FLAGS += -i $(JDK_TOPDIR)/src/java.base/windows/native/common
       
   226 ifdef OPENJDK
       
   227   JAVA_RC_FLAGS += -i "$(JDK_TOPDIR)/src/java.base/windows/native/launcher/icons"
       
   228 else
       
   229   JAVA_RC_FLAGS += -i "$(JDK_TOPDIR)/src/closed/java.base/windows/native/launcher/icons"
       
   230 endif