SUMMARY = "Java runtime based upon the OpenJDK Project" HOMEPAGE = "http://openjdk.java.net/" LICENSE = "GPL-2.0-with-classpath-exception" LIC_FILES_CHKSUM = "file://LICENSE;md5=3e0b59f8fac05c3c03d4a26bbda13f8f" inherit java autotools gettext qemu pkgconfig inherit openjdk-build-helper AUTOTOOLS_SCRIPT_PATH = "${S}/common/autoconf/" export AUTOCONF_DIR="${AUTOTOOLS_SCRIPT_PATH}" FILESPATH =. "${FILE_DIRNAME}/patches-openjdk-8:" # for weird openjdk-common.inc S = "${WORKDIR}/${OPENJDK_HG_U}-${OPENJDK_CHANGESET}" SRC_URI = " \ ${OPENJDK_URI} \ ${HOTSPOT_URI} \ ${CORBA_URI} \ ${JAXP_URI} \ ${JAXWS_URI} \ ${JDK_URI} \ ${LANGTOOLS_URI} \ ${NASHORN_URI} \ file://LICENSE \ ${PATCHES_URI} \ " do_unpack_extract_submodules () { cd "${S}" # tar --transform tar xjf ${WORKDIR}/${CORBA_FILE_LOCAL} --transform "s,-${CORBA_CHANGESET},,g" tar xjf ${WORKDIR}/${HOTSPOT_FILE_LOCAL} --transform "s,-${HOTSPOT_CHANGESET},,g" tar xjf ${WORKDIR}/${JAXP_FILE_LOCAL} --transform "s,-${JAXP_CHANGESET},,g" tar xjf ${WORKDIR}/${JAXWS_FILE_LOCAL} --transform "s,-${JAXWS_CHANGESET},,g" tar xjf ${WORKDIR}/${JDK_FILE_LOCAL} --transform "s,-${JDK_CHANGESET},,g" tar xjf ${WORKDIR}/${LANGTOOLS_FILE_LOCAL} --transform "s,-${LANGTOOLS_CHANGESET},,g" tar xjf ${WORKDIR}/${NASHORN_FILE_LOCAL} --transform "s,-${NASHORN_CHANGESET},,g" } do_unpack_delete_X11_wrappers() { find ${S}/jdk/src/solaris/classes/sun/awt/X11 -maxdepth 1 -name '*.java' -delete } def package_config_option_cleanup(d): distro_x11 = bb.utils.contains('DISTRO_FEATURES', 'x11', True, False, d) distro_alsa = bb.utils.contains('DISTRO_FEATURES', 'alsa', True, False, d) distro_pulseaudio = bb.utils.contains('DISTRO_FEATURES', 'pulseaudio', True, False, d) with_x11 = bb.utils.contains('PACKAGECONFIG', 'x11', True, False, d) with_cups = bb.utils.contains('PACKAGECONFIG', 'cups', True, False, d) with_alsa = bb.utils.contains('PACKAGECONFIG', 'alsa', True, False, d) with_pulseaudio = bb.utils.contains('PACKAGECONFIG', 'pulseaudio', True, False, d) option_headless = bb.utils.contains('PACKAGECONFIG', 'headless', True, False, d) option_headful = bb.utils.contains('PACKAGECONFIG', 'headful', True, False, d) option_soundless = bb.utils.contains('PACKAGECONFIG', 'soundless', True, False, d) if option_headless and option_headful: option_headless = False if option_headful and not with_x11: with_x11 = True if option_headful and not with_cups: with_cups = True if option_soundless and with_alsa: with_alsa = False if option_soundless and with_pulseaudio: with_pulseaudio = False if with_x11 and not distro_x11: with_x11 = False if with_alsa and not distro_alsa: with_alsa = False if with_pulseaudio and not distro_pulseaudio: with_pulseaudio = False if option_headful and not with_x11: option_headful = False if option_headful and not with_cups: option_headful = False if not option_headless and not with_x11: option_headless = True if not option_headless and not with_cups: option_headless = True if not option_soundless and not with_alsa: option_soundless = True if not option_soundless and not with_pulseaudio: option_soundless = True options = {'make': [], 'cpp': [], 'env': [], 'configure': ["--disable-ccache"] } if option_headful: options['configure'].append("--enable-headful") if option_headless: options['configure'].append("--disable-headful") options['make'].append("BUILD_HEADLESS_ONLY=1") options['make'].append("BUILD_HEADLESS=true") options['cpp'].append("-DHEADLESS=true") if option_soundless: options['make'].append("BUILD_SOUNDLESS_ONLY=1") if not with_x11: options['make'].append("X11_NOT_NEEDED=1") options['env'].append("X11_NOT_NEEDED=yes") if not with_cups: options['make'].append("CUPS_NOT_NEEDED=1") options['env'].append("CUPS_NOT_NEEDED=yes") if not with_alsa: options['make'].append("ALSA_NOT_NEEDED=1") options['env'].append("ALSA_NOT_NEEDED=yes") if not with_pulseaudio: options['make'].append("PULSE_NOT_NEEDED=1") options['env'].append("PULSE_NOT_NEEDED=yes") options = [ ' '.join(options['make']), ' '.join(options['cpp']), ' '.join(options['env']), ' '.join(options['configure']) ] return options def jdk_make_options(d): options = package_config_option_cleanup(d) return options[0] def jdk_cpp_options(d): options = package_config_option_cleanup(d) if not options[1]: return "" return " " + options[1] def jdk_environment_options(d): options = package_config_option_cleanup(d) return options[2] def jdk_configure_options(d): options = package_config_option_cleanup(d) return options[3] do_unpack[postfuncs] += "do_unpack_extract_submodules" do_unpack[postfuncs] += "${@bb.utils.contains('PACKAGECONFIG', 'x11', '', 'do_unpack_delete_X11_wrappers', d)}" do_configure_prepend() { export ${@jdk_environment_options(d)} } # A function that is needed in the Shark builds. def get_llvm_configure_arch(d): import bb; arch = d.getVar('TRANSLATED_TARGET_ARCH', True) if arch == "x86-64" or arch == "i486" or arch == "i586" or arch == "i686": arch = "x86" elif arch == "arm": arch = "arm" elif arch == "mipsel" or arch == "mips": arch = "mips" elif arch == "powerpc" or arch == "powerpc64": arch = "powerpc" else: if 'shark' in d.getVar('PACKAGECONFIG').split(): bb.warn("%s does not support %s in Shark builds yet" % (d.getVar('PN', True), arch) ); return arch # Provides the target architecture to the configure script. export LLVM_CONFIGURE_ARCH="${@get_llvm_configure_arch(d)}" # OpenJDK uses slightly different names for certain arches. We need to know # this to create some files which are expected by the build. def get_jdk_arch(d): import bb jdk_arch = d.getVar('TRANSLATED_TARGET_ARCH', True) if jdk_arch == "x86-64": jdk_arch = "amd64" elif jdk_arch == "powerpc": jdk_arch = "ppc" elif jdk_arch == "powerpc64": jdk_arch = "ppc64" elif (jdk_arch == "i486" or jdk_arch == "i586" or jdk_arch == "i686"): jdk_arch = "i386" return jdk_arch JDK_ARCH = "${@get_jdk_arch(d)}" export DEBUG_BINARIES = "true" ALTERNATIVE_PRIORITY = "50" OPENJDK_UPDATE_VERSION = "${@d.getVar('PV', True).split('b')[0]}" OPENJDK_BUILD_NUMBER = "b${@d.getVar('PV', True).split('b')[1]}" EXTRA_OECONF_append = "\ --with-build-number=${OPENJDK_BUILD_NUMBER} \ --with-update-version=${OPENJDK_UPDATE_VERSION} \ " # Since v6, GCC sets the default C++ standard to C++14 and introduces # dead store elimination by default. OpenJDK 8 is not ready for either # of these changes. FLAGS_GCC6 = "-fno-lifetime-dse -fno-delete-null-pointer-checks" FLAGS_GCC7 = "-fno-lifetime-dse -fno-delete-null-pointer-checks" FLAGS_GCC8 = "-fno-lifetime-dse -fno-delete-null-pointer-checks" # flags for -native, and for bits that need a host-tool during -cross BUILD_CFLAGS_append = " ${@openjdk_build_helper_get_build_cflags(d)}" BUILD_CXXFLAGS_append = " ${@openjdk_build_helper_get_build_cflags(d)}" # flags for -cross TARGET_CFLAGS_append = " ${@openjdk_build_helper_get_target_cflags(d)}" TARGET_CXXFLAGS_append = " ${@openjdk_build_helper_get_target_cflags(d)}"