mknative-gcc revision 1.27 1 #!/bin/sh
2 # $NetBSD: mknative-gcc,v 1.27 2009/11/30 06:13:37 uebayasi Exp $
3 #
4 # Shell script for generating all the constants needed for a native
5 # platform build of src/gnu/dist/gcc.
6 #
7
8 # initialise
9
10 _TMPDIR=$2
11 _TOP=$3
12 _PLATFORM=$4
13 _VPATH=`grep VPATH ${_TMPDIR}/Makefile | sed 's,^.*=[ ]*,,'`
14 _GNU_DIST=`cd ${_VPATH}; pwd`
15
16 . $_TOP/tools/gcc/mknative.common
17
18 ##### gnu/lib/crtstuff #####
19
20 get_crtstuff () {
21 _subdir="$1"
22 mkdir -p $_TOP/gnu/lib/$_subdir/arch
23
24 getvars gcc/Makefile \
25 INCLUDES CRTSTUFF_CFLAGS CRTSTUFF_T_CFLAGS \
26 tm_defines xm_file xm_defines \
27 | write_mk gnu/lib/$_subdir/arch/$MACHINE_ARCH.mk
28 }
29
30 ##### gnu/lib/libg2c #####
31
32 get_libg2c () {
33 mkdir -p $_TOP/gnu/lib/libg2c3/arch/$MACHINE_ARCH
34
35 write_c gnu/lib/libg2c3/arch/$MACHINE_ARCH/config.h <$_TMPDIR/$_PLATFORM/libf2c/libU77/config.h
36 write_c gnu/lib/libg2c3/arch/$MACHINE_ARCH/g2c.h <$_TMPDIR/$_PLATFORM/libf2c/g2c.h
37
38 {
39 getvars $_PLATFORM/libf2c/Makefile \
40 F2CEXT
41 getvars $_PLATFORM/libf2c/libF77/Makefile \
42 ALL_CFLAGS OBJS
43 getvars $_PLATFORM/libf2c/libI77/Makefile \
44 ALL_CFLAGS OBJS | sed 's,=,+=,'
45 getvars $_PLATFORM/libf2c/libU77/Makefile \
46 ALL_CFLAGS OBJS | sed 's,=,+=,'
47 } | write_mk gnu/lib/libg2c3/arch/$MACHINE_ARCH/defs.mk
48 }
49
50 ##### gnu/lib/libgcc #####
51
52 _machine_arch_subdir=gnu/lib/lib$_subdir/arch${_archsubdir}/$MACHINE_ARCH
53
54 libgcc_db_funcs=${_machine_arch_subdir}/funcs
55 libgcc_db_files=${_machine_arch_subdir}/files
56 libgcc_db_objs_libs=${_machine_arch_subdir}/objs.libs
57 libgcc_db_objs_srcs=${_machine_arch_subdir}/objs.srcs
58 libgcc_db_objs_tmpsrcs=${_machine_arch_subdir}/objs.tmpsrcs
59 libgcc_db_objs_cppflags=${_machine_arch_subdir}/objs.cppflags
60 libgcc_db_objs_copts=${_machine_arch_subdir}/objs.copts
61
62 libgcc_srcs_mk=${_machine_arch_subdir}/srcs.mk
63 libgcc_srcs_mk_tmpsrc=${_machine_arch_subdir}/srcs.tmpsrc.mk
64 libgcc_srcs_mk_cppflags=${_machine_arch_subdir}/srcs.cppflags.mk
65 libgcc_srcs_mk_copts=${_machine_arch_subdir}/srcs.copts.mk
66
67 get_libgcc_new () {
68 }
69
70 get_libgcc () {
71 _subdir="$1"
72 mkdir -p $_TOP/gnu/lib/lib$_subdir/arch
73
74 case "$_subdir" in
75 gcc3)
76 _extravars="USE_COLLECT2 LIB2FUNCS_1 LIB2FUNCS_2 xm_file"
77 _archsubdir=""
78 ;;
79 gcc4)
80 _extravars="COLLECT2 UNWIND_H xm_include_list"
81 _archsubdir=""
82 ;;
83 esac
84
85 # DPBIT, FPBIT only used on mn10[23]00, we don't need them.
86 # XXX we should probably grab everything Just In Case for
87 # the future.
88 {
89 getvars gcc/Makefile \
90 INCLUDES LIB2ADD LIB2ADDEH \
91 LIB1ASMFUNCS LIB1ASMSRC \
92 LIB2_DIVMOD_FUNCS LIB2FUNCS_ST \
93 LIBGCC2_CFLAGS \
94 SHLIB_MKMAP SHLIB_MKMAP_OPTS \
95 SHLIB_MAPFILES SHLIB_NM_FLAGS \
96 EXTRA_HEADERS xm_defines \
97 tm_defines ${_extravars}
98 } | write_mk gnu/lib/lib$_subdir/arch${_archsubdir}/$MACHINE_ARCH.mk
99
100 # Generate new style files.
101 if [ -n "${MKNATIVE_LIBGCC_NEW}" ]; then
102 get_libgcc_new
103 fi
104 }
105
106 ##### gnu/lib/libgcov #####
107
108 get_libgcov () {
109 _subdir="$1"
110
111 mkdir -p $_TOP/gnu/lib/lib$_subdir/libgcov/arch/$MACHINE_ARCH
112
113 {
114 getvars gcc/Makefile \
115 LIBGCOV
116 } | write_mk gnu/lib/lib$_subdir/libgcov/arch/$MACHINE_ARCH/defs.mk
117
118 write_c gnu/lib/lib$_subdir/libgcov/arch/$MACHINE_ARCH/gcov-iov.h \
119 <$_TMPDIR/gcc/gcov-iov.h
120
121 }
122
123 ##### gnu/usr.bin/gcc[34]/libiberty #####
124
125 get_gcc_libiberty () {
126 _subdir="$1"
127 mkdir -p $_TOP/gnu/usr.bin/$_subdir/libiberty/arch/$MACHINE_ARCH
128
129 getvars libiberty/Makefile \
130 ALLOCA EXTRA_OFILES LIBOBJS REQUIRED_OFILES \
131 | write_mk gnu/usr.bin/$_subdir/libiberty/defs.mk
132
133 write_c gnu/usr.bin/$_subdir/libiberty/arch/$MACHINE_ARCH/config.h \
134 <$_TMPDIR/libiberty/config.h
135 }
136
137 ##### gnu/lib/libobjc #####
138
139 get_libobjc () {
140 case "$1" in
141 *4)
142 _subdir="$1/arch/$MACHINE_ARCH"
143 _options="ALL_OPT_FILES"
144 _unwind="UNWIND_H"
145 ;;
146 *)
147 _subdir="$1"
148 _options=""
149 _unwind=""
150 ;;
151 esac
152
153 mkdir -p $_TOP/gnu/lib/$_subdir
154
155 {
156 if [ -n "$_options" ]; then
157 getvars gcc/Makefile $_options
158 fi
159 getvars $_PLATFORM/libobjc/Makefile \
160 ALL_CFLAGS INCLUDES OBJS OBJC_H \
161 | sed "s,$_GNU_DIST,\${GNUHOSTDIST},g"
162 if [ -n "$_unwind" ]; then
163 getvars gcc/Makefile $_unwind
164 fi
165 } | write_mk gnu/lib/$_subdir/defs.mk
166
167 write_c gnu/lib/$_subdir/config.h \
168 <$_TMPDIR/$_PLATFORM/libobjc/config.h
169 }
170
171 ##### gnu/lib/libstdc++-v3 #####
172
173 get_libstdcxx_v3 () {
174 _subdir="$1"
175 mkdir -p $_TOP/gnu/lib/$_subdir/arch/$MACHINE_ARCH
176
177 case ${_subdir} in
178 *4)
179 _src_CC_files="atomicity_file CCODECVT_CC CCOLLATE_CC CCTYPE_CC CMESSAGES_CC CMONEY_CC CNUMERIC_CC CTIME_CC CLOCALE_CC BASIC_FILE_CC"
180 _headers1="host_headers debug_headers tr1_headers c_compatibility_headers_extra"
181 _headers2="thread_host_headers host_headers_extra"
182 _build_headers="c++allocator.h c++config.h cxxabi_tweaks.h gthr-default.h gthr-posix.h gthr-single.h gthr-tpf.h gthr.h"
183 _unwind="UNWIND_H"
184 ;;
185 *)
186 _src_CC_files=""
187 _headers1="target_headers"
188 _headers2="thread_target_headers target_headers_extra"
189 _build_headers="c++config.h gthr-default.h gthr-posix.h gthr-single.h gthr.h"
190 _unwind=""
191 ;;
192 esac
193
194 # build files
195 for h in $_build_headers; do
196 write_c gnu/lib/$_subdir/arch/$MACHINE_ARCH/$h \
197 <$_TMPDIR/$_PLATFORM/libstdc++-v3/include/$_PLATFORM/bits/$h
198 done
199
200 write_c gnu/lib/$_subdir/arch/$MACHINE_ARCH/config.h \
201 <$_TMPDIR/$_PLATFORM/libstdc++-v3/config.h
202
203 {
204 # libmath
205 getvars $_PLATFORM/libstdc++-v3/libmath/Makefile \
206 libmath_la_SOURCES libmath_la_LIBADD
207
208 # libsupc++
209 getvars $_PLATFORM/libstdc++-v3/libsupc++/Makefile \
210 sources | sed 's/^G_sources=/G_LIBSUPCXX_SOURCES=/'
211 getvars $_PLATFORM/libstdc++-v3/libsupc++/Makefile \
212 c_sources | sed 's/^G_c_sources=/G_LIBSUPCXX_C_SOURCES=/'
213
214 # src
215 getvars $_PLATFORM/libstdc++-v3/src/Makefile \
216 sources $_src_CC_files SECTION_FLAGS | sed 's/^G_sources=/G_SRC_SOURCES=/'
217
218 # include
219 getvars $_PLATFORM/libstdc++-v3/include/Makefile \
220 c_base_headers_rename std_headers_rename
221 getvars $_PLATFORM/libstdc++-v3/include/Makefile \
222 bits_headers backward_headers ext_headers c_base_headers_extra \
223 $_headers1 | sed -e 's#/[^ ][^ ]*/##g' -e 's/\${GNUHOSTDIST}//g'
224 getvars $_PLATFORM/libstdc++-v3/include/Makefile \
225 $_headers2 | sed -e 's#\./[^ ][^ ]*/##g' -e 's/\${GNUHOSTDIST}//g'
226
227 if [ -n "$_unwind" ]; then
228 getvars gcc/Makefile $_unwind
229 fi
230 } | write_mk gnu/lib/$_subdir/arch/$MACHINE_ARCH/defs.mk
231 }
232
233 ##### gnu/usr.bin/gcc3 #####
234
235 get_gcc () {
236 _subdir="$1"
237 mkdir -p $_TOP/gnu/usr.bin/$_subdir/arch/$MACHINE_ARCH
238 case ${_subdir} in
239 gcc4)
240 mkdir -p $_TOP/gnu/usr.bin/$_subdir/libcpp/arch/$MACHINE_ARCH
241 _buildname="BUILD_"
242 _libcppsubdir=""
243 _extravars="TM_H ALL_OPT_FILES"
244 _hconfig_h=""
245 _extravars2="tm_file_list build_xm_include_list"
246 _extravars3="tm_p_include_list"
247
248 ;;
249 *)
250 _buildname="HOST_"
251 _libcppsubdir="gcc/"
252 _extravars=""
253 _hconfig_h="HCONFIG_H"
254 _extravars2=""
255 _extravars3=""
256 ;;
257 esac
258
259 {
260 getvars gcc/Makefile \
261 ${_buildname}EARLY_SUPPORT ${_buildname}ERRORS ${_buildname}PRINT \
262 ${_buildname}RTL ${_buildname}SUPPORT ${_buildname}VARRAY | \
263 sed -e 's#build/errors.o#build-errors.o#g' \
264 -e 's#build/print-rtl.o#build-print-rtl.o#g' \
265 -e 's#build/rtl.o#build-rtl.o#g' \
266 -e 's#build/varray.o#build-varray.o#g' \
267 -e 's#build/ggc-none.o#build-ggc-none.o#g' \
268 -e 's#build/##g'
269 getvars gcc/Makefile \
270 ALL_CFLAGS ALL_CPPFLAGS C_AND_OBJC_OBJS C_OBJS CCCP_OBJS \
271 GCOV_OBJS PROTO_OBJS ${_extravars1} \
272 INCLUDES md_file OBJC_OBJS OBJS out_file version \
273 BUILD_PREFIX RTL_H TREE_H ${_hconfig_h} BASIC_BLOCK_H GCC_H \
274 GTFILES_SRCDIR GTFILES_FILES_FILES GTFILES_FILES_LANGS \
275 GTFILES GTFILES_LANG_DIR_NAMES \
276 tm_defines host_xm_file host_xm_defines tm_p_file \
277 target_cpu_default ${_extravars} ${_extravars2} \
278 lang_specs_files ${_extravars3}
279 getvars gcc/Makefile \
280 LIB2ADDEHDEP | sed 's/unwind.inc//'
281 getvars gcc/Makefile \
282 CXX_OBJS CXX_C_OBJS | sed 's/cp\///g'
283 getvars gcc/Makefile \
284 F77_OBJS | sed 's/f\///g'
285 case ${_subdir} in
286 gcc4)
287 getvars libcpp/Makefile \
288 libcpp_a_OBJS
289 ;;
290 gcc3)
291 getvars gcc/Makefile \
292 LIBCPP_OBJS LIBCPP_H
293 ;;
294 esac
295 getvars gcc/Makefile \
296 ENABLE_SHARED
297 case ${_subdir} in
298 gcc4)
299 echo G_SHLIB_LINK="$CC -shared"
300 echo G_SHLIB_MULTILIB=.
301 ;;
302 gcc3)
303 getvars gcc/Makefile \
304 SHLIB_LINK SHLIB_MULTILIB
305 ;;
306 esac
307 } | write_mk gnu/usr.bin/$_subdir/arch/$MACHINE_ARCH/defs.mk
308
309 case "$_subdir" in
310 gcc3)
311 hfiles='auto-host configargs cs-hconfig gencheck hconfig gthr-default'
312 ;;
313 gcc4)
314 write_c gnu/usr.bin/$_subdir/libcpp/arch/$MACHINE_ARCH/config.h <$_TMPDIR/libcpp/config.h
315 hfiles='auto-host configargs gencheck gthr-default tm bconfig config multilib'
316 ;;
317 esac
318 for f in $hfiles; do
319 write_c gnu/usr.bin/$_subdir/arch/$MACHINE_ARCH/$f.h <$_TMPDIR/gcc/$f.h
320 done
321 }
322
323 ##### main #####
324
325 case "$1" in
326 # .mk and .h files for libgcc bootstrap (from host build)
327 libgcc)
328 get_libgcc gcc3
329 get_crtstuff crtstuff3
330 exit 0
331 ;;
332
333 libgcc4)
334 get_libgcc gcc4
335 get_crtstuff crtstuff4
336 exit 0
337 ;;
338
339 # gcc files
340 gcc4)
341 get_gcc gcc4
342 get_libgcc gcc4
343 get_libgcov gcc4
344 get_crtstuff crtstuff4
345 get_gcc_libiberty gcc4
346 get_libobjc libobjc4
347 get_libstdcxx_v3 libstdc++-v3_4
348 exit 0
349 ;;
350
351 gcc3)
352 get_gcc gcc3
353 get_libg2c
354 get_libgcc gcc3
355 get_crtstuff crtstuff3
356 get_gcc_libiberty gcc3
357 get_libobjc libobjc3
358 get_libstdcxx_v3 libstdc++-v3
359 exit 0
360 ;;
361
362 *) echo invalid arguments; exit 1;;
363 esac
364