1 | $! libiberty/vmsbuild.com -- build liberty.olb for VMS host, VMS target
|
---|
2 | $!
|
---|
3 | $ CC = "gcc /noVerbose/Debug/Incl=([],[-.include])"
|
---|
4 | $ LIBR = "library /Obj"
|
---|
5 | $ LINK = "link"
|
---|
6 | $ DELETE= "delete /noConfirm"
|
---|
7 | $ SEARCH= "search /Exact"
|
---|
8 | $ ECHO = "write sys$output"
|
---|
9 | $ ABORT = "exit %x002C"
|
---|
10 | $!
|
---|
11 | $ LIB_NAME = "liberty.olb" !this is what we're going to construct
|
---|
12 | $ WORK_LIB = "new-lib.olb" !used to guard against an incomplete build
|
---|
13 | $
|
---|
14 | $! manually copied from Makefile.in
|
---|
15 | $ REQUIRED_OFILES = "argv.o basename.o choose-temp.o concat.o cplus-dem.o "-
|
---|
16 | + "fdmatch.o fnmatch.o getopt.o getopt1.o getruntime.o hex.o "-
|
---|
17 | + "floatformat.o objalloc.o obstack.o spaces.o strerror.o strsignal.o "-
|
---|
18 | + "xatexit.o xexit.o xmalloc.o xmemdup.o xstrdup.o xstrerror.o"
|
---|
19 | $! anything not caught by link+search of dummy.* should be added here
|
---|
20 | $ EXTRA_OFILES = ""
|
---|
21 | $!
|
---|
22 | $! move to the directory which contains this command procedure
|
---|
23 | $ old_dir = f$environ("DEFAULT")
|
---|
24 | $ new_dir = f$parse("_._;",f$environ("PROCEDURE")) - "_._;"
|
---|
25 | $ set default 'new_dir'
|
---|
26 | $
|
---|
27 | $ ECHO "Starting libiberty build..."
|
---|
28 | $ create config.h
|
---|
29 | /* libiberty config.h for VMS */
|
---|
30 | #define NEED_sys_siglist
|
---|
31 | #define NEED_strsignal
|
---|
32 | #define NEED_psignal
|
---|
33 | #define NEED_basename
|
---|
34 | $ LIBR 'WORK_LIB' /Create
|
---|
35 | $
|
---|
36 | $! first pass: compile "required" modules
|
---|
37 | $ ofiles = REQUIRED_OFILES + " " + EXTRA_OFILES
|
---|
38 | $ pass = 1
|
---|
39 | $ gosub do_ofiles
|
---|
40 | $
|
---|
41 | $! second pass: process dummy.c, using the first pass' results
|
---|
42 | $ ECHO " now checking run-time library for missing functionality"
|
---|
43 | $ if f$search("dummy.obj").nes."" then DELETE dummy.obj;*
|
---|
44 | $ define/noLog sys$error _NL: !can't use /User_Mode here due to gcc
|
---|
45 | $ define/noLog sys$output _NL: ! driver's use of multiple image activation
|
---|
46 | $ on error then continue
|
---|
47 | $ 'CC' dummy.c
|
---|
48 | $ deassign sys$error !restore, more or less
|
---|
49 | $ deassign sys$output
|
---|
50 | $ if f$search("dummy.obj").eqs."" then goto pass2_failure1
|
---|
51 | $! link dummy.obj, capturing full linker feedback in dummy.map
|
---|
52 | $ oldmsg = f$environ("MESSAGE")
|
---|
53 | $ set message /Facility/Severity/Identification/Text
|
---|
54 | $ define/User sys$output _NL:
|
---|
55 | $ define/User sys$error _NL:
|
---|
56 | $ LINK/Map=dummy.map/noExe dummy.obj,'WORK_LIB'/Libr,-
|
---|
57 | gnu_cc:[000000]gcclib.olb/Libr,sys$library:vaxcrtl.olb/Libr
|
---|
58 | $ set message 'oldmsg'
|
---|
59 | $ if f$search("dummy.map").eqs."" then goto pass2_failure2
|
---|
60 | $ DELETE dummy.obj;*
|
---|
61 | $ SEARCH dummy.map "%LINK-I-UDFSYM" /Output=dummy.list
|
---|
62 | $ DELETE dummy.map;*
|
---|
63 | $ ECHO " check completed"
|
---|
64 | $! we now have a file with one entry per line of unresolvable symbols
|
---|
65 | $ ofiles = ""
|
---|
66 | $ if f$trnlnm("IFILE$").nes."" then close/noLog ifile$
|
---|
67 | $ open/Read ifile$ dummy.list
|
---|
68 | $iloop: read/End=idone ifile$ iline
|
---|
69 | $ iline = f$edit(iline,"COMPRESS,TRIM,LOWERCASE")
|
---|
70 | $ ofiles = ofiles + " " + f$element(1," ",iline) + ".o"
|
---|
71 | $ goto iloop
|
---|
72 | $idone: close ifile$
|
---|
73 | $ DELETE dummy.list;*
|
---|
74 | $ on error then ABORT
|
---|
75 | $
|
---|
76 | $! third pass: compile "missing" modules collected in pass 2
|
---|
77 | $ pass = 3
|
---|
78 | $ gosub do_ofiles
|
---|
79 | $
|
---|
80 | $! finish up
|
---|
81 | $ LIBR 'WORK_LIB' /Compress /Output='LIB_NAME' !new-lib.olb -> liberty.olb
|
---|
82 | $ DELETE 'WORK_LIB';*
|
---|
83 | $
|
---|
84 | $! all done
|
---|
85 | $ ECHO "Completed libiberty build."
|
---|
86 | $ type sys$input:
|
---|
87 |
|
---|
88 | You many wish to do
|
---|
89 | $ COPY LIBERTY.OLB GNU_CC:[000000]
|
---|
90 | so that this run-time library resides in the same location as gcc's
|
---|
91 | support library. When building gas, be sure to leave the original
|
---|
92 | copy of liberty.olb here so that gas's build procedure can find it.
|
---|
93 |
|
---|
94 | $ set default 'old_dir'
|
---|
95 | $ exit
|
---|
96 | $
|
---|
97 | $!
|
---|
98 | $! compile each element of the space-delimited list 'ofiles'
|
---|
99 | $!
|
---|
100 | $do_ofiles:
|
---|
101 | $ ofiles = f$edit(ofiles,"COMPRESS,TRIM")
|
---|
102 | $ i = 0
|
---|
103 | $oloop:
|
---|
104 | $ f = f$element(i," ",ofiles)
|
---|
105 | $ if f.eqs." " then goto odone
|
---|
106 | $ f = f - ".o" !strip dummy suffix
|
---|
107 | $ ECHO " ''f'"
|
---|
108 | $ skip_f = 0
|
---|
109 | $ if pass.eq.3 .and. f$search("''f'.c").eqs."" then gosub chk_deffunc
|
---|
110 | $ if .not.skip_f
|
---|
111 | $ then
|
---|
112 | $ 'CC' 'f'.c
|
---|
113 | $ LIBR 'WORK_LIB' 'f'.obj /Insert
|
---|
114 | $ DELETE 'f'.obj;*
|
---|
115 | $ endif
|
---|
116 | $ i = i + 1
|
---|
117 | $ goto oloop
|
---|
118 | $odone:
|
---|
119 | $ return
|
---|
120 | $
|
---|
121 | $!
|
---|
122 | $! check functions.def for a DEFFUNC() entry corresponding to missing file 'f'.c
|
---|
123 | $!
|
---|
124 | $chk_deffunc:
|
---|
125 | $ define/User sys$output _NL:
|
---|
126 | $ define/User sys$error _NL:
|
---|
127 | $ SEARCH functions.def "DEFFUNC","''f'" /Match=AND
|
---|
128 | $ if (($status.and.%x7FFFFFFF) .eq. 1)
|
---|
129 | $ then
|
---|
130 | $ skip_f = 1
|
---|
131 | $ open/Append config_h config.h
|
---|
132 | $ write config_h "#define NEED_''f'"
|
---|
133 | $ close config_h
|
---|
134 | $ endif
|
---|
135 | $ return
|
---|
136 | $
|
---|
137 | $!
|
---|
138 | $pass2_failure1:
|
---|
139 | $! if we reach here, dummy.c failed to compile and we're really stuck
|
---|
140 | $ type sys$input:
|
---|
141 |
|
---|
142 | Cannot compile the library contents checker (dummy.c + functions.def),
|
---|
143 | so cannot continue!
|
---|
144 |
|
---|
145 | $! attempt the compile again, without suppressing diagnostic messages this time
|
---|
146 | $ on error then ABORT +0*f$verify(v)
|
---|
147 | $ v = f$verify(1)
|
---|
148 | $ 'CC' dummy.c
|
---|
149 | $ ABORT +0*f$verify(v) !'f$verify(0)'
|
---|
150 | $!
|
---|
151 | $pass2_failure2:
|
---|
152 | $! should never reach here..
|
---|
153 | $ type sys$input:
|
---|
154 |
|
---|
155 | Cannot link the library contents checker (dummy.obj), so cannot continue!
|
---|
156 |
|
---|
157 | $! attempt the link again, without suppressing diagnostic messages this time
|
---|
158 | $ on error then ABORT +0*f$verify(v)
|
---|
159 | $ v = f$verify(1)
|
---|
160 | $ LINK/Map=dummy.map/noExe dummy.obj,'WORK_LIB'/Libr,-
|
---|
161 | gnu_cc:[000000]gcclib.olb/Libr,sys$library:vaxcrtl.olb/Libr
|
---|
162 | $ ABORT +0*f$verify(v) !'f$verify(0)'
|
---|
163 | $
|
---|
164 | $! not reached
|
---|
165 | $ exit
|
---|