xref: /OK3568_Linux_fs/buildroot/package/openjdk/openjdk.mk (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun################################################################################
2*4882a593Smuzhiyun#
3*4882a593Smuzhiyun# openjdk
4*4882a593Smuzhiyun#
5*4882a593Smuzhiyun################################################################################
6*4882a593Smuzhiyun
7*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_OPENJDK_VERSION_17),y)
8*4882a593SmuzhiyunOPENJDK_VERSION_MAJOR = 17
9*4882a593SmuzhiyunOPENJDK_VERSION_MINOR = 0.1+12
10*4882a593Smuzhiyunelse
11*4882a593SmuzhiyunOPENJDK_VERSION_MAJOR = 11
12*4882a593SmuzhiyunOPENJDK_VERSION_MINOR = 0.13+8
13*4882a593Smuzhiyunendif
14*4882a593SmuzhiyunOPENJDK_VERSION = $(OPENJDK_VERSION_MAJOR).$(OPENJDK_VERSION_MINOR)
15*4882a593SmuzhiyunOPENJDK_SITE = $(call github,openjdk,jdk$(OPENJDK_VERSION_MAJOR)u,jdk-$(OPENJDK_VERSION))
16*4882a593Smuzhiyun
17*4882a593SmuzhiyunOPENJDK_LICENSE = GPL-2.0+ with exception
18*4882a593SmuzhiyunOPENJDK_LICENSE_FILES = LICENSE
19*4882a593SmuzhiyunOPENJDK_INSTALL_STAGING = YES
20*4882a593Smuzhiyun
21*4882a593Smuzhiyun# OpenJDK requires Alsa, cups, and X11 even for a headless build.
22*4882a593Smuzhiyun# host-zip is needed for the zip executable.
23*4882a593SmuzhiyunOPENJDK_DEPENDENCIES = \
24*4882a593Smuzhiyun	host-gawk \
25*4882a593Smuzhiyun	host-openjdk-bin \
26*4882a593Smuzhiyun	host-pkgconf \
27*4882a593Smuzhiyun	host-zip \
28*4882a593Smuzhiyun	host-zlib \
29*4882a593Smuzhiyun	alsa-lib \
30*4882a593Smuzhiyun	cups \
31*4882a593Smuzhiyun	fontconfig \
32*4882a593Smuzhiyun	giflib \
33*4882a593Smuzhiyun	jpeg \
34*4882a593Smuzhiyun	lcms2 \
35*4882a593Smuzhiyun	libpng \
36*4882a593Smuzhiyun	libusb \
37*4882a593Smuzhiyun	xlib_libXrandr \
38*4882a593Smuzhiyun	xlib_libXrender \
39*4882a593Smuzhiyun	xlib_libXt \
40*4882a593Smuzhiyun	xlib_libXtst \
41*4882a593Smuzhiyun	zlib
42*4882a593Smuzhiyun
43*4882a593Smuzhiyun# JVM variants
44*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_OPENJDK_JVM_VARIANT_CLIENT),y)
45*4882a593SmuzhiyunOPENJDK_JVM_VARIANT = client
46*4882a593Smuzhiyunendif
47*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_OPENJDK_JVM_VARIANT_SERVER),y)
48*4882a593SmuzhiyunOPENJDK_JVM_VARIANT = server
49*4882a593Smuzhiyunendif
50*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_OPENJDK_JVM_VARIANT_ZERO),y)
51*4882a593SmuzhiyunOPENJDK_JVM_VARIANT = zero
52*4882a593SmuzhiyunOPENJDK_DEPENDENCIES += libffi
53*4882a593Smuzhiyunendif
54*4882a593Smuzhiyun
55*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_OPENJDK_FULL_JDK),y)
56*4882a593SmuzhiyunOPENJDK_VARIANT = jdk
57*4882a593SmuzhiyunOPENJDK_MAKE_TARGET = jdk-image
58*4882a593Smuzhiyunelse
59*4882a593SmuzhiyunOPENJDK_VARIANT = jre
60*4882a593SmuzhiyunOPENJDK_MAKE_TARGET = legacy-jre-image
61*4882a593Smuzhiyunendif
62*4882a593Smuzhiyun
63*4882a593Smuzhiyun# OpenJDK installs a file named 'modules' in jre/lib, which gets installed as
64*4882a593Smuzhiyun# /usr/lib/modules. However, with a merged /usr, this conflicts with the
65*4882a593Smuzhiyun# directory named 'modules' installed by the kernel. If OpenJDK gets built
66*4882a593Smuzhiyun# after the kernel, this manifests itself with: "cp: cannot overwrite
67*4882a593Smuzhiyun# directory '/usr/lib/modules with non-directory."
68*4882a593SmuzhiyunOPENJDK_INSTALL_BASE = /usr/lib/jvm
69*4882a593Smuzhiyun
70*4882a593Smuzhiyun# OpenJDK ignores some variables unless passed via the environment.
71*4882a593Smuzhiyun# These variables are PATH, LD, CC, CXX, and CPP.
72*4882a593Smuzhiyun# OpenJDK defaults ld to the ld binary but passes -Xlinker and -z as
73*4882a593Smuzhiyun# arguments during the linking process, which causes compilation failures.
74*4882a593Smuzhiyun# To fix this issue, LD is set to point to gcc.
75*4882a593SmuzhiyunOPENJDK_CONF_ENV = \
76*4882a593Smuzhiyun	PATH=$(BR_PATH) \
77*4882a593Smuzhiyun	CC=$(TARGET_CC) \
78*4882a593Smuzhiyun	CPP=$(TARGET_CPP) \
79*4882a593Smuzhiyun	CXX=$(TARGET_CXX) \
80*4882a593Smuzhiyun	LD=$(TARGET_CC) \
81*4882a593Smuzhiyun	BUILD_SYSROOT_CFLAGS="$(HOST_CFLAGS)" \
82*4882a593Smuzhiyun	BUILD_SYSROOT_LDFLAGS="$(HOST_LDFLAGS)"
83*4882a593Smuzhiyun
84*4882a593SmuzhiyunOPENJDK_CONF_OPTS = \
85*4882a593Smuzhiyun	--disable-full-docs \
86*4882a593Smuzhiyun	--disable-hotspot-gtest \
87*4882a593Smuzhiyun	--disable-manpages \
88*4882a593Smuzhiyun	--disable-warnings-as-errors \
89*4882a593Smuzhiyun	--enable-headless-only \
90*4882a593Smuzhiyun	--enable-openjdk-only \
91*4882a593Smuzhiyun	--enable-unlimited-crypto \
92*4882a593Smuzhiyun	--openjdk-target=$(GNU_TARGET_NAME) \
93*4882a593Smuzhiyun	--with-boot-jdk=$(HOST_OPENJDK_BIN_ROOT_DIR) \
94*4882a593Smuzhiyun	--with-stdc++lib=dynamic \
95*4882a593Smuzhiyun	--with-debug-level=release \
96*4882a593Smuzhiyun	--with-devkit=$(HOST_DIR) \
97*4882a593Smuzhiyun	--with-extra-cflags="$(TARGET_CFLAGS)" \
98*4882a593Smuzhiyun	--with-extra-cxxflags="$(TARGET_CXXFLAGS)" \
99*4882a593Smuzhiyun	--with-extra-ldflags="-Wl,-rpath,$(OPENJDK_INSTALL_BASE)/lib,-rpath,$(OPENJDK_INSTALL_BASE)/lib/$(OPENJDK_JVM_VARIANT)" \
100*4882a593Smuzhiyun	--with-giflib=system \
101*4882a593Smuzhiyun	--with-jobs=$(PARALLEL_JOBS) \
102*4882a593Smuzhiyun	--with-jvm-variants=$(OPENJDK_JVM_VARIANT) \
103*4882a593Smuzhiyun	--with-lcms=system \
104*4882a593Smuzhiyun	--with-libjpeg=system \
105*4882a593Smuzhiyun	--with-libpng=system \
106*4882a593Smuzhiyun	--with-zlib=system \
107*4882a593Smuzhiyun	--with-native-debug-symbols=none \
108*4882a593Smuzhiyun	--without-version-pre \
109*4882a593Smuzhiyun	--with-sysroot=$(STAGING_DIR) \
110*4882a593Smuzhiyun	--with-version-build="$(OPENJDK_VERSION_MAJOR)" \
111*4882a593Smuzhiyun	--with-version-string="$(OPENJDK_VERSION_MAJOR)"
112*4882a593Smuzhiyun
113*4882a593Smuzhiyun# If building for AArch64, use the provided CPU port.
114*4882a593Smuzhiyunifeq ($(BR2_aarch64),y)
115*4882a593SmuzhiyunOPENJDK_CONF_OPTS += --with-abi-profile=aarch64
116*4882a593Smuzhiyunendif
117*4882a593Smuzhiyun
118*4882a593Smuzhiyunifeq ($(BR2_CCACHE),y)
119*4882a593SmuzhiyunOPENJDK_CONF_OPTS += \
120*4882a593Smuzhiyun	--enable-ccache \
121*4882a593Smuzhiyun	--with-ccache-dir=$(BR2_CCACHE_DIR)
122*4882a593Smuzhiyunendif
123*4882a593Smuzhiyun
124*4882a593Smuzhiyun# Autogen and configure are performed in a single step.
125*4882a593Smuzhiyundefine OPENJDK_CONFIGURE_CMDS
126*4882a593Smuzhiyun	chmod +x $(@D)/configure
127*4882a593Smuzhiyun	cd $(@D); $(OPENJDK_CONF_ENV) ./configure autogen $(OPENJDK_CONF_OPTS)
128*4882a593Smuzhiyunendef
129*4882a593Smuzhiyun
130*4882a593Smuzhiyun# Make -jn is unsupported. Instead, set the "--with-jobs=" configure option,
131*4882a593Smuzhiyun# and use $(MAKE1).
132*4882a593Smuzhiyundefine OPENJDK_BUILD_CMDS
133*4882a593Smuzhiyun	$(TARGET_MAKE_ENV) $(OPENJDK_CONF_ENV) $(MAKE1) -C $(@D) $(OPENJDK_MAKE_TARGET)
134*4882a593Smuzhiyunendef
135*4882a593Smuzhiyun
136*4882a593Smuzhiyun# Calling make install always builds and installs the JDK instead of the JRE,
137*4882a593Smuzhiyun# which makes manual installation necessary.
138*4882a593Smuzhiyundefine OPENJDK_INSTALL_TARGET_CMDS
139*4882a593Smuzhiyun	mkdir -p $(TARGET_DIR)$(OPENJDK_INSTALL_BASE)
140*4882a593Smuzhiyun	cp -dpfr $(@D)/build/linux-*-release/images/$(OPENJDK_VARIANT)/* \
141*4882a593Smuzhiyun		$(TARGET_DIR)$(OPENJDK_INSTALL_BASE)/
142*4882a593Smuzhiyun	cd $(TARGET_DIR)/usr/bin && ln -snf ../..$(OPENJDK_INSTALL_BASE)/bin/* .
143*4882a593Smuzhiyunendef
144*4882a593Smuzhiyun
145*4882a593Smuzhiyundefine OPENJDK_INSTALL_STAGING_CMDS
146*4882a593Smuzhiyun	mkdir -p $(STAGING_DIR)/usr/include/jvm
147*4882a593Smuzhiyun	cp -dpfr $(@D)/build/linux-*-release/jdk/include/* \
148*4882a593Smuzhiyun		$(STAGING_DIR)/usr/include/jvm
149*4882a593Smuzhiyunendef
150*4882a593Smuzhiyun
151*4882a593Smuzhiyun# Demos and includes are not needed on the target
152*4882a593Smuzhiyunifeq ($(BR2_PACKAGE_OPENJDK_FULL_JDK),y)
153*4882a593Smuzhiyundefine OPENJDK_REMOVE_UNEEDED_JDK_DIRECTORIES
154*4882a593Smuzhiyun	$(RM) -r $(TARGET_DIR)$(OPENJDK_INSTALL_BASE)/include/
155*4882a593Smuzhiyun	$(RM) -r $(TARGET_DIR)$(OPENJDK_INSTALL_BASE)/demo/
156*4882a593Smuzhiyunendef
157*4882a593SmuzhiyunOPENJDK_TARGET_FINALIZE_HOOKS += OPENJDK_REMOVE_UNEEDED_JDK_DIRECTORIES
158*4882a593Smuzhiyunendif
159*4882a593Smuzhiyun
160*4882a593Smuzhiyun$(eval $(generic-package))
161