Mercurial > hg-old > index.cgi
diff extra/as @ 179:3711cd1c01e2
Added as front-end script for use with gcc6809
author | lost |
---|---|
date | Wed, 04 Mar 2009 05:34:17 +0000 |
parents | |
children | 0926c29426f4 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/extra/as Wed Mar 04 05:34:17 2009 +0000 @@ -0,0 +1,144 @@ +#!/bin/sh +# +# Copyright 2009 by William Astle <lost@l-w.ca> +# +#This file is part of LWASM. +# +#LWASM is free software: you can redistribute it and/or modify it under the +#terms of the GNU General Public License as published by the Free Software +#Foundation, either version 3 of the License, or (at your option) any later +#version. +# +#This program is distributed in the hope that it will be useful, but WITHOUT +#ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +#FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +#more details. +# +#You should have received a copy of the GNU General Public License along with +#this program. If not, see <http://www.gnu.org/licenses/>. + +# this was based somewhat on the "as" script from gcc6809 + +#echo "LWASM-as $0 $*" + +show_version () { +cat <<END +LWASM (GNU assembler frontend) 2.3 +This program is free software; you may redistribute it under the terms of +the GNU General Public License. This program has absolutely no warranty. +END +} + +fatal_error () { + echo $* 1>&2 + exit 1 +} + +# Assume nothing. + +input_file= +output_file= +list_file= +options= +list_file_enabled=n + +# Parse the command-line options. See the GNU 'as' man page for +# an explanation of all these options. Our goal is to translate +# them into lwasm form. + +while [ "$1" != "" ]; do + arg=$1; shift + case $arg in + -m6809) + true + ;; + -gn) + # Generate NoICE debug symbols + # ignored - no output formats support debugging symbols + ;; + -gs) + # Generate SDCC debug symbols + # ignored - no output formats supprt debugging symbols + ;; +# --globalize-symbols) +# # Make all symbols global +# # lwasm does not support globalizing everything by default +# ;; + -m*) + fatal_error "invalid CPU option '$arg'" + ;; + --) + fatal_error "standard input not supported" + ;; +# -a*) +# options="${options}lc" +# list_file_enabled=y +# ;; + -I*) + #include_file=${arg#-I} + #echo "warning: include path '$include_file' ignored" + ;; + -MD) + fatal_error "assembler option '$arg' not supported" + ;; + -o) + output_file=$1; shift + ;; + -v|-version) + show_version + ;; + --version) + show_version + exit 0 + ;; + -D|-f|-K|--traditional-format|-w|-x|-Z|-W|--no-warn) + # These options are accepted but ignored by GNU as. + true + ;; +# =*) +# # Set the name of the listing file +# list_file=${arg#=} +# ;; + -*) + echo "as (m6809): unrecognized option $arg" + exit 1 + ;; + *) + input_file=$arg + ;; + esac +done + +# Complain if no input files given. We don't support redirecting +# from standard input. + +if [ "x$input_file" = "x" ]; then + fatal_error "no input file specified" +fi + +# Invoke the real (lwasm) assembler. +# The -o option specifies the output file name +# --obj creates object files +# --pragma=undefextern causes undefined symbols to be assumed external +# --pragma=cescapes allows C escape syntax in strings +#echo lwasm -o "$output_file" $options --obj --pragma=undefextern --pragma=cescapes $input_file +lwasm -o "$output_file" $options --obj --pragma=undefextern --pragma=cescapes $input_file +rc=$? + +# OK, see if the assembler succeeded or not. +# If it failed, the source is copied to /tmp/as6809_error.s +# so that it can be inspected. GCC will normally delete any +# temporary .s files that it generates. This makes debugging +# the compiler easier. +# +# lwasm does not create an output file if it errors out but it also doesn't +# remove an existing file if it fails so we remove it anyway... + +if [ "$rc" != "0" ]; then + cp -p $input_file /tmp/as6809_error.s + rm -f $asoutput_file + exit $rc +fi + +# we don't need anything fancy here since lwasm supports specifying output +# file names....