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