carl
This commit is contained in:
61
library/Makefile
Normal file
61
library/Makefile
Normal file
@ -0,0 +1,61 @@
|
||||
# Makefile to make executables from alpha source code files
|
||||
# and also make executables from some sample assembly files execising the alpha library
|
||||
#
|
||||
# Carl Alphonce
|
||||
# April 20, 2024
|
||||
|
||||
# The alpha compiler and flags (adjust the flags as needed)
|
||||
AC := ./alpha
|
||||
AFLAGS := -tok -asc -tc -st -ir -cg
|
||||
|
||||
# The preprocessor and flags (you should not adjust these)
|
||||
CPP := cpp
|
||||
CPPFLAGS := -P -x c
|
||||
|
||||
# Adjust for the library your team is using (register-based or stack-based parameter passing)
|
||||
|
||||
ALPHA_LIB = alpha_lib_reg.s ## Register-based parameter passing
|
||||
#ALPHA_LIB = alpha_lib_st.s ## Stack-based parameter passing
|
||||
|
||||
# Adjust for the parameter passing approach your compiler uses:
|
||||
# alpha_driver_reg.s for register-based parameter passing
|
||||
# alpha_driver_st.s for stack-based parameter passing
|
||||
# This file provides a main function that packages up argv[1] (or "") as an alpha string
|
||||
# (type 1->character) and calls entry with that argument
|
||||
|
||||
ALPHA_DRIVER = alpha_driver_reg.s ## Register-based parameter passing
|
||||
#ALPHA_DRIVER = alpha_driver_st.s ## Stack-based parameter passing
|
||||
|
||||
|
||||
# Create an assembly (.s) file from an alpha source file
|
||||
# This involves several steps:
|
||||
%.s : %.alpha
|
||||
@mv $< $<._temporary_ # 1. rename input file so we can us it as
|
||||
@$(CPP) $(CPPFLAGS) $<._temporary_ > $< # 2. input to CPP, writing output to original filename
|
||||
@$(AC) $(AFLAGS) $< # 3. run the alpha compiler on the pre-processed file
|
||||
@mv $<._temporary_ $< # 4. restore the original input file
|
||||
|
||||
|
||||
|
||||
# Examples of assembly code using the alpha library files
|
||||
# In these examples the calling code is in assembly, and defines main (so the driver is not included here)
|
||||
|
||||
# Example #1: calling the printBoolean function
|
||||
printBoolean : printBoolean_reg.s
|
||||
@gcc $< $(ALPHA_LIB) -no-pie -o $@
|
||||
|
||||
# Example #2: calling the printInt function
|
||||
printInt : printInt_reg.s
|
||||
@gcc $< $(ALPHA_LIB) -no-pie -o $@
|
||||
|
||||
# Example #3: calling the reserve and release functions
|
||||
reserve_release : reserve_release_reg.s
|
||||
@gcc $< $(ALPHA_LIB) -no-pie -o $@
|
||||
|
||||
|
||||
# The rule for assembling .s files and linking them together (using the gcc compiler driver)
|
||||
# to produce an executable (assuming no earlier make rule triggers first)
|
||||
|
||||
% : %.s $(ALPHA_LIB) $(ALPHA_DRIVER)
|
||||
@gcc $< $(ALPHA_LIB) $(ALPHA_DRIVER) -no-pie -o $@
|
||||
|
Reference in New Issue
Block a user