xref: /netbsd-src/tools/binutils/mknative-binutils (revision 3cfdedbddcbf1d8dfc2ac9c3ed3e569dd37f001f)
1#!/bin/sh
2#	$NetBSD: mknative-binutils,v 1.16 2024/06/30 16:11:11 christos Exp $
3#
4# Shell script for generating all the constants needed for a native
5# platform build of src/external/gpl3/binutils
6#
7
8# initialise
9
10_TMPDIR=$2
11_TOP=$3
12_PLATFORM=$4
13_VPATH=`grep VPATH ${_TMPDIR}/Makefile | sed 's,^.*=[ 	]*,,'`
14
15. $_TOP/tools/gcc/mknative.common
16
17BFD_MACHINE_ARCH=$(echo ${MACHINE_ARCH} | sed -e 's/armv[4-7]/arm/')
18
19
20##### external/gpl3/binutils/lib/libbfd #####
21
22get_libbfd () {
23	local d=external/gpl3/binutils/lib/libbfd/arch/$BFD_MACHINE_ARCH
24	mkdir -p $_TOP/$d
25
26	getvars bfd/Makefile \
27	    libbfd_la_DEPENDENCIES libbfd_la_OBJECTS DEFS \
28	    INCLUDES TDEFAULTS HAVEVECS | write_mk $d/defs.mk
29
30	for i in bfd.h bfdver.h config.h; do
31	    write_c $d/$i < $_TMPDIR/bfd/$i
32	done
33}
34
35##### external/gpl3/binutils/lib/libopcodes #####
36
37get_libopcodes () {
38	local d=external/gpl3/binutils/lib/libopcodes/arch/$BFD_MACHINE_ARCH
39	mkdir -p $_TOP/$d
40
41	getvars opcodes/Makefile \
42	    archdefs BFD_MACHINES libopcodes_la_SOURCES | write_mk $d/defs.mk
43
44	write_c $d/config.h < $_TMPDIR/opcodes/config.h
45}
46
47get_libgnuctf () {
48	local d=external/gpl3/binutils/lib/libgnuctf/arch/$BFD_MACHINE_ARCH
49	mkdir -p $_TOP/$d
50
51	getvars libctf/Makefile libctf_la_SOURCES | write_mk $d/defs.mk
52
53
54	write_c $d/config.h < $_TMPDIR/libctf/config.h
55}
56
57##### external/gpl3/binutils/lib/libiberty #####
58
59get_libiberty () {
60	local d=external/gpl3/binutils/lib/libiberty/arch/$BFD_MACHINE_ARCH
61	mkdir -p $_TOP/$d
62
63	getvars libiberty/Makefile \
64	    ALLOCA EXTRA_OFILES LIBOBJS REQUIRED_OFILES | write_mk $d/defs.mk
65
66	write_c $d/config.h < $_TMPDIR/libiberty/config.h
67}
68
69##### external/gpl3/binutils/lib/libiberty #####
70
71get_libsframe () {
72	local d=external/gpl3/binutils/lib/libsframe/arch/$BFD_MACHINE_ARCH
73	mkdir -p $_TOP/$d
74
75        getvars libsframe/Makefile libsframe_la_SOURCES | write_mk $d/defs.mk
76
77	write_c $d/config.h < $_TMPDIR/libsframe/config.h
78}
79
80##### external/gpl3/binutils/usr.bin #####
81
82get_binutils () {
83	### common
84
85	local d=external/gpl3/binutils/usr.bin/common/arch/$BFD_MACHINE_ARCH
86	mkdir -p $_TOP/$d
87
88	{
89		getvars binutils/Makefile \
90			VERSION DEFS INCLUDES PROGRAMS
91		getvars binutils/Makefile \
92			man_MANS TEXINFOS
93		getvars bfd/Makefile \
94			PKGVERSION | sed 's,\\\(.\),\1,'
95		getvars bfd/Makefile \
96			REPORT_BUGS_TEXI
97
98		for f in `getvars binutils/Makefile PROGRAMS | sed 'y,-,_,;s,^[^=]*=,,'`; do
99			getvars binutils/Makefile ${f}_OBJECTS ${f}_DEPENDENCIES
100		done
101	} | write_mk $d/defs.mk
102
103	write_c $d/config.h < $_TMPDIR/binutils/config.h
104
105	### gas
106
107	d=external/gpl3/binutils/usr.bin/gas/arch/$BFD_MACHINE_ARCH
108	mkdir -p $_TOP/$d
109
110	grep -v DEPDIR "$_TMPDIR/gas/Makefile" > "$_TMPDIR/gas/Makefile.nodeps"
111	getvars gas/Makefile.nodeps \
112                DEFS INCLUDES as_new_OBJECTS as_new_LDADD |
113	sed	-e s/G_as_new_OBJECTS/G_OBJS/ \
114		-e s/G_as_new_LDADD=/G_OBJS+=/ \
115		-e s@config/@@g \
116		-e 's/\.\..*a//' |
117	write_mk $d/defs.mk
118
119	for f in config.h itbl-cpu.h obj-format.h targ-cpu.h targ-env.h; do
120		write_c $d/$f < $_TMPDIR/gas/$f
121	done
122
123	### gprof
124	d=external/gpl3/binutils/usr.bin/gprof/arch/$BFD_MACHINE_ARCH
125
126	mkdir -p $_TOP/$d
127
128	getvars gprof/Makefile \
129		DEFS gprof_OBJECTS INCLUDES TEXINFOS \
130		| write_mk $d/defs.mk
131
132	write_c $d/gconfig.h <$_TMPDIR/gprof/gconfig.h
133
134	### ld
135
136	d=external/gpl3/binutils/usr.bin/ld/arch/$BFD_MACHINE_ARCH
137	mkdir -p $_TOP/$d
138
139	{
140		getvars ld/Makefile \
141			DEFS EMUL EMULATION_OFILES INCLUDES OFILES TEXINFOS
142		getvars ld/Makefile \
143			target_alias | sed 's,[\._0-9A-Z]*$,,'
144		getvars	ld/Makefile \
145			enable_initfini_array
146	} | write_mk $d/defs.mk
147
148	for f in config.h ldemul-list.h; do
149		write_c $d/$f <$_TMPDIR/ld/$f
150	done
151}
152
153##### main #####
154
155case $1 in
156all|binutils)	# everything (uses "canadian cross" temp environment)
157	get_binutils
158	get_libbfd
159	get_libgnuctf
160	get_libopcodes
161	get_libiberty
162	get_libsframe
163	exit 0
164	;;
165
166*)	echo invalid arguments; exit 1;;
167esac
168