changeset 179:3711cd1c01e2

Added as front-end script for use with gcc6809
author lost
date Wed, 04 Mar 2009 05:34:17 +0000
parents f8ec28ace0c6
children 6ebb93b409ba
files extra/README extra/as
diffstat 2 files changed, 166 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/extra/README	Wed Mar 04 05:34:17 2009 +0000
@@ -0,0 +1,22 @@
+These files are extra utility type scripts that can be used for various
+purposes.
+
+as
+
+This is a sort of front-end script that makes lwasm look approximately like
+gnu as which is useful for using lwasm as a backend to gcc. You will
+probably need to edit it to make it work fully. Simply put this in place
+of whatever gcc6809 installed for "as" (in the "m6809/bin" folder in
+"--prefix") after editing it to point to the real location of the "lwasm"
+binary.
+
+
+ld
+
+Similar to the "as" script above except for lwlink.
+
+
+ar
+
+Similar to the "as" script above except for lwar.
+
--- /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....