11.1Smrg#!/bin/sh
21.16Schristos#	$NetBSD: mknative-binutils,v 1.16 2024/06/30 16:11:11 christos Exp $
31.1Smrg#
41.1Smrg# Shell script for generating all the constants needed for a native
51.6Sskrll# platform build of src/external/gpl3/binutils
61.1Smrg#
71.1Smrg
81.1Smrg# initialise
91.1Smrg
101.1Smrg_TMPDIR=$2
111.1Smrg_TOP=$3
121.1Smrg_PLATFORM=$4
131.4Smrg_VPATH=`grep VPATH ${_TMPDIR}/Makefile | sed 's,^.*=[ 	]*,,'`
141.1Smrg
151.1Smrg. $_TOP/tools/gcc/mknative.common
161.1Smrg
171.15SchristosBFD_MACHINE_ARCH=$(echo ${MACHINE_ARCH} | sed -e 's/armv[4-7]/arm/')
181.15Schristos
191.15Schristos
201.6Sskrll##### external/gpl3/binutils/lib/libbfd #####
211.1Smrg
221.1Smrgget_libbfd () {
231.16Schristos	local d=external/gpl3/binutils/lib/libbfd/arch/$BFD_MACHINE_ARCH
241.16Schristos	mkdir -p $_TOP/$d
251.1Smrg
261.16Schristos	getvars bfd/Makefile \
271.16Schristos	    libbfd_la_DEPENDENCIES libbfd_la_OBJECTS DEFS \
281.16Schristos	    INCLUDES TDEFAULTS HAVEVECS | write_mk $d/defs.mk
291.1Smrg
301.16Schristos	for i in bfd.h bfdver.h config.h; do
311.16Schristos	    write_c $d/$i < $_TMPDIR/bfd/$i
321.16Schristos	done
331.1Smrg}
341.1Smrg
351.6Sskrll##### external/gpl3/binutils/lib/libopcodes #####
361.1Smrg
371.1Smrgget_libopcodes () {
381.16Schristos	local d=external/gpl3/binutils/lib/libopcodes/arch/$BFD_MACHINE_ARCH
391.16Schristos	mkdir -p $_TOP/$d
401.1Smrg
411.16Schristos	getvars opcodes/Makefile \
421.16Schristos	    archdefs BFD_MACHINES libopcodes_la_SOURCES | write_mk $d/defs.mk
431.1Smrg
441.16Schristos	write_c $d/config.h < $_TMPDIR/opcodes/config.h
451.1Smrg}
461.1Smrg
471.13Schristosget_libgnuctf () {
481.16Schristos	local d=external/gpl3/binutils/lib/libgnuctf/arch/$BFD_MACHINE_ARCH
491.16Schristos	mkdir -p $_TOP/$d
501.16Schristos
511.16Schristos	getvars libctf/Makefile libctf_la_SOURCES | write_mk $d/defs.mk
521.12Schristos
531.12Schristos
541.16Schristos	write_c $d/config.h < $_TMPDIR/libctf/config.h
551.12Schristos}
561.12Schristos
571.6Sskrll##### external/gpl3/binutils/lib/libiberty #####
581.1Smrg
591.1Smrgget_libiberty () {
601.16Schristos	local d=external/gpl3/binutils/lib/libiberty/arch/$BFD_MACHINE_ARCH
611.16Schristos	mkdir -p $_TOP/$d
621.1Smrg
631.1Smrg	getvars libiberty/Makefile \
641.16Schristos	    ALLOCA EXTRA_OFILES LIBOBJS REQUIRED_OFILES | write_mk $d/defs.mk
651.16Schristos
661.16Schristos	write_c $d/config.h < $_TMPDIR/libiberty/config.h
671.16Schristos}
681.16Schristos
691.16Schristos##### external/gpl3/binutils/lib/libiberty #####
701.16Schristos
711.16Schristosget_libsframe () {
721.16Schristos	local d=external/gpl3/binutils/lib/libsframe/arch/$BFD_MACHINE_ARCH
731.16Schristos	mkdir -p $_TOP/$d
741.16Schristos
751.16Schristos        getvars libsframe/Makefile libsframe_la_SOURCES | write_mk $d/defs.mk
761.1Smrg
771.16Schristos	write_c $d/config.h < $_TMPDIR/libsframe/config.h
781.1Smrg}
791.1Smrg
801.6Sskrll##### external/gpl3/binutils/usr.bin #####
811.1Smrg
821.1Smrgget_binutils () {
831.1Smrg	### common
841.1Smrg
851.16Schristos	local d=external/gpl3/binutils/usr.bin/common/arch/$BFD_MACHINE_ARCH
861.16Schristos	mkdir -p $_TOP/$d
871.1Smrg
881.1Smrg	{
891.1Smrg		getvars binutils/Makefile \
901.1Smrg			VERSION DEFS INCLUDES PROGRAMS
911.14Schristos		getvars binutils/Makefile \
921.1Smrg			man_MANS TEXINFOS
931.14Schristos		getvars bfd/Makefile \
941.7Sskrll			PKGVERSION | sed 's,\\\(.\),\1,'
951.14Schristos		getvars bfd/Makefile \
961.7Sskrll			REPORT_BUGS_TEXI
971.1Smrg
981.1Smrg		for f in `getvars binutils/Makefile PROGRAMS | sed 'y,-,_,;s,^[^=]*=,,'`; do
991.1Smrg			getvars binutils/Makefile ${f}_OBJECTS ${f}_DEPENDENCIES
1001.1Smrg		done
1011.16Schristos	} | write_mk $d/defs.mk
1021.1Smrg
1031.16Schristos	write_c $d/config.h < $_TMPDIR/binutils/config.h
1041.1Smrg
1051.1Smrg	### gas
1061.1Smrg
1071.16Schristos	d=external/gpl3/binutils/usr.bin/gas/arch/$BFD_MACHINE_ARCH
1081.16Schristos	mkdir -p $_TOP/$d
1091.1Smrg
1101.8Schristos	grep -v DEPDIR "$_TMPDIR/gas/Makefile" > "$_TMPDIR/gas/Makefile.nodeps"
1111.8Schristos	getvars gas/Makefile.nodeps \
1121.16Schristos                DEFS INCLUDES as_new_OBJECTS as_new_LDADD |
1131.8Schristos	sed	-e s/G_as_new_OBJECTS/G_OBJS/ \
1141.8Schristos		-e s/G_as_new_LDADD=/G_OBJS+=/ \
1151.11Schristos		-e s@config/@@g \
1161.8Schristos		-e 's/\.\..*a//' |
1171.16Schristos	write_mk $d/defs.mk
1181.1Smrg
1191.16Schristos	for f in config.h itbl-cpu.h obj-format.h targ-cpu.h targ-env.h; do
1201.16Schristos		write_c $d/$f < $_TMPDIR/gas/$f
1211.1Smrg	done
1221.1Smrg
1231.1Smrg	### gprof
1241.16Schristos	d=external/gpl3/binutils/usr.bin/gprof/arch/$BFD_MACHINE_ARCH
1251.1Smrg
1261.16Schristos	mkdir -p $_TOP/$d
1271.1Smrg
1281.1Smrg	getvars gprof/Makefile \
1291.1Smrg		DEFS gprof_OBJECTS INCLUDES TEXINFOS \
1301.16Schristos		| write_mk $d/defs.mk
1311.1Smrg
1321.16Schristos	write_c $d/gconfig.h <$_TMPDIR/gprof/gconfig.h
1331.1Smrg
1341.1Smrg	### ld
1351.1Smrg
1361.16Schristos	d=external/gpl3/binutils/usr.bin/ld/arch/$BFD_MACHINE_ARCH
1371.16Schristos	mkdir -p $_TOP/$d
1381.1Smrg
1391.1Smrg	{
1401.1Smrg		getvars ld/Makefile \
1411.16Schristos			DEFS EMUL EMULATION_OFILES INCLUDES OFILES TEXINFOS
1421.1Smrg		getvars ld/Makefile \
1431.1Smrg			target_alias | sed 's,[\._0-9A-Z]*$,,'
1441.9Sskrll		getvars	ld/Makefile \
1451.9Sskrll			enable_initfini_array
1461.16Schristos	} | write_mk $d/defs.mk
1471.1Smrg
1481.16Schristos	for f in config.h ldemul-list.h; do
1491.16Schristos		write_c $d/$f <$_TMPDIR/ld/$f
1501.1Smrg	done
1511.1Smrg}
1521.1Smrg
1531.1Smrg##### main #####
1541.1Smrg
1551.1Smrgcase $1 in
1561.2Smrgall|binutils)	# everything (uses "canadian cross" temp environment)
1571.1Smrg	get_binutils
1581.1Smrg	get_libbfd
1591.13Schristos	get_libgnuctf
1601.1Smrg	get_libopcodes
1611.1Smrg	get_libiberty
1621.16Schristos	get_libsframe
1631.1Smrg	exit 0
1641.1Smrg	;;
1651.1Smrg
1661.1Smrg*)	echo invalid arguments; exit 1;;
1671.1Smrgesac
168