1 # 2 # Copyright (c) 2011, 2018, 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 WIN_VERIFY_LIB := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libverify/verify.lib 27 28 # Hook to include the corresponding custom file, if present. 29 $(eval $(call IncludeCustomExtension, lib/CoreLibraries.gmk)) 30 31 32 ########################################################################################## 33 # libfdlibm is statically linked with libjava below and not delivered into the 34 # product on its own. 35 36 BUILD_LIBFDLIBM_OPTIMIZATION := NONE 37 38 ifeq ($(OPENJDK_TARGET_OS), solaris) 39 BUILD_LIBFDLIBM_OPTIMIZATION := HIGH 40 endif 41 42 # If FDLIBM_CFLAGS is non-empty we know that we can optimize 43 # fdlibm by adding those extra C flags. Currently GCC, 44 # and clang only. 45 ifneq ($(FDLIBM_CFLAGS), ) 46 BUILD_LIBFDLIBM_OPTIMIZATION := LOW 47 endif 48 49 LIBFDLIBM_SRC := $(TOPDIR)/src/java.base/share/native/libfdlibm 50 LIBFDLIBM_CFLAGS := -I$(LIBFDLIBM_SRC) $(FDLIBM_CFLAGS) 51 52 ifneq ($(OPENJDK_TARGET_OS), macosx) 53 $(eval $(call SetupNativeCompilation, BUILD_LIBFDLIBM, \ 54 NAME := fdlibm, \ 55 TYPE := STATIC_LIBRARY, \ 56 OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE), \ 57 SRC := $(LIBFDLIBM_SRC), \ 58 OPTIMIZATION := $(BUILD_LIBFDLIBM_OPTIMIZATION), \ 59 CFLAGS := $(CFLAGS_JDKLIB) $(LIBFDLIBM_CFLAGS), \ 60 CFLAGS_windows_debug := -DLOGGING, \ 61 CFLAGS_aix := -qfloat=nomaf, \ 62 DISABLED_WARNINGS_gcc := sign-compare misleading-indentation, \ 63 DISABLED_WARNINGS_microsoft := 4146 4244 4018, \ 64 ARFLAGS := $(ARFLAGS), \ 65 OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libfdlibm, \ 66 )) 67 68 else 69 70 # On macosx the old build does partial (incremental) linking of fdlibm instead of 71 # a plain static library. 72 $(eval $(call SetupNativeCompilation, BUILD_LIBFDLIBM_MAC, \ 73 NAME := fdlibm, \ 74 OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libfdlibm, \ 75 SRC := $(LIBFDLIBM_SRC), \ 76 CFLAGS := $(CFLAGS_JDKLIB) $(LIBFDLIBM_CFLAGS), \ 77 LDFLAGS := -nostdlib $(ARFLAGS), \ 78 OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libfdlibm, \ 79 )) 80 81 BUILD_LIBFDLIBM := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/$(LIBRARY_PREFIX)fdlibm$(STATIC_LIBRARY_SUFFIX) 82 $(BUILD_LIBFDLIBM): $(BUILD_LIBFDLIBM_MAC) 83 $(call install-file) 84 85 endif 86 87 ########################################################################################## 88 89 LIBVERIFY_OPTIMIZATION := HIGH 90 ifneq ($(findstring $(OPENJDK_TARGET_OS), solaris linux), ) 91 ifeq ($(COMPILE_WITH_DEBUG_SYMBOLS), true) 92 LIBVERIFY_OPTIMIZATION := LOW 93 endif 94 endif 95 96 $(eval $(call SetupJdkLibrary, BUILD_LIBVERIFY, \ 97 NAME := verify, \ 98 OPTIMIZATION := $(LIBVERIFY_OPTIMIZATION), \ 99 CFLAGS := $(CFLAGS_JDKLIB), \ 100 DISABLED_WARNINGS_gcc := implicit-fallthrough, \ 101 DISABLED_WARNINGS_microsoft := 4244 4267, \ 102 LDFLAGS := $(LDFLAGS_JDKLIB) \ 103 $(call SET_SHARED_LIBRARY_ORIGIN), \ 104 LIBS_unix := -ljvm, \ 105 LIBS_windows := jvm.lib, \ 106 )) 107 108 TARGETS += $(BUILD_LIBVERIFY) 109 110 ########################################################################################## 111 112 LIBJAVA_CFLAGS := -DARCHPROPNAME='"$(OPENJDK_TARGET_CPU_OSARCH)"' 113 114 ifeq ($(OPENJDK_TARGET_OS), macosx) 115 BUILD_LIBJAVA_java_props_md.c_CFLAGS := -x objective-c 116 BUILD_LIBJAVA_java_props_macosx.c_CFLAGS := -x objective-c 117 endif 118 119 $(eval $(call SetupJdkLibrary, BUILD_LIBJAVA, \ 120 NAME := java, \ 121 OPTIMIZATION := HIGH, \ 122 CFLAGS := $(CFLAGS_JDKLIB) \ 123 $(LIBJAVA_CFLAGS), \ 124 System.c_CFLAGS := $(VERSION_CFLAGS), \ 125 jdk_util.c_CFLAGS := $(VERSION_CFLAGS), \ 126 EXTRA_HEADER_DIRS := libfdlibm, \ 127 WARNINGS_AS_ERRORS_xlc := false, \ 128 DISABLED_WARNINGS_gcc := unused-result, \ 129 DISABLED_WARNINGS_solstudio := E_STATEMENT_NOT_REACHED, \ 130 LDFLAGS := $(LDFLAGS_JDKLIB) \ 131 $(call SET_SHARED_LIBRARY_ORIGIN), \ 132 LDFLAGS_macosx := -L$(SUPPORT_OUTPUTDIR)/native/$(MODULE)/, \ 133 LDFLAGS_windows := -delayload:shell32.dll, \ 134 LIBS_unix := -ljvm -lverify, \ 135 LIBS_linux := $(LIBDL) $(BUILD_LIBFDLIBM), \ 136 LIBS_solaris := -lsocket -lnsl -lscf $(LIBDL) $(BUILD_LIBFDLIBM), \ 137 LIBS_aix := $(LIBDL) $(BUILD_LIBFDLIBM) $(LIBM),\ 138 LIBS_macosx := -lfdlibm \ 139 -framework CoreFoundation \ 140 -framework Foundation \ 141 -framework Security -framework SystemConfiguration, \ 142 LIBS_windows := jvm.lib $(BUILD_LIBFDLIBM) $(WIN_VERIFY_LIB) \ 143 shell32.lib delayimp.lib \ 144 advapi32.lib version.lib, \ 145 )) 146 147 TARGETS += $(BUILD_LIBJAVA) 148 149 $(BUILD_LIBJAVA): $(BUILD_LIBVERIFY) 150 151 $(BUILD_LIBJAVA): $(BUILD_LIBFDLIBM) 152 153 ########################################################################################## 154 155 BUILD_LIBZIP_EXCLUDES := 156 ifeq ($(USE_EXTERNAL_LIBZ), true) 157 LIBZIP_EXCLUDES += zlib 158 endif 159 160 ifeq ($(LIBZIP_CAN_USE_MMAP), true) 161 BUILD_LIBZIP_MMAP := -DUSE_MMAP 162 endif 163 164 $(eval $(call SetupJdkLibrary, BUILD_LIBZIP, \ 165 NAME := zip, \ 166 OPTIMIZATION := LOW, \ 167 EXCLUDES := $(LIBZIP_EXCLUDES), \ 168 CFLAGS := $(CFLAGS_JDKLIB) \ 169 $(LIBZ_CFLAGS), \ 170 CFLAGS_unix := $(BUILD_LIBZIP_MMAP) -UDEBUG, \ 171 LDFLAGS := $(LDFLAGS_JDKLIB) \ 172 $(call SET_SHARED_LIBRARY_ORIGIN), \ 173 LIBS_unix := -ljvm -ljava $(LIBZ_LIBS), \ 174 LIBS_windows := jvm.lib $(WIN_JAVA_LIB), \ 175 )) 176 177 $(BUILD_LIBZIP): $(BUILD_LIBJAVA) 178 179 TARGETS += $(BUILD_LIBZIP) 180 181 ########################################################################################## 182 183 $(eval $(call SetupJdkLibrary, BUILD_LIBJIMAGE, \ 184 NAME := jimage, \ 185 TOOLCHAIN := TOOLCHAIN_LINK_CXX, \ 186 OPTIMIZATION := LOW, \ 187 CFLAGS := $(CFLAGS_JDKLIB), \ 188 CXXFLAGS := $(CXXFLAGS_JDKLIB), \ 189 CFLAGS_unix := -UDEBUG, \ 190 LDFLAGS := $(LDFLAGS_JDKLIB) $(LDFLAGS_CXX_JDK) \ 191 $(call SET_SHARED_LIBRARY_ORIGIN), \ 192 LIBS_unix := -ljvm -ldl $(LIBCXX), \ 193 LIBS_macosx := -lc++, \ 194 LIBS_windows := jvm.lib, \ 195 )) 196 197 $(BUILD_LIBJIMAGE): $(BUILD_LIBJAVA) 198 199 TARGETS += $(BUILD_LIBJIMAGE) 200 201 ########################################################################################## 202 203 ifeq ($(call check-jvm-variant, zero), true) 204 ERGO_FAMILY := zero 205 else 206 ifeq ($(OPENJDK_TARGET_CPU_ARCH), x86) 207 ERGO_FAMILY := i586 208 else 209 ERGO_FAMILY := $(OPENJDK_TARGET_CPU_ARCH) 210 endif 211 endif 212 LIBJLI_ALL_ERGO := $(wildcard $(addsuffix /ergo_*.c, $(LIBJLI_SRC_DIRS))) 213 LIBJLI_EXCLUDE_ERGO := $(filter-out %/ergo_$(ERGO_FAMILY).c, $(LIBJLI_ALL_ERGO)) 214 # If all specialized ergo files are excluded, use generic ergo 215 ifeq ($(LIBJLI_ALL_ERGO), $(LIBJLI_EXCLUDE_ERGO)) 216 LIBJLI_CFLAGS += -DUSE_GENERIC_ERGO 217 endif 218 LIBJLI_EXCLUDE_FILES += $(notdir $(LIBJLI_EXCLUDE_ERGO)) 219 220 ifeq ($(OPENJDK_TARGET_OS), macosx) 221 LIBJLI_EXCLUDE_FILES += java_md_solinux.c ergo.c ergo_i586.c 222 223 BUILD_LIBJLI_java_md_macosx.c_CFLAGS := -x objective-c 224 BUILD_LIBJLI_STATIC_java_md_macosx.c_CFLAGS := -x objective-c 225 226 LIBJLI_CFLAGS += -DPACKAGE_PATH=\"$(PACKAGE_PATH)\" 227 endif 228 229 ifeq ($(OPENJDK_TARGET_OS), windows) 230 # Staticically link with c runtime on windows. 231 LIBJLI_CFLAGS_JDKLIB := $(filter-out -MD, $(CFLAGS_JDKLIB)) 232 LIBJLI_OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE) 233 # Supply the name of the C runtime lib. 234 LIBJLI_CFLAGS += -DMSVCR_DLL_NAME='"$(notdir $(MSVCR_DLL))"' 235 ifneq ($(MSVCP_DLL), ) 236 LIBJLI_CFLAGS += -DMSVCP_DLL_NAME='"$(notdir $(MSVCP_DLL))"' 237 endif 238 else 239 LIBJLI_CFLAGS_JDKLIB := $(CFLAGS_JDKLIB) 240 LIBJLI_OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE)/jli 241 endif 242 243 LIBJLI_CFLAGS += $(LIBZ_CFLAGS) 244 245 ifneq ($(USE_EXTERNAL_LIBZ), true) 246 LIBJLI_EXTRA_FILES += \ 247 $(addprefix $(TOPDIR)/src/java.base/share/native/libzip/zlib/, \ 248 inflate.c \ 249 inftrees.c \ 250 inffast.c \ 251 zadler32.c \ 252 zcrc32.c \ 253 zutil.c \ 254 ) 255 endif 256 257 $(eval $(call SetupJdkLibrary, BUILD_LIBJLI, \ 258 NAME := jli, \ 259 OUTPUT_DIR := $(LIBJLI_OUTPUT_DIR), \ 260 EXCLUDE_FILES := $(LIBJLI_EXCLUDE_FILES), \ 261 EXTRA_FILES := $(LIBJLI_EXTRA_FILES), \ 262 OPTIMIZATION := HIGH, \ 263 CFLAGS := $(LIBJLI_CFLAGS_JDKLIB) $(LIBJLI_CFLAGS), \ 264 DISABLED_WARNINGS_solstudio := \ 265 E_ASM_DISABLES_OPTIMIZATION \ 266 E_STATEMENT_NOT_REACHED, \ 267 LDFLAGS := $(LDFLAGS_JDKLIB) \ 268 $(call SET_SHARED_LIBRARY_ORIGIN), \ 269 LDFLAGS_linux := $(call SET_SHARED_LIBRARY_ORIGIN,/..), \ 270 LDFLAGS_solaris := $(call SET_SHARED_LIBRARY_ORIGIN,/..), \ 271 LIBS_unix := $(LIBZ_LIBS), \ 272 LIBS_linux := $(LIBDL) -lpthread, \ 273 LIBS_solaris := $(LIBDL), \ 274 LIBS_aix := $(LIBDL),\ 275 LIBS_macosx := -framework Cocoa -framework Security -framework ApplicationServices, \ 276 LIBS_windows := advapi32.lib comctl32.lib user32.lib, \ 277 )) 278 279 TARGETS += $(BUILD_LIBJLI) 280 281 LIBJLI_SRC_DIRS := $(call FindSrcDirsForComponent, java.base, libjli) 282 283 # On windows, the static library has the same suffix as the import library created by 284 # with the shared library, so the static library is given a different name. No harm 285 # in doing it for all platform to reduce complexity. 286 ifeq ($(OPENJDK_TARGET_OS), windows) 287 $(eval $(call SetupNativeCompilation, BUILD_LIBJLI_STATIC, \ 288 NAME := jli_static, \ 289 TYPE := STATIC_LIBRARY, \ 290 OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE), \ 291 SRC := $(LIBJLI_SRC_DIRS), \ 292 EXCLUDE_FILES := $(LIBJLI_EXCLUDE_FILES), \ 293 EXTRA_FILES := $(LIBJLI_EXTRA_FILES), \ 294 OPTIMIZATION := HIGH, \ 295 CFLAGS := $(STATIC_LIBRARY_FLAGS) $(LIBJLI_CFLAGS_JDKLIB) $(LIBJLI_CFLAGS) \ 296 $(addprefix -I, $(LIBJLI_SRC_DIRS)), \ 297 ARFLAGS := $(ARFLAGS), \ 298 OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libjli_static, \ 299 )) 300 301 TARGETS += $(BUILD_LIBJLI_STATIC) 302 303 else ifeq ($(OPENJDK_TARGET_OS), macosx) 304 # 305 # On macosx they do partial (incremental) linking of libjli_static.a 306 # code it here...rather than add support to NativeCompilation 307 # as this is first time I see it 308 $(eval $(call SetupNativeCompilation, BUILD_LIBJLI_STATIC, \ 309 NAME := jli_static, \ 310 OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE), \ 311 SRC := $(LIBJLI_SRC_DIRS), \ 312 EXCLUDE_FILES := $(LIBJLI_EXCLUDE_FILES), \ 313 EXTRA_FILES := $(LIBJLI_EXTRA_FILES), \ 314 OPTIMIZATION := HIGH, \ 315 CFLAGS := $(LIBJLI_CFLAGS_JDKLIB) $(LIBJLI_CFLAGS) \ 316 $(addprefix -I, $(LIBJLI_SRC_DIRS)), \ 317 LDFLAGS := -nostdlib $(ARFLAGS), \ 318 OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libjli_static, \ 319 )) 320 321 ifeq ($(STATIC_BUILD), true) 322 TARGETS += $(BUILD_LIBJLI_STATIC) 323 else 324 $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libjli_static.a: $(BUILD_LIBJLI_STATIC) 325 $(call install-file) 326 327 TARGETS += $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libjli_static.a 328 endif 329 330 else ifeq ($(OPENJDK_TARGET_OS), aix) 331 # AIX also requires a static libjli because the compiler doesn't support '-rpath' 332 $(eval $(call SetupNativeCompilation, BUILD_LIBJLI_STATIC, \ 333 NAME := jli_static, \ 334 TYPE := STATIC_LIBRARY, \ 335 OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE), \ 336 SRC := $(LIBJLI_SRC_DIRS), \ 337 EXCLUDE_FILES := $(LIBJLI_EXCLUDE_FILES), \ 338 EXTRA_FILES := $(LIBJLI_EXTRA_FILES), \ 339 OPTIMIZATION := HIGH, \ 340 CFLAGS := $(STATIC_LIBRARY_FLAGS) $(LIBJLI_CFLAGS_JDKLIB) $(LIBJLI_CFLAGS) \ 341 $(addprefix -I, $(LIBJLI_SRC_DIRS)), \ 342 ARFLAGS := $(ARFLAGS), \ 343 OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libjli_static)) 344 345 TARGETS += $(BUILD_LIBJLI_STATIC) 346 347 endif