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