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