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