Showing with 151 additions and 0 deletions.
  1. +151 −0 sys-devel/binutils_bootstrap/binutils_bootstrap-2.41_2023_08_05.recipe
151 changes: 151 additions & 0 deletions sys-devel/binutils_bootstrap/binutils_bootstrap-2.41_2023_08_05.recipe
@@ -0,0 +1,151 @@
SUMMARY="Assembler, linker and binary tools for target ${targetMachineTriple}"
DESCRIPTION="The GNU Binutils are a collection of binary tools.
The main ones are:
- ld - the GNU linker.
- as - the GNU assembler.
But they also include:
- addr2line - Converts addresses into filenames and line numbers.
- ar - A utility for creating, modifying and extracting from archives.
- c++filt - Filter to demangle encoded C++ symbols.
- nm - Lists symbols from object files.
- objcopy - Copys and translates object files.
- objdump - Displays information from object files.
- ranlib - Generates an index to the contents of an archive.
- readelf - Displays information from any ELF format object file.
- size - Lists the section sizes of an object or archive file.
- strings - Lists printable strings from files.
- strip - Discards symbols.
The tools of this package can be used for cross-builds to \
$effectiveTargetMachineTriple."
HOMEPAGE="http://www.gnu.org/software/binutils"
COPYRIGHT="1988-2023 Free Software Foundation, Inc."
LICENSE="GNU GPL v3
GNU LGPL v3"
REVISION="1"
srcGitRev="7c502b803e1da9e4509d8b7d62787ae071e1cafc"
SOURCE_URI="https://github.com/haiku/buildtools/archive/$srcGitRev.tar.gz"
CHECKSUM_SHA256="d615e4cf5565ba95ec9c199d871c44f36f6068bab6200ae3204f1c4c4f69de18"
SOURCE_DIR="buildtools-$srcGitRev/binutils"

ARCHITECTURES="?all !x86_gcc2"
SECONDARY_ARCHITECTURES="?x86"

portVersionCompat="$portVersion compat >= 2.41"

PROVIDES="
binutils_bootstrap$secondaryArchSuffix = $portVersionCompat
binutils$secondaryArchSuffix = $portVersionCompat
cmd:addr2line$secondaryArchSuffix = $portVersionCompat
cmd:ar$secondaryArchSuffix = $portVersionCompat
cmd:as$secondaryArchSuffix = $portVersionCompat
cmd:c++filt$secondaryArchSuffix = $portVersionCompat
cmd:elfedit$secondaryArchSuffix = $portVersionCompat
cmd:gprof$secondaryArchSuffix = $portVersionCompat
cmd:ld$secondaryArchSuffix = $portVersionCompat
cmd:ld.bfd$secondaryArchSuffix = $portVersionCompat
cmd:nm$secondaryArchSuffix = $portVersionCompat
cmd:objcopy$secondaryArchSuffix = $portVersionCompat
cmd:objdump$secondaryArchSuffix = $portVersionCompat
cmd:ranlib$secondaryArchSuffix = $portVersionCompat
cmd:readelf$secondaryArchSuffix = $portVersionCompat
cmd:size$secondaryArchSuffix = $portVersionCompat
cmd:strings$secondaryArchSuffix = $portVersionCompat
cmd:strip$secondaryArchSuffix = $portVersionCompat
"
REQUIRES="
haiku$secondaryArchSuffix
"
BUILD_REQUIRES="
"
BUILD_PREREQUIRES="
haiku${secondaryArchSuffix}_devel
binutils_cross_${effectiveTargetArchitecture}
gcc_cross_${effectiveTargetArchitecture}
cmd:autoconf
cmd:flex
cmd:gcc
cmd:ld
cmd:make
cmd:makeinfo
cmd:sed
cmd:tar
"

BUILD_PACKAGE_ACTIVATION_PHASE=INSTALL

sourceDir=$(pwd)
relativeInstallDir="develop/tools$secondaryArchSubDir"
installDir="$prefix/$relativeInstallDir"
objectsDir=$(pwd)/../${portVersionedName}-obj

BUILD()
{
rm -rf $objectsDir
mkdir -p $objectsDir
cd $objectsDir

CFLAGS=-O2 CXXFLAGS=-O2 runConfigure "$sourceDir/configure" \
--build=$buildMachineTriple --host=$effectiveTargetMachineTriple \
--target=$effectiveTargetMachineTriple \
--exec-prefix=$installDir \
--includedir=$includeDir/binutils \
--docdir=$docDir \
--disable-nls --disable-shared --disable-werror \
--enable-initfini-array \
--with-sysroot=/
# Note: The sysroot option is normally superfluous. We have to specify
# it, however, since we need to configure gcc with a sysroot, which
# causes ld to be invoked with --sysroot, which makes ld unhappy, if it
# hasn't been configured with a sysroot itself. Ideally we'd fix the
# gcc build system issue causing the whole issue.
make $jobArgs
}

INSTALL()
{
cd $objectsDir

make DESTDIR=$installDestDir install

# Remove the development libraries and headers. Nobody uses those anyway.
rm $installDestDir$libDir/*.a $installDestDir$libDir/*.la
rm -r $installDestDir$developDir/headers

# no info documentation
rm -r $installDestDir$infoDir

### Strip #################################################

echo "Strip debug info"

$effectiveTargetMachineTriple-strip --strip-debug $installDestDir$binDir/*

### Symlinks ##############################################

echo "Creating required symlinks"

# There are copies of a subset of the commands below installDir. We
# overwrite those with symlinks to the ones in binDir.
for file in $installDestDir$installDir/$effectiveTargetMachineTriple/bin/*
do
symlinkRelative -sfn $installDestDir$binDir/$(basename $file) $file
done

# ld.bfd is a copy of ld -- symlink instead
cd $installDestDir$binDir
ln -sf ld ld.bfd

### Cleanup #################################################

echo "Cleanup"

# delete man pages for commands that we aren't including
cd $installDestDir$manDir
for cmd in dlltool nlmconv windmc windres; do
rm -f man1/$cmd.1
done
}