1 #
2 # Copyright (c) 2011, 2019, 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 # Hook to include the corresponding custom file, if present.
27 $(eval $(call IncludeCustomExtension, lib/CoreLibraries.gmk))
28
29
30 ##########################################################################################
31 # libfdlibm is statically linked with libjava below and not delivered into the
32 # product on its own.
33
34 BUILD_LIBFDLIBM_OPTIMIZATION := NONE
35
36 ifeq ($(call isTargetOs, solaris), true)
37 BUILD_LIBFDLIBM_OPTIMIZATION := HIGH
38 endif
39
40 # If FDLIBM_CFLAGS is non-empty we know that we can optimize
41 # fdlibm when adding those extra C flags. Currently GCC,
42 # and clang only.
43 ifneq ($(FDLIBM_CFLAGS), )
44 BUILD_LIBFDLIBM_OPTIMIZATION := LOW
45 endif
46
47 LIBFDLIBM_SRC := $(TOPDIR)/src/java.base/share/native/libfdlibm
48 LIBFDLIBM_CFLAGS := -I$(LIBFDLIBM_SRC) $(FDLIBM_CFLAGS)
49
50 $(eval $(call SetupNativeCompilation, BUILD_LIBFDLIBM, \
51 NAME := fdlibm, \
52 TYPE := STATIC_LIBRARY, \
53 OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE), \
54 SRC := $(LIBFDLIBM_SRC), \
55 OPTIMIZATION := $(BUILD_LIBFDLIBM_OPTIMIZATION), \
56 CFLAGS := $(CFLAGS_JDKLIB) $(LIBFDLIBM_CFLAGS), \
57 CFLAGS_windows_debug := -DLOGGING, \
58 CFLAGS_aix := -qfloat=nomaf, \
59 DISABLED_WARNINGS_gcc := sign-compare misleading-indentation array-bounds, \
60 DISABLED_WARNINGS_clang := sign-compare, \
61 DISABLED_WARNINGS_microsoft := 4146 4244 4018, \
62 ARFLAGS := $(ARFLAGS), \
63 OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libfdlibm, \
64 ))
65
66 ##########################################################################################
67
68 LIBVERIFY_OPTIMIZATION := HIGH
69 ifeq ($(call isTargetOs, solaris linux), true)
70 ifeq ($(COMPILE_WITH_DEBUG_SYMBOLS), true)
71 LIBVERIFY_OPTIMIZATION := LOW
72 endif
73 endif
74
75 $(eval $(call SetupJdkLibrary, BUILD_LIBVERIFY, \
76 NAME := verify, \
77 OPTIMIZATION := $(LIBVERIFY_OPTIMIZATION), \
78 CFLAGS := $(CFLAGS_JDKLIB), \
79 LDFLAGS := $(LDFLAGS_JDKLIB) \
80 $(call SET_SHARED_LIBRARY_ORIGIN), \
81 LIBS_unix := -ljvm, \
82 LIBS_windows := jvm.lib, \
83 ))
84
85 TARGETS += $(BUILD_LIBVERIFY)
86
87 ##########################################################################################
88
89 LIBJAVA_CFLAGS := -DARCHPROPNAME='"$(OPENJDK_TARGET_CPU_OSARCH)"'
90
91 ifeq ($(call isTargetOs, macosx), true)
92 BUILD_LIBJAVA_java_props_md.c_CFLAGS := -x objective-c
93 BUILD_LIBJAVA_java_props_macosx.c_CFLAGS := -x objective-c
94 endif
95
96 $(eval $(call SetupJdkLibrary, BUILD_LIBJAVA, \
97 NAME := java, \
98 OPTIMIZATION := HIGH, \
99 CFLAGS := $(CFLAGS_JDKLIB) \
100 $(LIBJAVA_CFLAGS), \
101 jdk_util.c_CFLAGS := $(VERSION_CFLAGS), \
102 EXTRA_HEADER_DIRS := libfdlibm, \
103 WARNINGS_AS_ERRORS_xlc := false, \
104 DISABLED_WARNINGS_gcc := unused-result unused-function, \
105 DISABLED_WARNINGS_solstudio := E_STATEMENT_NOT_REACHED, \
106 LDFLAGS := $(LDFLAGS_JDKLIB) \
107 $(call SET_SHARED_LIBRARY_ORIGIN), \
108 LDFLAGS_macosx := -L$(SUPPORT_OUTPUTDIR)/native/$(MODULE)/, \
109 LDFLAGS_windows := -delayload:shell32.dll, \
110 LIBS := $(BUILD_LIBFDLIBM_TARGET), \
111 LIBS_unix := -ljvm, \
112 LIBS_linux := $(LIBDL), \
113 LIBS_solaris := -lsocket -lnsl -lscf $(LIBDL), \
114 LIBS_aix := $(LIBDL) $(LIBM),\
115 LIBS_macosx := -framework CoreFoundation \
116 -framework Foundation \
117 -framework SystemConfiguration, \
118 LIBS_windows := jvm.lib \
119 shell32.lib delayimp.lib \
120 advapi32.lib version.lib, \
121 ))
122
123 TARGETS += $(BUILD_LIBJAVA)
124
125 $(BUILD_LIBJAVA): $(BUILD_LIBVERIFY)
126
127 $(BUILD_LIBJAVA): $(BUILD_LIBFDLIBM)
128
129 ##########################################################################################
130
131 BUILD_LIBZIP_EXCLUDES :=
132 ifeq ($(USE_EXTERNAL_LIBZ), true)
133 LIBZIP_EXCLUDES += zlib
134 endif
135
136 ifeq ($(LIBZIP_CAN_USE_MMAP), true)
137 BUILD_LIBZIP_MMAP := -DUSE_MMAP
138 endif
139
140 $(eval $(call SetupJdkLibrary, BUILD_LIBZIP, \
141 NAME := zip, \
142 OPTIMIZATION := LOW, \
143 EXCLUDES := $(LIBZIP_EXCLUDES), \
144 CFLAGS := $(CFLAGS_JDKLIB) \
145 $(LIBZ_CFLAGS), \
146 CFLAGS_unix := $(BUILD_LIBZIP_MMAP) -UDEBUG, \
147 DISABLED_WARNINGS_gcc := unused-function implicit-fallthrough, \
148 LDFLAGS := $(LDFLAGS_JDKLIB) \
149 $(call SET_SHARED_LIBRARY_ORIGIN), \
150 LIBS_unix := -ljvm -ljava $(LIBZ_LIBS), \
151 LIBS_windows := jvm.lib $(WIN_JAVA_LIB), \
152 ))
153
154 $(BUILD_LIBZIP): $(BUILD_LIBJAVA)
155
156 TARGETS += $(BUILD_LIBZIP)
157
158 ##########################################################################################
159
160 $(eval $(call SetupJdkLibrary, BUILD_LIBJIMAGE, \
161 NAME := jimage, \
162 TOOLCHAIN := TOOLCHAIN_LINK_CXX, \
163 OPTIMIZATION := LOW, \
164 CFLAGS := $(CFLAGS_JDKLIB), \
165 CXXFLAGS := $(CXXFLAGS_JDKLIB), \
166 CFLAGS_unix := -UDEBUG, \
167 LDFLAGS := $(LDFLAGS_JDKLIB) $(LDFLAGS_CXX_JDK) \
168 $(call SET_SHARED_LIBRARY_ORIGIN), \
169 LIBS_unix := -ljvm -ldl $(LIBCXX), \
170 LIBS_macosx := -lc++, \
171 LIBS_windows := jvm.lib, \
172 ))
173
174 $(BUILD_LIBJIMAGE): $(BUILD_LIBJAVA)
175
176 TARGETS += $(BUILD_LIBJIMAGE)
177
178 ##########################################################################################
179
180 ifeq ($(call isTargetOs, macosx), true)
181 LIBJLI_EXCLUDE_FILES += java_md_solinux.c
182 endif
183
184 ifeq ($(call isTargetOs, windows), true)
185 # Supply the name of the C runtime lib.
186 LIBJLI_CFLAGS += -DMSVCR_DLL_NAME='"$(notdir $(MSVCR_DLL))"'
187 ifneq ($(MSVCP_DLL), )
188 LIBJLI_CFLAGS += -DMSVCP_DLL_NAME='"$(notdir $(MSVCP_DLL))"'
189 endif
190 endif
191
192 LIBJLI_CFLAGS += $(LIBZ_CFLAGS)
193
194 ifeq ($(INCLUDE_TSAN), true)
195 LIBJLI_CFLAGS += -DINCLUDE_TSAN
196 endif
197
198 ifneq ($(USE_EXTERNAL_LIBZ), true)
199 LIBJLI_EXTRA_FILES += \
200 $(addprefix $(TOPDIR)/src/java.base/share/native/libzip/zlib/, \
201 inflate.c \
202 inftrees.c \
203 inffast.c \
204 zadler32.c \
205 zcrc32.c \
206 zutil.c \
207 )
208 endif
209
210 $(eval $(call SetupJdkLibrary, BUILD_LIBJLI, \
211 NAME := jli, \
212 OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
213 EXCLUDE_FILES := $(LIBJLI_EXCLUDE_FILES), \
214 EXTRA_FILES := $(LIBJLI_EXTRA_FILES), \
215 OPTIMIZATION := HIGH, \
216 CFLAGS := $(CFLAGS_JDKLIB) $(LIBJLI_CFLAGS), \
217 DISABLED_WARNINGS_gcc := unused-function implicit-fallthrough, \
218 DISABLED_WARNINGS_clang := sometimes-uninitialized format-nonliteral, \
219 LDFLAGS := $(LDFLAGS_JDKLIB) \
220 $(call SET_SHARED_LIBRARY_ORIGIN), \
221 LIBS_unix := $(LIBZ_LIBS), \
222 LIBS_linux := $(LIBDL) -lpthread, \
223 LIBS_solaris := $(LIBDL), \
224 LIBS_aix := $(LIBDL),\
225 LIBS_macosx := -framework Cocoa -framework Security -framework ApplicationServices, \
226 LIBS_windows := advapi32.lib comctl32.lib user32.lib, \
227 ))
228
229 TARGETS += $(BUILD_LIBJLI)
230
231 LIBJLI_SRC_DIRS := $(call FindSrcDirsForComponent, java.base, libjli)
232
233 ifeq ($(call isTargetOs, aix), true)
234 # AIX also requires a static libjli because the compiler doesn't support '-rpath'
235 $(eval $(call SetupNativeCompilation, BUILD_LIBJLI_STATIC, \
236 NAME := jli_static, \
237 TYPE := STATIC_LIBRARY, \
238 OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE), \
239 SRC := $(LIBJLI_SRC_DIRS), \
240 EXCLUDE_FILES := $(LIBJLI_EXCLUDE_FILES), \
241 EXTRA_FILES := $(LIBJLI_EXTRA_FILES), \
242 OPTIMIZATION := HIGH, \
243 CFLAGS := $(STATIC_LIBRARY_FLAGS) $(CFLAGS_JDKLIB) $(LIBJLI_CFLAGS) \
244 $(addprefix -I, $(LIBJLI_SRC_DIRS)), \
245 ARFLAGS := $(ARFLAGS), \
246 OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libjli_static))
247
248 TARGETS += $(BUILD_LIBJLI_STATIC)
249
250 endif