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