java-21-openjdk/SOURCES/openjdk-devkit.specfile

231 lines
7.3 KiB
Plaintext

# Spec file for building a devkit for OpenJDK builds
# We do not want debug packages
%global debug_package %{nil}
# Arch definitions from java-*-openjdk RPM
%global aarch64 aarch64 arm64 armv8
# x86 is not supported by OpenJDK 17
ExcludeArch: %{ix86}
# New Version-String scheme-style defines
%global featurever 21
%global interimver 0
%global updatever 5
%global patchver 0
%global buildver 11
# Define JDK versions
%global newjavaver %{featurever}.%{interimver}.%{updatever}.%{patchver}
%global javaver %{featurever}
# Strip up to 6 trailing zeros in newjavaver, as the JDK does, to get the correct version used in filenames
%global filever %(svn=%{newjavaver}; for i in 1 2 3 4 5 6 ; do svn=${svn%%.0} ; done; echo ${svn})
# The tag used to create the OpenJDK tarball
%global vcstag jdk-%{filever}+%{buildver}%{?tagsuffix:-%{tagsuffix}}
# Define milestone (EA for pre-releases, GA for releases)
# Release will be (where N is usually a number starting at 1):
# - 0.N%%{?extraver}%%{?dist} for EA releases,
# - N%%{?extraver}{?dist} for GA releases
%global is_ga 1
%if %{is_ga}
%global build_type GA
%global ea_designator ""
%global ea_designator_zip %{nil}
%global extraver %{nil}
%global eaprefix %{nil}
%else
%global build_type EA
%global ea_designator ea
%global ea_designator_zip -%{ea_designator}
%global extraver .%{ea_designator}
%global eaprefix 0.
%endif
# Date devkit RPMs were download
%global rpm_download_date 20250117
Name: openjdk-devkit
Version: 1.0
Release: 9%{?dist}
License: GPLv2
URL: http://openjdk.java.net/
Summary: OpenJDK Devkit
# The source tarball, generated using generate_source_tarball.sh
Source0: https://openjdk-sources.osci.io/openjdk%{featurever}/open%{vcstag}%{ea_designator_zip}.tar.xz
# The buildroot RPMs for each architecture
Source1: devkit-rpms-aarch64-%{rpm_download_date}.tar.xz
Source2: devkit-rpms-ppc64le-%{rpm_download_date}.tar.xz
Source3: devkit-rpms-s390x-%{rpm_download_date}.tar.xz
Source4: devkit-rpms-x86_64-%{rpm_download_date}.tar.xz
# Toolchain sources
Source5: binutils-2.39.tar.gz
Source6: gcc-11.3.0.tar.xz
Source7: gmp-6.2.1.tar.bz2
Source8: mpc-1.2.1.tar.gz
Source9: mpfr-4.1.1.tar.bz2
Source10: gdb-11.2.tar.xz
# Devkit patches; see https://github.com/rh-openjdk/jdk/tree/devkit
# To regenerate, use git format-patch -N jdk21u/master
# Add RHEL RPM URLs and turn off robots
Patch0: 0001-Allow-devkit-to-work-with-RHEL.patch
# Turn off multilib on x86_64
Patch1: 0002-Disable-multilib-on-x86_64.patch
# Improve build logging (OPENJDK-3071)
Patch2: 0003-Log-devkit-build-to-stdout.patch
# Remove .comment sections from sysroot objects
Patch3: 0004-devkit-Remove-.comment-sections-from-sysroot-objects.patch
# Configure binutils with --enable-deterministic-archives
Patch4: 0005-Tools.gmk-Configure-binutils-with-enable-determinist.patch
# Configure gcc with --enable-linker-build-id (OPENJDK-3068)
Patch5: 0006-Tools.gmk-Add-enable-linker-build-id-to-gcc-build.patch
# Exclude systemtap-sdt-devel on s390x & ppc64* (OPENJDK-3070)
Patch6: 0007-Tools.gmk-Exclude-systemtap-sdt-devel-on-s390x-ppc64.patch
# Use update repository on RHEL rather than GA (OPENJDK-3589)
Patch7: 0008-Tools.gmk-Use-update-repository-on-RHEL-rather-than-.patch
BuildRequires: make autoconf automake libtool gcc gcc-c++ wget glibc-devel texinfo tar bison
# Setup variables to reference correct sources
%ifarch %{aarch64}
%global rpmtarball %{SOURCE1}
%endif
%ifarch ppc64le
%global rpmtarball %{SOURCE2}
%endif
%ifarch s390x
%global rpmtarball %{SOURCE3}
%endif
%ifarch x86_64
%global rpmtarball %{SOURCE4}
%endif
%description
OpenJDK Devkit
%prep
# Unpack OpenJDK sources only in build directory
%setup -q -T -c -a 0
# This syntax is deprecated:
# %patchN [...]
# and should be replaced with:
# %patch -PN [...]
# For example:
# %patch1001 -p1
# becomes:
# %patch -P1001 -p1
# The replacement format suggested by recent (circa Fedora 38) RPM
# deprecation messages:
# %patch N [...]
# is not backward-compatible with prior (circa RHEL-8) versions of
# rpmbuild.
pushd jdk-*
%patch -P0 -p1
%patch -P1 -p1
%patch -P2 -p1
%patch -P3 -p1
%patch -P4 -p1
%patch -P5 -p1
%patch -P6 -p1
%patch -P7 -p1
popd
mkdir -p devkit/download
pushd devkit/download
tar -xJf %{rpmtarball}
ln -s %{SOURCE5}
ln -s %{SOURCE6}
ln -s %{SOURCE7}
ln -s %{SOURCE8}
ln -s %{SOURCE9}
ln -s %{SOURCE10}
%build
devkit_dir=$(pwd)/devkit
today=$(date +%Y%m%d)
arch=%{_target_cpu}
result_name=${arch}-linux-gnu-to-${arch}-linux-gnu
result_path=result/${result_name}
pushd jdk-*/make/devkit
# Build devkit first using the native toolchain,
# than again using itself
for variant in bootstrap product ; do
if [ -e ${devkit_dir}-bootstrap/${result_path}/bin/gcc ] ; then
ROOTDIR=${devkit_dir}-bootstrap/${result_path};
BINDIR=${ROOTDIR}/bin;
TOOLS="CC=${BINDIR}/gcc CXX=${BINDIR}/g++ LD=${BINDIR}/ld \
AR=${BINDIR}/ar AS=${BINDIR}/as RANLIB=${BINDIR}/ranlib \
OBJDUMP=${BINDIR}/objdump"
LIBPATH="${ROOTDIR}/lib64:${ROOTDIR}/lib"
else
TOOLS="CC=$(which gcc) CXX=$(which g++) LD=$(which ld) \
AR=$(which ar) AS=$(which as) RANLIB=$(which ranlib) \
OBJDUMP=$(which objdump)"
fi
mkdir -p ${devkit_dir}-${variant}
ln -s ${devkit_dir}/download ${devkit_dir}-${variant}
LD_LIBRARY_PATH="${LIBPATH}" \
make -f Tools.gmk all ${TOOLS} \
HOST=${arch}-linux-gnu \
BUILD=${arch}-linux-gnu \
RESULT=${devkit_dir}-${variant}/result \
OUTPUT_ROOT=${devkit_dir}-${variant} \
TARGET=${arch}-linux-gnu \
PREFIX=${devkit_dir}-${variant}/${result_path} \
BASE_OS=RHEL
done
make -r -f Tars.gmk \
SRC_DIR=${devkit_dir}-product/${result_path} \
TAR_FILE=${devkit_dir}-product/result/sdk-${result_name}-${today}.tar.gz
popd
%install
mkdir -p %{buildroot}%{_datadir}/%{name}
cp -p devkit-product/result/*.tar.gz %{buildroot}%{_datadir}/%{name}/
%files
%{_datadir}/%{name}
%changelog
* Fri Jan 17 2025 Andrew Hughes <gnu.andrew@redhat.com> - 1.0-9
- Update devkit RPMs to latest updates
- Exclude SystemTap RPMs from s390x and ppc64le
- Add a date stamp to the RPM bundles
- Resolves: OPENJDK-3070
= Resolves: OPENJDK-3589
* Wed Nov 27 2024 Andrew Hughes <gnu.andrew@redhat.com> - 1.0-8
- Add --enable-linker-build-id to gcc build
- Resolves: OPENJDK-3068
* Wed Oct 30 2024 Andrew Hughes <gnu.andrew@redhat.com> - 1.0-7
- Improve build logging by also writing to stdout
- Cleanup patches and rebase on jdk-21.0.5-ga
- Drop JDK-8323671 patch which is upstream as of 21.0.3+3
- Resolves: OPENJDK-3071
* Tue Jun 11 2024 Andrew Hughes <gnu.andrew@redhat.com> - 1.0-6
- Fix typo where 'as' binary is accidentally capitalised in AS=<path>/as
* Wed May 01 2024 Andrew Hughes <gnu.andrew@redhat.com> - 1.0-5
- Bootstrap the devkit, building it again with itself
* Mon Apr 08 2024 Andrew Hughes <gnu.andrew@redhat.com> - 1.0-4
- Include Thomas' patches to drop .comment sections and build binutils with deterministic archives
- Use backward-compatible patch syntax
* Tue Feb 06 2024 Andrew Hughes <gnu.andrew@redhat.com> - 1.0-3
- Include JDK-8323671 patch so the binaries don't contain the full source path
* Fri Dec 08 2023 Andrew Hughes <gnu.andrew@redhat.com> - 1.0-2
- Try to turn off multlib on x86_64 as we don't have the dependencies for it
* Tue Dec 05 2023 Andrew Hughes <gnu.andrew@redhat.com> - 1.0-1
- Create RHEL 7 based devkit for building OpenJDK