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 ifneq ($(USE_EXTERNAL_LIBZ), true) 195 LIBJLI_EXTRA_FILES += \ 196 $(addprefix $(TOPDIR)/src/java.base/share/native/libzip/zlib/, \ 197 inflate.c \ 198 inftrees.c \ 199 inffast.c \ 200 zadler32.c \ 201 zcrc32.c \ 202 zutil.c \ 203 ) 204 endif 205 206 $(eval $(call SetupJdkLibrary, BUILD_LIBJLI, \ 207 NAME := jli, \ 208 OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \ 209 EXCLUDE_FILES := $(LIBJLI_EXCLUDE_FILES), \ 210 EXTRA_FILES := $(LIBJLI_EXTRA_FILES), \ 211 OPTIMIZATION := HIGH, \ 212 CFLAGS := $(CFLAGS_JDKLIB) $(LIBJLI_CFLAGS), \ 213 DISABLED_WARNINGS_gcc := unused-function implicit-fallthrough, \ 214 DISABLED_WARNINGS_clang := sometimes-uninitialized format-nonliteral, \ 215 LDFLAGS := $(LDFLAGS_JDKLIB) \ 216 $(call SET_SHARED_LIBRARY_ORIGIN), \ 217 LIBS_unix := $(LIBZ_LIBS), \ 218 LIBS_linux := $(LIBDL) -lpthread, \ 219 LIBS_solaris := $(LIBDL), \ 220 LIBS_aix := $(LIBDL),\ 221 LIBS_macosx := -framework Cocoa -framework Security -framework ApplicationServices, \ 222 LIBS_windows := advapi32.lib comctl32.lib user32.lib, \ 223 )) 224 225 TARGETS += $(BUILD_LIBJLI) 226 227 LIBJLI_SRC_DIRS := $(call FindSrcDirsForComponent, java.base, libjli) 228 229 ifeq ($(call isTargetOs, aix), true) 230 # AIX also requires a static libjli because the compiler doesn't support '-rpath' 231 $(eval $(call SetupNativeCompilation, BUILD_LIBJLI_STATIC, \ 232 NAME := jli_static, \ 233 TYPE := STATIC_LIBRARY, \ 234 OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE), \ 235 SRC := $(LIBJLI_SRC_DIRS), \ 236 EXCLUDE_FILES := $(LIBJLI_EXCLUDE_FILES), \ 237 EXTRA_FILES := $(LIBJLI_EXTRA_FILES), \ 238 OPTIMIZATION := HIGH, \ 239 CFLAGS := $(STATIC_LIBRARY_FLAGS) $(CFLAGS_JDKLIB) $(LIBJLI_CFLAGS) \ 240 $(addprefix -I, $(LIBJLI_SRC_DIRS)), \ 241 ARFLAGS := $(ARFLAGS), \ 242 OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libjli_static)) 243 244 TARGETS += $(BUILD_LIBJLI_STATIC) 245 246 endif