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# Include custom extensions if available.
27-include $(CUSTOM_MAKE_DIR)/lib/CoreLibraries.gmk
28
29WIN_VERIFY_LIB := $(JDK_OUTPUTDIR)/objs/libverify/verify.lib
30
31##########################################################################################
32
33BUILD_LIBFDLIBM_OPTIMIZATION := NONE
34
35ifeq ($(OPENJDK_TARGET_OS), solaris)
36  BUILD_LIBFDLIBM_OPTIMIZATION := HIGH
37endif
38
39
40# If FDLIBM_CFLAGS is non-empty we know that we can optimize
41# fdlibm when adding those extra C flags. Currently GCC only.
42LIBFDLIBM_CFLAGS :=
43ifneq ($(FDLIBM_CFLAGS), )
44  BUILD_LIBFDLIBM_OPTIMIZATION := HIGH
45  LIBFDLIBM_CFLAGS := $(FDLIBM_CFLAGS)
46endif
47
48ifneq ($(OPENJDK_TARGET_OS), macosx)
49  # Unfortunately, '-ffp-contract' is only available since gcc 4.6. For ppc64le
50  # that's no problem since ppc64le support only appeared in gcc 4.8.3. But on
51  # ppc64 (big endian) we traditionally compiled with gcc 4.3 which only knows
52  # '-mno-fused-madd'. However, that's still not enough to get the float
53  # computations right - we additionally have to supply '-fno-strict-aliasing'.
54  $(eval $(call SetupNativeCompilation,BUILD_LIBFDLIBM, \
55      STATIC_LIBRARY := fdlibm, \
56      OUTPUT_DIR := $(JDK_OUTPUTDIR)/objs, \
57      SRC := $(JDK_TOPDIR)/src/share/native/java/lang/fdlibm/src, \
58      LANG := C, \
59      OPTIMIZATION := $(BUILD_LIBFDLIBM_OPTIMIZATION), \
60      CFLAGS := $(CFLAGS_JDKLIB) \
61          -I$(JDK_TOPDIR)/src/share/native/java/lang/fdlibm/include, \
62      CFLAGS_windows_debug := -DLOGGING, \
63      CFLAGS_aix := -qfloat=nomaf, \
64      CFLAGS_linux := $(LIBFDLIBM_CFLAGS), \
65      ARFLAGS := $(ARFLAGS), \
66      OBJECT_DIR := $(JDK_OUTPUTDIR)/objs/libfdlibm, \
67      DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES)))
68
69else
70
71  # On macosx the old build does partial (incremental) linking of fdlibm instead of
72  # a plain static library.
73  $(eval $(call SetupNativeCompilation,BUILD_LIBFDLIBM_MAC, \
74      LIBRARY := fdlibm, \
75      OUTPUT_DIR := $(JDK_OUTPUTDIR)/objs/libfdlibm, \
76      SRC := $(JDK_TOPDIR)/src/share/native/java/lang/fdlibm/src, \
77      LANG := C, \
78      CFLAGS := $(CFLAGS_JDKLIB) \
79          -I$(JDK_TOPDIR)/src/share/native/java/lang/fdlibm/include, \
80      LDFLAGS := -nostdlib -r -arch x86_64, \
81      OBJECT_DIR := $(JDK_OUTPUTDIR)/objs/libfdlibm, \
82      DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES)))
83
84  BUILD_LIBFDLIBM := $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)fdlibm$(STATIC_LIBRARY_SUFFIX)
85  $(BUILD_LIBFDLIBM): $(BUILD_LIBFDLIBM_MAC)
86	$(call install-file)
87
88endif
89
90BUILD_LIBRARIES += $(BUILD_LIBFDLIBM)
91
92##########################################################################################
93
94BUILD_LIBVERIFY_SRC := check_code.c check_format.c
95
96ifeq ($(OPENJDK_TARGET_OS), solaris)
97  ifneq ($(OPENJDK_TARGET_CPU), x86_64)
98    BUILD_LIBVERIFY_REORDER := $(JDK_TOPDIR)/make/mapfiles/libverify/reorder-$(OPENJDK_TARGET_CPU)
99  endif
100endif
101
102LIBVERIFY_OPTIMIZATION := HIGH
103ifneq ($(findstring $(OPENJDK_TARGET_OS), solaris linux bsd), )
104  ifeq ($(ENABLE_DEBUG_SYMBOLS), true)
105    LIBVERIFY_OPTIMIZATION := LOW
106  endif
107endif
108
109$(eval $(call SetupNativeCompilation,BUILD_LIBVERIFY, \
110    LIBRARY := verify, \
111    OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
112    SRC := $(JDK_TOPDIR)/src/share/native/common, \
113    INCLUDE_FILES := $(BUILD_LIBVERIFY_SRC), \
114    LANG := C, \
115    OPTIMIZATION := $(LIBVERIFY_OPTIMIZATION), \
116    CFLAGS := $(CFLAGS_JDKLIB), \
117    MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libverify/mapfile-vers, \
118    LDFLAGS := $(LDFLAGS_JDKLIB) \
119        $(call SET_SHARED_LIBRARY_ORIGIN), \
120    LDFLAGS_SUFFIX_posix := -ljvm -lc, \
121    LDFLAGS_SUFFIX_windows := jvm.lib, \
122    VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/windows/resource/version.rc, \
123    RC_FLAGS := $(RC_FLAGS) \
124        -D "JDK_FNAME=verify.dll" \
125        -D "JDK_INTERNAL_NAME=verify" \
126        -D "JDK_FTYPE=0x2L", \
127    REORDER := $(BUILD_LIBVERIFY_REORDER), \
128    OBJECT_DIR := $(JDK_OUTPUTDIR)/objs/libverify, \
129    DEBUG_SYMBOLS := true))
130
131BUILD_LIBRARIES += $(BUILD_LIBVERIFY)
132
133##########################################################################################
134
135# Allow a custom makefile to add extra src dirs
136LIBJAVA_SRC_DIRS += $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/java/lang \
137    $(JDK_TOPDIR)/src/share/native/java/lang \
138    $(JDK_TOPDIR)/src/share/native/java/lang/reflect \
139    $(JDK_TOPDIR)/src/share/native/java/io \
140    $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/java/io \
141    $(JDK_TOPDIR)/src/share/native/java/nio \
142    $(JDK_TOPDIR)/src/share/native/java/security \
143    $(JDK_TOPDIR)/src/share/native/common \
144    $(JDK_TOPDIR)/src/share/native/sun/misc \
145    $(JDK_TOPDIR)/src/share/native/sun/reflect \
146    $(JDK_TOPDIR)/src/share/native/java/util \
147    $(JDK_TOPDIR)/src/share/native/java/util/concurrent/atomic \
148    $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/common \
149    $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/java/util
150
151ifeq ($(OPENJDK_TARGET_OS), windows)
152  LIBJAVA_SRC_DIRS += $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/util/locale/provider
153else ifeq ($(OPENJDK_TARGET_OS), macosx)
154  LIBJAVA_SRC_DIRS += $(JDK_TOPDIR)/src/macosx/native/sun/util/locale/provider
155endif
156
157ifeq ($(OPENJDK_TARGET_OS), linux)
158  LIBJAVA_SRC_DIRS += $(JDK_TOPDIR)/src/linux/native/jdk/internal/platform/cgroupv1
159endif
160
161ifeq ($(OPENJDK_TARGET_OS), windows)
162  LIBJAVA_SRC_DIRS += $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/security/provider \
163      $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/io
164endif
165
166# Make it possible to override this variable
167ifeq ($(OPENJDK_TARGET_OS), linux)
168  # Linux-only symbol Java_jdk_internal_platform_cgroupv1_Metrics_isUseContainerSupport
169  LIBJAVA_MAPFILE ?= $(JDK_TOPDIR)/make/mapfiles/libjava/mapfile-linux
170else
171  LIBJAVA_MAPFILE ?= $(JDK_TOPDIR)/make/mapfiles/libjava/mapfile-vers
172endif
173
174LIBJAVA_CFLAGS := $(foreach dir, $(LIBJAVA_SRC_DIRS), -I$(dir)) \
175    -I$(JDK_TOPDIR)/src/share/native/java/lang/fdlibm/include \
176    -DARCHPROPNAME='"$(OPENJDK_TARGET_CPU_OSARCH)"'
177
178LIBJAVA_CFLAGS += -DJDK_MAJOR_VERSION='"$(JDK_MAJOR_VERSION)"' \
179    -DJDK_MINOR_VERSION='"$(JDK_MINOR_VERSION)"' \
180    -DJDK_MICRO_VERSION='"$(JDK_MICRO_VERSION)"' \
181     -DJDK_BUILD_NUMBER='"$(JDK_BUILD_NUMBER)"'  \
182     $(VERSION_CFLAGS)
183
184ifneq (, $(JDK_UPDATE_VERSION))
185  LIBJAVA_CFLAGS += -DJDK_UPDATE_VERSION='"$(JDK_UPDATE_VERSION)"'
186endif
187
188LIBJAVA_EXCLUDE_FILES := check_code.c check_format.c jspawnhelper.c
189
190ifneq ($(OPENJDK_TARGET_OS), macosx)
191  LIBJAVA_EXCLUDE_FILES += java_props_macosx.c
192else
193  BUILD_LIBJAVA_java_props_md.c_CFLAGS := -x objective-c
194  BUILD_LIBJAVA_java_props_macosx.c_CFLAGS := -x objective-c
195endif
196
197ifeq ($(OPENJDK_TARGET_OS), windows)
198  LIBJAVA_EXCLUDE_FILES += \
199      UNIXProcess_md.c \
200      UnixFileSystem_md.c \
201      FileSystemPreferences.c
202else
203  LIBJAVA_EXCLUDE_FILES += \
204      ProcessImpl_md.c \
205      WinNTFileSystem_md.c \
206      dirent_md.c \
207      WindowsPreferences.c \
208      sun/security/provider/WinCAPISeedGenerator.c \
209      sun/io/Win32ErrorMode.c
210endif
211
212ifeq ($(OPENJDK_TARGET_OS), solaris)
213  ifneq ($(OPENJDK_TARGET_CPU), x86_64)
214    LIBJAVA_REORDER := $(JDK_TOPDIR)/make/mapfiles/libjava/reorder-$(OPENJDK_TARGET_CPU)
215  endif
216endif
217
218$(eval $(call SetupNativeCompilation,BUILD_LIBJAVA, \
219    LIBRARY := java, \
220    OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
221    SRC := $(LIBJAVA_SRC_DIRS), \
222    EXCLUDES := fdlibm/src zip, \
223    EXCLUDE_FILES := $(LIBJAVA_EXCLUDE_FILES), \
224    LANG := C, \
225    OPTIMIZATION := HIGH, \
226    CFLAGS := $(CFLAGS_JDKLIB) \
227        $(LIBJAVA_CFLAGS), \
228    MAPFILE := $(LIBJAVA_MAPFILE), \
229    LDFLAGS := $(LDFLAGS_JDKLIB) \
230        $(call SET_SHARED_LIBRARY_ORIGIN), \
231    LDFLAGS_SUFFIX_posix := -ljvm -lverify, \
232    LDFLAGS_SUFFIX_solaris := -lsocket -lnsl -lscf $(LIBDL) $(BUILD_LIBFDLIBM) -lc, \
233    LDFLAGS_SUFFIX_linux := $(LIBDL) $(BUILD_LIBFDLIBM), \
234    LDFLAGS_SUFFIX_aix := $(LIBDL) $(BUILD_LIBFDLIBM) -lm,\
235    LDFLAGS_SUFFIX_bsd := $(BUILD_LIBFDLIBM), \
236    LDFLAGS_SUFFIX_macosx := -L$(JDK_OUTPUTDIR)/objs/ -lfdlibm \
237        -framework CoreFoundation \
238        -framework Foundation \
239        -framework Security -framework SystemConfiguration, \
240    LDFLAGS_SUFFIX_windows := -export:winFileHandleOpen -export:handleLseek \
241        -export:getErrorString \
242        jvm.lib $(BUILD_LIBFDLIBM) $(WIN_VERIFY_LIB) \
243        shell32.lib delayimp.lib -DELAYLOAD:shell32.dll \
244        advapi32.lib version.lib, \
245    VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/windows/resource/version.rc, \
246    RC_FLAGS := $(RC_FLAGS) \
247        -D "JDK_FNAME=java.dll" \
248        -D "JDK_INTERNAL_NAME=java" \
249        -D "JDK_FTYPE=0x2L", \
250    REORDER := $(LIBJAVA_REORDER), \
251    OBJECT_DIR := $(JDK_OUTPUTDIR)/objs/libjava, \
252    DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES)))
253
254BUILD_LIBRARIES += $(BUILD_LIBJAVA)
255
256$(BUILD_LIBJAVA): $(LIBJLI_BINARY)
257
258$(BUILD_LIBJAVA): $(BUILD_LIBVERIFY)
259
260$(BUILD_LIBJAVA): $(BUILD_LIBFDLIBM)
261
262##########################################################################################
263
264BUILD_LIBZIP_EXCLUDES :=
265ifeq ($(USE_EXTERNAL_LIBZ), true)
266  LIBZ := -lz
267  LIBZIP_EXCLUDES += zlib
268else
269  ZLIB_CPPFLAGS := -I$(JDK_TOPDIR)/src/share/native/java/util/zip/zlib
270endif
271
272BUILD_LIBZIP_REORDER :=
273ifeq ($(OPENJDK_TARGET_OS), solaris)
274  ifneq ($(OPENJDK_TARGET_CPU), x86_64)
275    BUILD_LIBZIP_REORDER := $(JDK_TOPDIR)/make/mapfiles/libzip/reorder-$(OPENJDK_TARGET_CPU)
276  endif
277endif
278
279ifeq ($(LIBZIP_CAN_USE_MMAP), true)
280  BUILD_LIBZIP_MMAP := -DUSE_MMAP
281endif
282
283$(eval $(call SetupNativeCompilation,BUILD_LIBZIP, \
284    LIBRARY := zip, \
285    OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
286    LANG := C, \
287    OPTIMIZATION := LOW, \
288    SRC := $(JDK_TOPDIR)/src/share/native/java/util/zip, \
289    EXCLUDES := $(LIBZIP_EXCLUDES), \
290    CFLAGS := $(CFLAGS_JDKLIB) \
291        $(ZLIB_CPPFLAGS) \
292        -I$(JDK_TOPDIR)/src/share/native/java/io \
293        -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/java/io, \
294    CFLAGS_posix := $(BUILD_LIBZIP_MMAP) -UDEBUG, \
295    MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libzip/mapfile-vers, \
296    REORDER := $(BUILD_LIBZIP_REORDER), \
297    LDFLAGS := $(LDFLAGS_JDKLIB) \
298        $(call SET_SHARED_LIBRARY_ORIGIN) \
299        $(EXPORT_ZIP_FUNCS), \
300    LDFLAGS_windows := -export:ZIP_Open -export:ZIP_Close -export:ZIP_FindEntry \
301        -export:ZIP_ReadEntry -export:ZIP_GetNextEntry -export:ZIP_CRC32 jvm.lib \
302        $(WIN_JAVA_LIB), \
303    LDFLAGS_SUFFIX_linux := -ljvm -ljava $(LIBZ), \
304    LDFLAGS_SUFFIX_solaris := -ljvm -ljava $(LIBZ) -lc, \
305    LDFLAGS_SUFFIX_aix := -ljvm -ljava $(LIBZ),\
306    LDFLAGS_SUFFIX_bsd := -ljvm -ljava $(LIBZ), \
307    LDFLAGS_SUFFIX_macosx := $(LIBZ) -ljava -ljvm, \
308    VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/windows/resource/version.rc, \
309    RC_FLAGS := $(RC_FLAGS) \
310        -D "JDK_FNAME=zip.dll" \
311        -D "JDK_INTERNAL_NAME=zip" \
312        -D "JDK_FTYPE=0x2L", \
313    OBJECT_DIR := $(JDK_OUTPUTDIR)/objs/libzip, \
314    DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES)))
315
316
317$(BUILD_LIBZIP): $(BUILD_LIBJAVA)
318
319BUILD_LIBRARIES += $(BUILD_LIBZIP)
320
321##########################################################################################
322
323$(eval $(call SetupNativeCompilation,BUILD_LIBUNPACK, \
324    LIBRARY := unpack, \
325    OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
326    SRC := $(JDK_TOPDIR)/src/share/native/com/sun/java/util/jar/pack, \
327    EXCLUDE_FILES := main.cpp, \
328    LANG := C++, \
329    OPTIMIZATION := LOW, \
330    CFLAGS := $(CXXFLAGS_JDKLIB) \
331        -DNO_ZLIB -DUNPACK_JNI -DFULL, \
332    CFLAGS_release := -DPRODUCT, \
333    MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libunpack/mapfile-vers, \
334    LDFLAGS := $(LDFLAGS_JDKLIB) $(LDFLAGS_CXX_JDK) \
335        $(call SET_SHARED_LIBRARY_ORIGIN), \
336    LDFLAGS_windows := -map:$(JDK_OUTPUTDIR)/objs/unpack.map -debug \
337        jvm.lib $(WIN_JAVA_LIB), \
338    LDFLAGS_SUFFIX_posix := -ljvm $(LIBCXX) -ljava -lc, \
339    OBJECT_DIR := $(JDK_OUTPUTDIR)/objs/libunpack, \
340    VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/windows/resource/version.rc, \
341    RC_FLAGS := $(RC_FLAGS) \
342        -D "JDK_FNAME=unpack.dll" \
343        -D "JDK_INTERNAL_NAME=unpack" \
344        -D "JDK_FTYPE=0x2L", \
345    DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES)))
346
347$(BUILD_LIBUNPACK): $(BUILD_LIBJAVA)
348
349BUILD_LIBRARIES += $(BUILD_LIBUNPACK)
350
351##########################################################################################
352
353BUILD_LIBJLI_SRC_DIRS := $(JDK_TOPDIR)/src/share/bin $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/bin
354LIBJLI_CFLAGS := $(CFLAGS_JDKLIB) $(foreach dir, $(BUILD_LIBJLI_SRC_DIRS), -I$(dir))
355
356BUILD_LIBJLI_FILES := \
357    java.c \
358    splashscreen_stubs.c \
359    parse_manifest.c \
360    version_comp.c \
361    wildcard.c \
362    jli_util.c
363
364ifeq ($(JVM_VARIANT_ZERO), true)
365  ERGO_FAMILY := zero
366else
367  ifeq ($(OPENJDK_TARGET_CPU_ARCH), x86)
368    ERGO_FAMILY := i586
369  else
370    ERGO_FAMILY := $(OPENJDK_TARGET_CPU_ARCH)
371  endif
372endif
373
374ifeq ($(OPENJDK_TARGET_OS), macosx)
375  LIBJLI_CFLAGS += -I$(JDK_TOPDIR)/src/macosx/bin
376  BUILD_LIBJLI_SRC_DIRS += $(JDK_TOPDIR)/src/macosx/bin
377  BUILD_LIBJLI_FILES += java_md_common.c java_md_macosx.c
378
379  BUILD_LIBJLI_java_md_macosx.c_CFLAGS := -x objective-c
380  BUILD_LIBJLI_STATIC_java_md_macosx.c_CFLAGS := -x objective-c
381endif
382
383ifeq ($(OPENJDK_TARGET_OS), windows)
384  BUILD_LIBJLI_FILES += java_md.c \
385      cmdtoargs.c
386  # Staticically link with c runtime on windows.
387  LIBJLI_CFLAGS := $(filter-out -MD, $(LIBJLI_CFLAGS))
388  # Supply the name of the C runtime lib.
389  LIBJLI_CFLAGS += -DMSVCR_DLL_NAME='"$(notdir $(MSVCR_DLL))"'
390  ifneq ($(MSVCP_DLL), )
391    LIBJLI_CFLAGS += -DMSVCP_DLL_NAME='"$(notdir $(MSVCP_DLL))"'
392  endif
393else ifneq ($(OPENJDK_TARGET_OS), macosx)
394
395  BUILD_LIBJLI_FILES += java_md_common.c
396  BUILD_LIBJLI_FILES += java_md_solinux.c ergo.c
397
398  ERGO_ARCH_FILE = ergo_$(ERGO_FAMILY).c
399
400  # if the architecture specific ergo file exists then
401  # use it, else use the generic definitions from ergo.c
402  ifneq ($(wildcard $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/bin/$(ERGO_ARCH_FILE)), )
403    BUILD_LIBJLI_FILES += $(ERGO_ARCH_FILE)
404  else # !ERGO_ARCH_FILE
405    LIBJLI_CFLAGS += -DUSE_GENERIC_ERGO
406  endif # ERGO_ARCH_FILE
407endif #WINDOWS
408
409# Append defines depending on target platform
410LIBJLI_CFLAGS += $(OPENJDK_TARGET_CPU_JLI_CFLAGS)
411
412ifeq ($(OPENJDK_TARGET_OS), macosx)
413  LIBJLI_CFLAGS += -DPACKAGE_PATH=\"$(PACKAGE_PATH)\"
414  LIBJLI_CFLAGS += -mmacosx-version-min=$(MACOSX_VERSION_MIN)
415endif
416
417ifeq ($(OPENJDK_TARGET_OS), bsd)
418  LIBJLI_CFLAGS += -DPACKAGE_PATH=\"$(PACKAGE_PATH)\"
419endif
420
421ifneq ($(USE_EXTERNAL_LIBZ), true)
422  BUILD_LIBJLI_SRC_DIRS += $(JDK_TOPDIR)/src/share/native/java/util/zip/zlib
423  LIBJLI_CFLAGS += $(ZLIB_CPPFLAGS)
424  BUILD_LIBJLI_FILES += \
425      inflate.c \
426      inftrees.c \
427      inffast.c \
428      zadler32.c \
429      zcrc32.c \
430      zutil.c
431endif
432
433ifeq ($(OPENJDK_TARGET_OS), windows)
434  LIBJLI_OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE)
435else
436  LIBJLI_OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE)/jli
437endif
438
439$(eval $(call SetupNativeCompilation,BUILD_LIBJLI, \
440    LIBRARY := jli, \
441    OUTPUT_DIR := $(LIBJLI_OUTPUT_DIR), \
442    SRC := $(BUILD_LIBJLI_SRC_DIRS), \
443    INCLUDE_FILES := $(BUILD_LIBJLI_FILES), \
444    LANG := C, \
445    OPTIMIZATION := HIGH, \
446    CFLAGS := $(LIBJLI_CFLAGS), \
447    MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libjli/mapfile-vers, \
448    LDFLAGS := $(LDFLAGS_JDKLIB) \
449        $(call SET_SHARED_LIBRARY_ORIGIN), \
450    LDFLAGS_linux := $(call SET_SHARED_LIBRARY_ORIGIN,/..), \
451    LDFLAGS_solaris := $(call SET_SHARED_LIBRARY_ORIGIN,/..), \
452    LDFLAGS_bsd := $(call SET_SHARED_LIBRARY_ORIGIN,/..), \
453    LDFLAGS_macosx := -framework Cocoa -framework Security -framework ApplicationServices -mmacosx-version-min=$(MACOSX_VERSION_MIN), \
454    LDFLAGS_SUFFIX_solaris := $(LIBZ) $(LIBDL) -lc, \
455    LDFLAGS_SUFFIX_linux := $(LIBZ) $(LIBDL) -lc -lpthread, \
456    LDFLAGS_SUFFIX_aix := $(LIBZ) $(LIBDL),\
457    LDFLAGS_SUFFIX_macosx := $(LIBZ), \
458    LDFLAGS_SUFFIX_bsd := $(LIBZ) -pthread, \
459    LDFLAGS_SUFFIX_windows := \
460        -export:JLI_Launch \
461        -export:JLI_ManifestIterate \
462        -export:JLI_SetTraceLauncher \
463        -export:JLI_ReportErrorMessage \
464        -export:JLI_ReportErrorMessageSys \
465        -export:JLI_ReportMessage \
466        -export:JLI_ReportExceptionDescription \
467        -export:JLI_MemAlloc \
468        -export:JLI_CmdToArgs \
469        -export:JLI_GetStdArgc \
470        -export:JLI_GetStdArgs \
471        advapi32.lib \
472        comctl32.lib \
473        user32.lib, \
474    VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/windows/resource/version.rc, \
475    RC_FLAGS := $(RC_FLAGS) \
476        -D "JDK_FNAME=jli.dll" \
477        -D "JDK_INTERNAL_NAME=jli" \
478        -D "JDK_FTYPE=0x2L", \
479    OBJECT_DIR := $(JDK_OUTPUTDIR)/objs/libjli, \
480    DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES)))
481
482BUILD_LIBRARIES += $(BUILD_LIBJLI)
483
484# On windows, the static library has the same suffix as the import library created by
485# with the shared library, so the static library is given a different name. No harm
486# in doing it for all platform to reduce complexity.
487ifeq ($(OPENJDK_TARGET_OS), windows)
488  $(eval $(call SetupNativeCompilation,BUILD_LIBJLI_STATIC, \
489      STATIC_LIBRARY := jli_static, \
490      OUTPUT_DIR := $(JDK_OUTPUTDIR)/objs, \
491      SRC := $(BUILD_LIBJLI_SRC_DIRS), \
492      INCLUDE_FILES := $(BUILD_LIBJLI_FILES), \
493      LANG := C, \
494      OPTIMIZATION := HIGH, \
495      CFLAGS := $(STATIC_LIBRARY_FLAGS) $(LIBJLI_CFLAGS), \
496      ARFLAGS := $(ARFLAGS), \
497      OBJECT_DIR := $(JDK_OUTPUTDIR)/objs/libjli_static, \
498      DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES)))
499
500  BUILD_LIBRARIES += $(BUILD_LIBJLI_STATIC)
501
502else ifneq ($(findstring $(OPENJDK_TARGET_OS), $(BSD_STATIC_LIBJLI) macosx), )
503  #
504  # On BSD they do partial (incremental) linking of libjli_static.a
505  # code it here...rather than add support to NativeCompilation
506  # as this is first time I see it
507  $(eval $(call SetupNativeCompilation,BUILD_LIBJLI_STATIC, \
508      LIBRARY := jli_static, \
509      OUTPUT_DIR := $(JDK_OUTPUTDIR)/objs, \
510      SRC := $(BUILD_LIBJLI_SRC_DIRS), \
511      INCLUDE_FILES := $(BUILD_LIBJLI_FILES), \
512      LANG := C, \
513      OPTIMIZATION := HIGH, \
514      CFLAGS := $(CFLAGS_JDKLIB) $(LIBJLI_CFLAGS), \
515      LDFLAGS := -nostdlib -r, \
516      LDFLAGS_macosx := -mmacosx-version-min=$(MACOSX_VERSION_MIN), \
517      OBJECT_DIR := $(JDK_OUTPUTDIR)/objs/libjli_static, \
518      DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES)))
519
520  $(JDK_OUTPUTDIR)/objs/libjli_static.a: $(BUILD_LIBJLI_STATIC)
521	$(call install-file)
522
523  BUILD_LIBRARIES += $(JDK_OUTPUTDIR)/objs/libjli_static.a
524
525else ifeq ($(OPENJDK_TARGET_OS), aix)
526  # AIX also requires a static libjli because the compiler doesn't support '-rpath'
527  $(eval $(call SetupNativeCompilation,BUILD_LIBJLI_STATIC,\
528      STATIC_LIBRARY:=jli_static,\
529      OUTPUT_DIR:=$(JDK_OUTPUTDIR)/objs,\
530      SRC:=$(BUILD_LIBJLI_SRC_DIRS),\
531      INCLUDE_FILES:=$(BUILD_LIBJLI_FILES),\
532      LANG:=C,\
533      OPTIMIZATION:=HIGH, \
534      CFLAGS:=$(STATIC_LIBRARY_FLAGS) $(LIBJLI_CFLAGS),\
535      ARFLAGS:=$(ARFLAGS),\
536      OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjli_static))
537
538  BUILD_LIBRARIES += $(JDK_OUTPUTDIR)/objs/libjli_static.a
539
540endif
541
542##########################################################################################
543
544ifeq ($(OPENJDK_TARGET_OS), bsd)
545  BSD_ICONV_CFLAGS:= -I$(PACKAGE_PATH)/include
546  ifneq ($(OPENJDK_TARGET_OS_VENDOR), openbsd)
547    BSD_ICONV_CFLAGS += -DLIBICONV_PLUG
548  endif
549endif
550
551$(eval $(call SetupNativeCompilation,BUILD_LIBNPT, \
552    LIBRARY := npt, \
553    OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
554    SRC := $(JDK_TOPDIR)/src/share/npt $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/npt, \
555    LANG := C, \
556    OPTIMIZATION := LOW, \
557    CFLAGS := $(CFLAGS_JDKLIB) \
558        -I$(JDK_TOPDIR)/src/share/npt \
559        -I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/npt, \
560    CFLAGS_bsd := $(BSD_ICONV_CFLAGS), \
561    MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libnpt/mapfile-vers, \
562    LDFLAGS := $(LDFLAGS_JDKLIB) \
563        $(call SET_SHARED_LIBRARY_ORIGIN), \
564    LDFLAGS_bsd := , \
565    LDFLAGS_macosx := -liconv, \
566    LDFLAGS_SUFFIX_windows := -export:nptInitialize -export:nptTerminate, \
567    LDFLAGS_SUFFIX_solaris := -lc, \
568    VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/windows/resource/version.rc, \
569    RC_FLAGS := $(RC_FLAGS) \
570        -D "JDK_FNAME=npt.dll" \
571        -D "JDK_INTERNAL_NAME=npt" \
572        -D "JDK_FTYPE=0x2L", \
573    OBJECT_DIR := $(JDK_OUTPUTDIR)/objs/libnpt, \
574    DEBUG_SYMBOLS := true))
575
576BUILD_LIBRARIES += $(BUILD_LIBNPT)
577