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 |
|