make/lib/CoreLibraries.gmk
branchihse-cflags-rewrite-branch
changeset 56900 d5d542d50e3c
parent 56726 3a9b7a1f9197
parent 51825 e3632b4706c4
child 58665 30a5049a36bb
equal deleted inserted replaced
56899:2c5e7f347c49 56900:d5d542d50e3c
    37 
    37 
    38 ifeq ($(OPENJDK_TARGET_OS), solaris)
    38 ifeq ($(OPENJDK_TARGET_OS), solaris)
    39   BUILD_LIBFDLIBM_OPTIMIZATION := HIGH
    39   BUILD_LIBFDLIBM_OPTIMIZATION := HIGH
    40 endif
    40 endif
    41 
    41 
    42 ifeq ($(OPENJDK_TARGET_OS), linux)
    42 # If FDLIBM_CFLAGS is non-empty we know that we can optimize
    43   ifeq ($(OPENJDK_TARGET_CPU), ppc64)
    43 # fdlibm when adding those extra C flags. Currently GCC,
    44     BUILD_LIBFDLIBM_OPTIMIZATION := HIGH
    44 # and clang only.
    45   else ifeq ($(OPENJDK_TARGET_CPU), ppc64le)
    45 ifneq ($(FDLIBM_CFLAGS), )
    46     BUILD_LIBFDLIBM_OPTIMIZATION := HIGH
    46   BUILD_LIBFDLIBM_OPTIMIZATION := LOW
    47   else ifeq ($(OPENJDK_TARGET_CPU), s390x)
       
    48     BUILD_LIBFDLIBM_OPTIMIZATION := HIGH
       
    49   else ifeq ($(OPENJDK_TARGET_CPU), aarch64)
       
    50     BUILD_LIBFDLIBM_OPTIMIZATION := HIGH
       
    51   endif
       
    52 endif
    47 endif
    53 
    48 
    54 LIBFDLIBM_SRC := $(TOPDIR)/src/java.base/share/native/libfdlibm
    49 LIBFDLIBM_SRC := $(TOPDIR)/src/java.base/share/native/libfdlibm
    55 LIBFDLIBM_CFLAGS := -I$(LIBFDLIBM_SRC)
    50 LIBFDLIBM_CFLAGS := -I$(LIBFDLIBM_SRC) $(FDLIBM_CFLAGS)
    56 
    51 
    57 ifneq ($(OPENJDK_TARGET_OS), macosx)
    52 $(eval $(call SetupNativeCompilation, BUILD_LIBFDLIBM, \
    58   $(eval $(call SetupNativeCompilation, BUILD_LIBFDLIBM, \
    53     NAME := fdlibm, \
    59       NAME := fdlibm, \
    54     TYPE := STATIC_LIBRARY, \
    60       TYPE := STATIC_LIBRARY, \
    55     OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE), \
    61       OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE), \
    56     SRC := $(LIBFDLIBM_SRC), \
    62       SRC := $(LIBFDLIBM_SRC), \
    57     OPTIMIZATION := $(BUILD_LIBFDLIBM_OPTIMIZATION), \
    63       OPTIMIZATION := $(BUILD_LIBFDLIBM_OPTIMIZATION), \
    58     CFLAGS := $(CFLAGS_JDKLIB) $(LIBFDLIBM_CFLAGS), \
    64       CFLAGS := $(CFLAGS_JDKLIB) $(LIBFDLIBM_CFLAGS), \
    59     CFLAGS_windows_debug := -DLOGGING, \
    65       CFLAGS_windows_debug := -DLOGGING, \
    60     CFLAGS_aix := -qfloat=nomaf, \
    66       CFLAGS_aix := -qfloat=nomaf, \
    61     DISABLED_WARNINGS_gcc := sign-compare misleading-indentation array-bounds, \
    67       CFLAGS_linux_ppc64 := -ffp-contract=off, \
    62     DISABLED_WARNINGS_microsoft := 4146 4244 4018, \
    68       CFLAGS_linux_ppc64le := -ffp-contract=off, \
    63     ARFLAGS := $(ARFLAGS), \
    69       CFLAGS_linux_s390x := -ffp-contract=off, \
    64     OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libfdlibm, \
    70       CFLAGS_linux_aarch64 := -ffp-contract=off, \
    65 ))
    71       DISABLED_WARNINGS_gcc := sign-compare misleading-indentation, \
       
    72       DISABLED_WARNINGS_microsoft := 4146 4244 4018, \
       
    73       ARFLAGS := $(ARFLAGS), \
       
    74       OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libfdlibm, \
       
    75   ))
       
    76 
       
    77 else
       
    78 
       
    79   # On macosx the old build does partial (incremental) linking of fdlibm instead of
       
    80   # a plain static library.
       
    81   $(eval $(call SetupNativeCompilation, BUILD_LIBFDLIBM_MAC, \
       
    82       NAME := fdlibm, \
       
    83       OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libfdlibm, \
       
    84       SRC := $(LIBFDLIBM_SRC), \
       
    85       CFLAGS := $(CFLAGS_JDKLIB) $(LIBFDLIBM_CFLAGS), \
       
    86       LDFLAGS := -nostdlib $(ARFLAGS), \
       
    87       OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libfdlibm, \
       
    88   ))
       
    89 
       
    90   BUILD_LIBFDLIBM := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/$(LIBRARY_PREFIX)fdlibm$(STATIC_LIBRARY_SUFFIX)
       
    91   $(BUILD_LIBFDLIBM): $(BUILD_LIBFDLIBM_MAC)
       
    92 	$(call install-file)
       
    93 
       
    94 endif
       
    95 
    66 
    96 ##########################################################################################
    67 ##########################################################################################
    97 
    68 
    98 LIBVERIFY_OPTIMIZATION := HIGH
    69 LIBVERIFY_OPTIMIZATION := HIGH
    99 ifneq ($(findstring $(OPENJDK_TARGET_OS), solaris linux), )
    70 ifneq ($(findstring $(OPENJDK_TARGET_OS), solaris linux), )
   138     DISABLED_WARNINGS_solstudio := E_STATEMENT_NOT_REACHED, \
   109     DISABLED_WARNINGS_solstudio := E_STATEMENT_NOT_REACHED, \
   139     LDFLAGS := $(LDFLAGS_JDKLIB) \
   110     LDFLAGS := $(LDFLAGS_JDKLIB) \
   140         $(call SET_SHARED_LIBRARY_ORIGIN), \
   111         $(call SET_SHARED_LIBRARY_ORIGIN), \
   141     LDFLAGS_macosx := -L$(SUPPORT_OUTPUTDIR)/native/$(MODULE)/, \
   112     LDFLAGS_macosx := -L$(SUPPORT_OUTPUTDIR)/native/$(MODULE)/, \
   142     LDFLAGS_windows := -delayload:shell32.dll, \
   113     LDFLAGS_windows := -delayload:shell32.dll, \
       
   114     LIBS := $(BUILD_LIBFDLIBM_TARGET), \
   143     LIBS_unix := -ljvm -lverify, \
   115     LIBS_unix := -ljvm -lverify, \
   144     LIBS_linux := $(LIBDL) $(BUILD_LIBFDLIBM), \
   116     LIBS_linux := $(LIBDL), \
   145     LIBS_solaris := -lsocket -lnsl -lscf $(LIBDL) $(BUILD_LIBFDLIBM), \
   117     LIBS_solaris := -lsocket -lnsl -lscf $(LIBDL), \
   146     LIBS_aix := $(LIBDL) $(BUILD_LIBFDLIBM) $(LIBM),\
   118     LIBS_aix := $(LIBDL) $(LIBM),\
   147     LIBS_macosx := -lfdlibm \
   119     LIBS_macosx := -framework CoreFoundation \
   148         -framework CoreFoundation \
       
   149         -framework Foundation \
   120         -framework Foundation \
   150         -framework Security -framework SystemConfiguration, \
   121         -framework Security -framework SystemConfiguration, \
   151     LIBS_windows := jvm.lib $(BUILD_LIBFDLIBM) $(WIN_VERIFY_LIB) \
   122     LIBS_windows := jvm.lib $(WIN_VERIFY_LIB) \
   152         shell32.lib delayimp.lib \
   123         shell32.lib delayimp.lib \
   153         advapi32.lib version.lib, \
   124         advapi32.lib version.lib, \
   154 ))
   125 ))
   155 
   126 
   156 TARGETS += $(BUILD_LIBJAVA)
   127 TARGETS += $(BUILD_LIBJAVA)
   193     NAME := jimage, \
   164     NAME := jimage, \
   194     TOOLCHAIN := TOOLCHAIN_LINK_CXX, \
   165     TOOLCHAIN := TOOLCHAIN_LINK_CXX, \
   195     OPTIMIZATION := LOW, \
   166     OPTIMIZATION := LOW, \
   196     CFLAGS := $(CFLAGS_JDKLIB), \
   167     CFLAGS := $(CFLAGS_JDKLIB), \
   197     CXXFLAGS := $(CXXFLAGS_JDKLIB), \
   168     CXXFLAGS := $(CXXFLAGS_JDKLIB), \
   198     DISABLED_WARNINGS_gcc := implicit-fallthrough, \
       
   199     CFLAGS_unix := -UDEBUG, \
   169     CFLAGS_unix := -UDEBUG, \
   200     LDFLAGS := $(LDFLAGS_JDKLIB) $(LDFLAGS_CXX_JDK) \
   170     LDFLAGS := $(LDFLAGS_JDKLIB) $(LDFLAGS_CXX_JDK) \
   201         $(call SET_SHARED_LIBRARY_ORIGIN), \
   171         $(call SET_SHARED_LIBRARY_ORIGIN), \
   202     LIBS_unix := -ljvm -ldl $(LIBCXX), \
   172     LIBS_unix := -ljvm -ldl $(LIBCXX), \
   203     LIBS_macosx := -lc++, \
   173     LIBS_macosx := -lc++, \
   208 
   178 
   209 TARGETS += $(BUILD_LIBJIMAGE)
   179 TARGETS += $(BUILD_LIBJIMAGE)
   210 
   180 
   211 ##########################################################################################
   181 ##########################################################################################
   212 
   182 
   213 ifeq ($(call check-jvm-variant, zero), true)
       
   214   ERGO_FAMILY := zero
       
   215 else
       
   216   ifeq ($(OPENJDK_TARGET_CPU_ARCH), x86)
       
   217     ERGO_FAMILY := i586
       
   218   else
       
   219     ERGO_FAMILY := $(OPENJDK_TARGET_CPU_ARCH)
       
   220   endif
       
   221 endif
       
   222 LIBJLI_ALL_ERGO := $(wildcard $(addsuffix /ergo_*.c, $(LIBJLI_SRC_DIRS)))
       
   223 LIBJLI_EXCLUDE_ERGO := $(filter-out %/ergo_$(ERGO_FAMILY).c, $(LIBJLI_ALL_ERGO))
       
   224 # If all specialized ergo files are excluded, use generic ergo
       
   225 ifeq ($(LIBJLI_ALL_ERGO), $(LIBJLI_EXCLUDE_ERGO))
       
   226   LIBJLI_CFLAGS += -DUSE_GENERIC_ERGO
       
   227 endif
       
   228 LIBJLI_EXCLUDE_FILES += $(notdir $(LIBJLI_EXCLUDE_ERGO))
       
   229 
       
   230 ifeq ($(OPENJDK_TARGET_OS), macosx)
   183 ifeq ($(OPENJDK_TARGET_OS), macosx)
   231   LIBJLI_EXCLUDE_FILES += java_md_solinux.c ergo.c ergo_i586.c
   184   LIBJLI_EXCLUDE_FILES += java_md_solinux.c
   232 
       
   233   BUILD_LIBJLI_java_md_macosx.c_CFLAGS := -x objective-c
       
   234   BUILD_LIBJLI_STATIC_java_md_macosx.c_CFLAGS := -x objective-c
       
   235 
       
   236   LIBJLI_CFLAGS += -DPACKAGE_PATH=\"$(PACKAGE_PATH)\"
       
   237 endif
   185 endif
   238 
   186 
   239 ifeq ($(OPENJDK_TARGET_OS), windows)
   187 ifeq ($(OPENJDK_TARGET_OS), windows)
   240   # Staticically link with c runtime on windows.
       
   241   LIBJLI_CFLAGS_JDKLIB := $(filter-out -MD, $(CFLAGS_JDKLIB))
       
   242   LIBJLI_OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE)
       
   243   # Supply the name of the C runtime lib.
   188   # Supply the name of the C runtime lib.
   244   LIBJLI_CFLAGS += -DMSVCR_DLL_NAME='"$(notdir $(MSVCR_DLL))"'
   189   LIBJLI_CFLAGS += -DMSVCR_DLL_NAME='"$(notdir $(MSVCR_DLL))"'
   245   ifneq ($(MSVCP_DLL), )
   190   ifneq ($(MSVCP_DLL), )
   246     LIBJLI_CFLAGS += -DMSVCP_DLL_NAME='"$(notdir $(MSVCP_DLL))"'
   191     LIBJLI_CFLAGS += -DMSVCP_DLL_NAME='"$(notdir $(MSVCP_DLL))"'
   247   endif
   192   endif
   248 else
       
   249   LIBJLI_CFLAGS_JDKLIB := $(CFLAGS_JDKLIB)
       
   250   LIBJLI_OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE)/jli
       
   251 endif
   193 endif
   252 
   194 
   253 LIBJLI_CFLAGS += $(LIBZ_CFLAGS)
   195 LIBJLI_CFLAGS += $(LIBZ_CFLAGS)
   254 
   196 
   255 ifneq ($(USE_EXTERNAL_LIBZ), true)
   197 ifneq ($(USE_EXTERNAL_LIBZ), true)
   264       )
   206       )
   265 endif
   207 endif
   266 
   208 
   267 $(eval $(call SetupJdkLibrary, BUILD_LIBJLI, \
   209 $(eval $(call SetupJdkLibrary, BUILD_LIBJLI, \
   268     NAME := jli, \
   210     NAME := jli, \
   269     OUTPUT_DIR := $(LIBJLI_OUTPUT_DIR), \
   211     OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
   270     EXCLUDE_FILES := $(LIBJLI_EXCLUDE_FILES), \
   212     EXCLUDE_FILES := $(LIBJLI_EXCLUDE_FILES), \
   271     EXTRA_FILES := $(LIBJLI_EXTRA_FILES), \
   213     EXTRA_FILES := $(LIBJLI_EXTRA_FILES), \
   272     OPTIMIZATION := HIGH, \
   214     OPTIMIZATION := HIGH, \
   273     CFLAGS := $(LIBJLI_CFLAGS_JDKLIB) $(LIBJLI_CFLAGS), \
   215     CFLAGS := $(CFLAGS_JDKLIB) $(LIBJLI_CFLAGS), \
   274     DISABLED_WARNINGS_gcc := maybe-uninitialized, \
   216     DISABLED_WARNINGS_gcc := maybe-uninitialized, \
   275     LDFLAGS := $(LDFLAGS_JDKLIB) \
   217     LDFLAGS := $(LDFLAGS_JDKLIB) \
   276         $(call SET_SHARED_LIBRARY_ORIGIN), \
   218         $(call SET_SHARED_LIBRARY_ORIGIN), \
   277     LDFLAGS_linux := $(call SET_SHARED_LIBRARY_ORIGIN,/..), \
       
   278     LDFLAGS_solaris := $(call SET_SHARED_LIBRARY_ORIGIN,/..), \
       
   279     LIBS_unix := $(LIBZ_LIBS), \
   219     LIBS_unix := $(LIBZ_LIBS), \
   280     LIBS_linux := $(LIBDL) -lpthread, \
   220     LIBS_linux := $(LIBDL) -lpthread, \
   281     LIBS_solaris := $(LIBDL), \
   221     LIBS_solaris := $(LIBDL), \
   282     LIBS_aix := $(LIBDL),\
   222     LIBS_aix := $(LIBDL),\
   283     LIBS_macosx := -framework Cocoa -framework Security -framework ApplicationServices, \
   223     LIBS_macosx := -framework Cocoa -framework Security -framework ApplicationServices, \
   286 
   226 
   287 TARGETS += $(BUILD_LIBJLI)
   227 TARGETS += $(BUILD_LIBJLI)
   288 
   228 
   289 LIBJLI_SRC_DIRS := $(call FindSrcDirsForComponent, java.base, libjli)
   229 LIBJLI_SRC_DIRS := $(call FindSrcDirsForComponent, java.base, libjli)
   290 
   230 
   291 # On windows, the static library has the same suffix as the import library created by
   231 ifeq ($(OPENJDK_TARGET_OS), aix)
   292 # with the shared library, so the static library is given a different name. No harm
   232   # AIX also requires a static libjli because the compiler doesn't support '-rpath'
   293 # in doing it for all platform to reduce complexity.
       
   294 ifeq ($(OPENJDK_TARGET_OS), windows)
       
   295   $(eval $(call SetupNativeCompilation, BUILD_LIBJLI_STATIC, \
   233   $(eval $(call SetupNativeCompilation, BUILD_LIBJLI_STATIC, \
   296       NAME := jli_static, \
   234       NAME := jli_static, \
   297       TYPE := STATIC_LIBRARY, \
   235       TYPE := STATIC_LIBRARY, \
   298       OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE), \
   236       OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE), \
   299       SRC := $(LIBJLI_SRC_DIRS), \
   237       SRC := $(LIBJLI_SRC_DIRS), \
   301       EXTRA_FILES := $(LIBJLI_EXTRA_FILES), \
   239       EXTRA_FILES := $(LIBJLI_EXTRA_FILES), \
   302       OPTIMIZATION := HIGH, \
   240       OPTIMIZATION := HIGH, \
   303       CFLAGS := $(STATIC_LIBRARY_FLAGS) $(LIBJLI_CFLAGS_JDKLIB) $(LIBJLI_CFLAGS) \
   241       CFLAGS := $(STATIC_LIBRARY_FLAGS) $(LIBJLI_CFLAGS_JDKLIB) $(LIBJLI_CFLAGS) \
   304           $(addprefix -I, $(LIBJLI_SRC_DIRS)), \
   242           $(addprefix -I, $(LIBJLI_SRC_DIRS)), \
   305       ARFLAGS := $(ARFLAGS), \
   243       ARFLAGS := $(ARFLAGS), \
   306       OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libjli_static, \
   244       OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libjli_static))
   307   ))
       
   308 
   245 
   309   TARGETS += $(BUILD_LIBJLI_STATIC)
   246   TARGETS += $(BUILD_LIBJLI_STATIC)
   310 
   247 
   311 else ifeq ($(OPENJDK_TARGET_OS), macosx)
   248 endif
   312   #
       
   313   # On macosx they do partial (incremental) linking of libjli_static.a
       
   314   # code it here...rather than add support to NativeCompilation
       
   315   # as this is first time I see it
       
   316   $(eval $(call SetupNativeCompilation, BUILD_LIBJLI_STATIC, \
       
   317       NAME := jli_static, \
       
   318       OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE), \
       
   319       SRC := $(LIBJLI_SRC_DIRS), \
       
   320       EXCLUDE_FILES := $(LIBJLI_EXCLUDE_FILES), \
       
   321       EXTRA_FILES := $(LIBJLI_EXTRA_FILES), \
       
   322       OPTIMIZATION := HIGH, \
       
   323       CFLAGS := $(LIBJLI_CFLAGS_JDKLIB) $(LIBJLI_CFLAGS) \
       
   324           $(addprefix -I, $(LIBJLI_SRC_DIRS)), \
       
   325       LDFLAGS := -nostdlib $(ARFLAGS), \
       
   326       OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libjli_static, \
       
   327   ))
       
   328 
       
   329   ifeq ($(STATIC_BUILD), true)
       
   330     TARGETS += $(BUILD_LIBJLI_STATIC)
       
   331   else
       
   332     $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libjli_static.a: $(BUILD_LIBJLI_STATIC)
       
   333 	$(call install-file)
       
   334 
       
   335     TARGETS += $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libjli_static.a
       
   336   endif
       
   337 
       
   338 else ifeq ($(OPENJDK_TARGET_OS), aix)
       
   339   # AIX also requires a static libjli because the compiler doesn't support '-rpath'
       
   340   $(eval $(call SetupNativeCompilation, BUILD_LIBJLI_STATIC, \
       
   341       NAME := jli_static, \
       
   342       TYPE := STATIC_LIBRARY, \
       
   343       OUTPUT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE), \
       
   344       SRC := $(LIBJLI_SRC_DIRS), \
       
   345       EXCLUDE_FILES := $(LIBJLI_EXCLUDE_FILES), \
       
   346       EXTRA_FILES := $(LIBJLI_EXTRA_FILES), \
       
   347       OPTIMIZATION := HIGH, \
       
   348       CFLAGS := $(STATIC_LIBRARY_FLAGS) $(LIBJLI_CFLAGS_JDKLIB) $(LIBJLI_CFLAGS), \
       
   349       ARFLAGS := $(ARFLAGS), \
       
   350       OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/$(MODULE)/libjli_static))
       
   351 
       
   352   TARGETS += $(BUILD_LIBJLI_STATIC)
       
   353 
       
   354 endif