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