167 lines
5.0 KiB
Plaintext
167 lines
5.0 KiB
Plaintext
$! libiberty/vmsbuild.com -- build liberty.olb for VMS host, VMS target
|
|
$!
|
|
$ CC = "gcc /noVerbose/Debug/Incl=([],[-.include])"
|
|
$ LIBR = "library /Obj"
|
|
$ LINK = "link"
|
|
$ DELETE= "delete /noConfirm"
|
|
$ SEARCH= "search /Exact"
|
|
$ ECHO = "write sys$output"
|
|
$ ABORT = "exit %x002C"
|
|
$!
|
|
$ LIB_NAME = "liberty.olb" !this is what we're going to construct
|
|
$ WORK_LIB = "new-lib.olb" !used to guard against an incomplete build
|
|
$
|
|
$! manually copied from Makefile.in
|
|
$ REQUIRED_OFILES = "argv.o basename.o choose-temp.o concat.o cplus-dem.o "-
|
|
+ "fdmatch.o getopt.o getopt1.o getruntime.o hex.o "-
|
|
+ "floatformat.o obstack.o spaces.o strerror.o strsignal.o "-
|
|
+ "vasprintf.o xatexit.o xexit.o xmalloc.o xstrdup.o xstrerror.o"
|
|
$! anything not caught by link+search of dummy.* should be added here
|
|
$ EXTRA_OFILES = ""
|
|
$!
|
|
$! move to the directory which contains this command procedure
|
|
$ old_dir = f$environ("DEFAULT")
|
|
$ new_dir = f$parse("_._;",f$environ("PROCEDURE")) - "_._;"
|
|
$ set default 'new_dir'
|
|
$
|
|
$ ECHO "Starting libiberty build..."
|
|
$ create config.h
|
|
/* libiberty config.h for VMS */
|
|
#define NEED_sys_siglist
|
|
#define NEED_psignal
|
|
#define NEED_basename
|
|
$ if f$search("alloca-conf.h").eqs."" then -
|
|
copy alloca-norm.h alloca-conf.h
|
|
$ LIBR 'WORK_LIB' /Create
|
|
$
|
|
$! first pass: compile "required" modules
|
|
$ ofiles = REQUIRED_OFILES + " " + EXTRA_OFILES
|
|
$ pass = 1
|
|
$ gosub do_ofiles
|
|
$
|
|
$! second pass: process dummy.c, using the first pass' results
|
|
$ ECHO " now checking run-time library for missing functionality"
|
|
$ if f$search("dummy.obj").nes."" then DELETE dummy.obj;*
|
|
$ define/noLog sys$error _NL: !can't use /User_Mode here due to gcc
|
|
$ define/noLog sys$output _NL: ! driver's use of multiple image activation
|
|
$ on error then continue
|
|
$ 'CC' dummy.c
|
|
$ deassign sys$error !restore, more or less
|
|
$ deassign sys$output
|
|
$ if f$search("dummy.obj").eqs."" then goto pass2_failure1
|
|
$! link dummy.obj, capturing full linker feedback in dummy.map
|
|
$ oldmsg = f$environ("MESSAGE")
|
|
$ set message /Facility/Severity/Identification/Text
|
|
$ define/User sys$output _NL:
|
|
$ define/User sys$error _NL:
|
|
$ LINK/Map=dummy.map/noExe dummy.obj,'WORK_LIB'/Libr,-
|
|
gnu_cc:[000000]gcclib.olb/Libr,sys$library:vaxcrtl.olb/Libr
|
|
$ set message 'oldmsg'
|
|
$ if f$search("dummy.map").eqs."" then goto pass2_failure2
|
|
$ DELETE dummy.obj;*
|
|
$ SEARCH dummy.map "%LINK-I-UDFSYM" /Output=dummy.list
|
|
$ DELETE dummy.map;*
|
|
$ ECHO " check completed"
|
|
$! we now have a file with one entry per line of unresolvable symbols
|
|
$ ofiles = ""
|
|
$ if f$trnlnm("IFILE$").nes."" then close/noLog ifile$
|
|
$ open/Read ifile$ dummy.list
|
|
$iloop: read/End=idone ifile$ iline
|
|
$ iline = f$edit(iline,"COMPRESS,TRIM,LOWERCASE")
|
|
$ ofiles = ofiles + " " + f$element(1," ",iline) + ".o"
|
|
$ goto iloop
|
|
$idone: close ifile$
|
|
$ DELETE dummy.list;*
|
|
$ on error then ABORT
|
|
$
|
|
$! third pass: compile "missing" modules collected in pass 2
|
|
$ pass = 3
|
|
$ gosub do_ofiles
|
|
$
|
|
$! finish up
|
|
$ LIBR 'WORK_LIB' /Compress /Output='LIB_NAME' !new-lib.olb -> liberty.olb
|
|
$ DELETE 'WORK_LIB';*
|
|
$
|
|
$! all done
|
|
$ ECHO "Completed libiberty build."
|
|
$ type sys$input:
|
|
|
|
You many wish to do
|
|
$ COPY LIBERTY.OLB GNU_CC:[000000]
|
|
so that this run-time library resides in the same location as gcc's
|
|
support library. When building gas, be sure to leave the original
|
|
copy of liberty.olb here so that gas's build procedure can find it.
|
|
|
|
$ set default 'old_dir'
|
|
$ exit
|
|
$
|
|
$!
|
|
$! compile each element of the space-delimited list 'ofiles'
|
|
$!
|
|
$do_ofiles:
|
|
$ ofiles = f$edit(ofiles,"COMPRESS,TRIM")
|
|
$ i = 0
|
|
$oloop:
|
|
$ f = f$element(i," ",ofiles)
|
|
$ if f.eqs." " then goto odone
|
|
$ f = f - ".o" !strip dummy suffix
|
|
$ ECHO " ''f'"
|
|
$ skip_f = 0
|
|
$ if pass.eq.3 .and. f$search("''f'.c").eqs."" then gosub chk_deffunc
|
|
$ if .not.skip_f
|
|
$ then
|
|
$ 'CC' 'f'.c
|
|
$ LIBR 'WORK_LIB' 'f'.obj /Insert
|
|
$ DELETE 'f'.obj;*
|
|
$ endif
|
|
$ i = i + 1
|
|
$ goto oloop
|
|
$odone:
|
|
$ return
|
|
$
|
|
$!
|
|
$! check functions.def for a DEFFUNC() entry corresponding to missing file 'f'.c
|
|
$!
|
|
$chk_deffunc:
|
|
$ define/User sys$output _NL:
|
|
$ define/User sys$error _NL:
|
|
$ SEARCH functions.def "DEFFUNC","''f'" /Match=AND
|
|
$ if (($status.and.%x7FFFFFFF) .eq. 1)
|
|
$ then
|
|
$ skip_f = 1
|
|
$ open/Append config_h config.h
|
|
$ write config_h "#define NEED_''f'"
|
|
$ close config_h
|
|
$ endif
|
|
$ return
|
|
$
|
|
$!
|
|
$pass2_failure1:
|
|
$! if we reach here, dummy.c failed to compile and we're really stuck
|
|
$ type sys$input:
|
|
|
|
Cannot compile the library contents checker (dummy.c + functions.def),
|
|
so cannot continue!
|
|
|
|
$! attempt the compile again, without suppressing diagnostic messages this time
|
|
$ on error then ABORT +0*f$verify(v)
|
|
$ v = f$verify(1)
|
|
$ 'CC' dummy.c
|
|
$ ABORT +0*f$verify(v) !'f$verify(0)'
|
|
$!
|
|
$pass2_failure2:
|
|
$! should never reach here..
|
|
$ type sys$input:
|
|
|
|
Cannot link the library contents checker (dummy.obj), so cannot continue!
|
|
|
|
$! attempt the link again, without suppressing diagnostic messages this time
|
|
$ on error then ABORT +0*f$verify(v)
|
|
$ v = f$verify(1)
|
|
$ LINK/Map=dummy.map/noExe dummy.obj,'WORK_LIB'/Libr,-
|
|
gnu_cc:[000000]gcclib.olb/Libr,sys$library:vaxcrtl.olb/Libr
|
|
$ ABORT +0*f$verify(v) !'f$verify(0)'
|
|
$
|
|
$! not reached
|
|
$ exit
|