Admin Panel
# amibuild.make
#
# build programs with the following compilers:
# VBCC, GCC, AROS_GCC, SASC
SOURCES_C = exec_semaphore.c exec_copymem.c
SOURCES_C += exec_makefuncs.c exec_initstruct.c
SOURCES_C += exec_makelib.c exec_libfuncs.c
SOURCES_C += exec_initres.c exec_rawdofmt.c
SOURCES_C += dos_readargs.c dos_findarg.c
SOURCES_C += dos_loadseg.c dos_runcmd.c
SOURCES_C += dos_system.c dos_match.c
SOURCES_C += dos_program.c
SOURCES_C += vprintf.c
SOURCES_C += util_muldiv.c util_date.c
SOURCES_C += math_double.c math_double_trans.c
SOURCES_C += math_single.c math_single_trans.c
SOURCES_C += math_fast.c math_fast_trans.c
SOURCES_C += test_hello.c test_raise.c
SOURCES_C += test_devtimer.c
SOURCES_C += lib_testnix.c lib_testsc.c
SOURCES_C += proc_args.c
LIB_GCC_SOURCES_C = testnix.c
LIB_SC_SOURCES_C = testsc.c
LIB_SRC_DIR = libs
VPATH = src
# directories
BUILD_DIR ?= bin
LIB_BUILD_DIR = $(BUILD_DIR)/libs
LIB_POSTFIXES = gcc gcc-dbg gcc-res gcc-res-dbg
LIB_POSTFIXES += sc sc-dbg sc-res sc-res-dbg
LIB_BUILD_DIRS = $(LIB_BUILD_DIR) $(patsubst %,$(LIB_BUILD_DIR)-%,$(LIB_POSTFIXES))
# external data
SASC_INSTALL_DIR ?= volumes/sc
export SASC_INSTALL_DIR
NDK_DIR ?= /opt/m68k-amigaos/m68k-amigaos/ndk
# compilers
VBCC_EXE = vc
GCC = m68k-amigaos-gcc
AROS_GCC = m68k-aros-gcc
AROS_ELF2HUNK = elf2hunk
SASC = ../bin/vamos -c sasc.vamosrc sc
SLINK = ../bin/vamos -c sasc.vamosrc slink
# options
VBCC_OPTS = +aos68k -I$(NDK_DIR)/include -Iinclude
GCC_OPTS = -noixemul -Iinclude
GCC_OPTS_LIB = -ramiga-lib -fbaserel
GCC_OPTS_LIB_RES = -ramiga-libr -resident
AROS_GCC_OPTS = -Iinclude
SASC_OPTS = SMALLDATA SMALLCODE NOSTKCHK NOCHKABORT NOICONS STRICT ANSI \
INCDIR=include
SLINK_OPTS = SD NOICONS LIBVERSION 1 LIBREVISION 0 LIBPREFIX _LIB \
LIB lib:sc.lib FROM lib:libent.o
SLINK_OPTS_DEF = $(SLINK_OPTS) lib:libinit.o
SLINK_OPTS_RES = $(SLINK_OPTS) lib:libinitr.o
# optimize options
VBCC_OPTI = -O2
GCC_OPTI = -O2
AROS_GCC_OPTI = -O2
SASC_OPTI = PARAMETERS=REGISTERS OPT OPTTIME OPTINLINE DEBUG=F \
OPTSCHEDULE STRINGMERGE STRUCTUREEQUIVALENCE
# debug options
VBCC_DEBUG = -g
GCC_DEBUG = -g
AROS_GCC_DEBUG = -g
SASC_DEBUG = DEBUG=F
# libs
VBCC_LIBS = -lamiga
# binary extensions
VBCC_EXT = _vc
GCC_EXT = _gcc
AROS_GCC_EXT = _agcc
SASC_EXT = _sc
DBG_EXT = _dbg
# source to program mapping
PROGS_VBCC = $(patsubst %.c,$(BUILD_DIR)/%$(VBCC_EXT),$(SOURCES_C))
PROGS_GCC = $(patsubst %.c,$(BUILD_DIR)/%$(GCC_EXT),$(SOURCES_C))
PROGS_AROS = $(patsubst %.c,$(BUILD_DIR)/%$(AROS_GCC_EXT),$(SOURCES_C))
PROGS_SASC = $(patsubst %.c,$(BUILD_DIR)/%$(SASC_EXT),$(SOURCES_C))
PROGS = $(PROGS_VBCC) $(PROGS_GCC) $(PROGS_AROS) $(PROGS_SASC)
PROGS_VBCC_DBG = $(patsubst %.c,$(BUILD_DIR)/%$(VBCC_EXT)$(DBG_EXT),$(SOURCES_C))
PROGS_GCC_DBG = $(patsubst %.c,$(BUILD_DIR)/%$(GCC_EXT)$(DBG_EXT),$(SOURCES_C))
PROGS_AROS_DBG = $(patsubst %.c,$(BUILD_DIR)/%$(AROS_GCC_EXT)$(DBG_EXT),$(SOURCES_C))
PROGS_SASC_DBG = $(patsubst %.c,$(BUILD_DIR)/%$(SASC_EXT)$(DBG_EXT),$(SOURCES_C))
PROGS_DBG = $(PROGS_VBCC_DBG) $(PROGS_GCC_DBG) $(PROGS_AROS_DBG) $(PROGS_SASC_DBG)
# libraries: gcc
LIBS_GCC = $(patsubst %.c,$(LIB_BUILD_DIR)-gcc/%.library,$(LIB_GCC_SOURCES_C))
LIBS_GCC += $(patsubst %.c,$(LIB_BUILD_DIR)-gcc-res/%.library,$(LIB_GCC_SOURCES_C))
LIBS = $(LIBS_GCC)
LIBS_GCC_DBG = $(patsubst %.c,$(LIB_BUILD_DIR)-gcc-dbg/%.library,$(LIB_GCC_SOURCES_C))
LIBS_GCC_DBG += $(patsubst %.c,$(LIB_BUILD_DIR)-gcc-res-dbg/%.library,$(LIB_GCC_SOURCES_C))
LIBS_DBG = $(LIBS_GCC_DBG)
# libraries: sc
LIBS_SC = $(patsubst %.c,$(LIB_BUILD_DIR)-sc/%.library,$(LIB_SC_SOURCES_C))
LIBS_SC += $(patsubst %.c,$(LIB_BUILD_DIR)-sc-res/%.library,$(LIB_SC_SOURCES_C))
LIBS += $(LIBS_SC)
LIBS_SC_DBG = $(patsubst %.c,$(LIB_BUILD_DIR)-sc-dbg/%.library,$(LIB_SC_SOURCES_C))
LIBS_SC_DBG += $(patsubst %.c,$(LIB_BUILD_DIR)-sc-res-dbg/%.library,$(LIB_SC_SOURCES_C))
LIBS_DBG += $(LIBS_SC_DBG)
# --- rules ---
test:
./vamos-test --auto-build
rebuild: clean build
build: check $(PROGS) $(PROGS_DBG) $(LIBS) $(LIBS_DBG)
check:
@if [ ! -d volumes/sc ]; then \
echo "directory 'volumes/sc' is missing!" ; \
exit 1 ; \
fi
opt: $(PROGS)
debug: $(PROGS_DBG)
all-libs: libs libs-debug
libs: $(LIBS)
libs-debug: $(LIBS_DBG)
$(PROGS): $(BUILD_DIR)
$(LIBS): $(LIB_BUILD_DIRS)
clean:
rm -rf $(BUILD_DIR)
# dir rules
$(BUILD_DIR):
mkdir -p $(BUILD_DIR)
$(LIB_BUILD_DIRS):
mkdir -p $(LIB_BUILD_DIRS)
# rules for opt
$(BUILD_DIR)/%$(VBCC_EXT) : %.c
$(VBCC_EXE) $(VBCC_OPTS) $(VBCC_OPTI) -o $@ $< $(VBCC_LIBS)
$(BUILD_DIR)/%$(GCC_EXT) : %.c
$(GCC) $(GCC_OPTS) $(GCC_OPTI) -o $@ $<
$(BUILD_DIR)/%$(AROS_GCC_EXT) : %.c
$(AROS_GCC) $(AROS_GCC_OPTS) $(AROS_GCC_OPTI) -o $@ $<
$(BUILD_DIR)/%$(SASC_EXT) : %.c
$(SASC) $(SASC_OPTS) $(SASC_OPTI) LINK TO $@ $<
rm -f $@.lnk $(<:.c=.o)
# rules for dbg
$(BUILD_DIR)/%$(VBCC_EXT)$(DBG_EXT) : %.c
$(VBCC_EXE) $(VBCC_OPTS) $(VBCC_DEBUG) -o $@ $< $(VBCC_LIBS)
$(BUILD_DIR)/%$(GCC_EXT)$(DBG_EXT) : %.c
$(GCC) $(GCC_OPTS) $(GCC_DEBUG) -o $@ $<
$(BUILD_DIR)/%$(AROS_GCC_EXT)$(DBG_EXT) : %.c
$(AROS_GCC) $(AROS_GCC_OPTS) $(AROS_GCC_DEBUG) -o $@ $<
$(BUILD_DIR)/%$(SASC_EXT)$(DBG_EXT) : %.c
$(SASC) $(SASC_OPTS) $(SASC_DEBUG) LINK TO $@ $<
rm -f $@.lnk $(<:.c=.o)
# lib rules: gcc
$(LIB_BUILD_DIR)-gcc/%.library : $(LIB_SRC_DIR)/%.c
$(GCC) $(GCC_OPTS) $(GCC_OPTI) $(GCC_OPTS_LIB) -o $@ $<
$(LIB_BUILD_DIR)-gcc-res/%.library : $(LIB_SRC_DIR)/%.c
$(GCC) $(GCC_OPTS) $(GCC_OPTI) $(GCC_OPTS_LIB_RES) -o $@ $<
$(LIB_BUILD_DIR)-gcc-dbg/%.library : $(LIB_SRC_DIR)/%.c
$(GCC) $(GCC_OPTS) $(GCC_DEBUG) $(GCC_OPTS_LIB) -o $@ $<
$(LIB_BUILD_DIR)-gcc-res-dbg/%.library : $(LIB_SRC_DIR)/%.c
$(GCC) $(GCC_OPTS) $(GCC_DEBUG) $(GCC_OPTS_LIB_RES) -o $@ $<
# lib rules: sc
$(LIB_BUILD_DIR)-sc/%.o: $(LIB_SRC_DIR)/%.c
$(SASC) libcode nostackcheck objectname=$@ $<
$(LIB_BUILD_DIR)-sc/%.library : $(LIB_BUILD_DIR)-sc/%.o
$(SLINK) LIBFD $(FD_FILE) TO $@ $(SLINK_OPTS_DEF) $<
$(LIB_BUILD_DIR)-sc-dbg/%.o: $(LIB_SRC_DIR)/%.c
$(SASC) libcode nostackcheck debug line objectname=$@ $<
$(LIB_BUILD_DIR)-sc-dbg/%.library : $(LIB_BUILD_DIR)-sc-dbg/%.o
$(SLINK) LIBFD $(FD_FILE) TO $@ $(SLINK_OPTS_DEF) $<
$(LIB_BUILD_DIR)-sc-res/%.o: $(LIB_SRC_DIR)/%.c
$(SASC) libcode nostackcheck objectname=$@ $<
$(LIB_BUILD_DIR)-sc-res/%.library : $(LIB_BUILD_DIR)-sc/%.o
$(SLINK) LIBFD $(FD_FILE) TO $@ $(SLINK_OPTS_RES) $<
$(LIB_BUILD_DIR)-sc-res-dbg/%.o: $(LIB_SRC_DIR)/%.c
$(SASC) libcode nostackcheck debug line objectname=$@ $<
$(LIB_BUILD_DIR)-sc-res-dbg/%.library : $(LIB_BUILD_DIR)-sc-dbg/%.o
$(SLINK) LIBFD $(FD_FILE) TO $@ $(SLINK_OPTS_RES) $<
$(LIB_BUILD_DIR)-sc/testsc.library: FD_FILE=../amitools/data/fd/testsc_lib.fd
$(LIB_BUILD_DIR)-sc-dbg/testsc.library: FD_FILE=../amitools/data/fd/testsc_lib.fd
$(LIB_BUILD_DIR)-sc-res/testsc.library: FD_FILE=../amitools/data/fd/testsc_lib.fd
$(LIB_BUILD_DIR)-sc-res-dbg/testsc.library: FD_FILE=../amitools/data/fd/testsc_lib.fd
# special flags
$(BUILD_DIR)/math_double_sc: SASC_OPTS += Math=i
$(BUILD_DIR)/math_double_sc$(DBG_EXT): SASC_OPTS += Math=i
$(BUILD_DIR)/math_double_trans_sc: SASC_OPTS += Math=i
$(BUILD_DIR)/math_double_trans_sc$(DBG_EXT): SASC_OPTS += Math=i
$(BUILD_DIR)/math_single_sc: SASC_OPTS += Math=i
$(BUILD_DIR)/math_single_sc$(DBG_EXT): SASC_OPTS += Math=i
$(BUILD_DIR)/math_single_trans_sc: SASC_OPTS += Math=i
$(BUILD_DIR)/math_single_trans_sc$(DBG_EXT): SASC_OPTS += Math=i
$(BUILD_DIR)/math_fast_sc: SASC_OPTS += Math=f
$(BUILD_DIR)/math_fast_sc$(DBG_EXT): SASC_OPTS += Math=f
$(BUILD_DIR)/math_fast_trans_sc: SASC_OPTS += Math=f
$(BUILD_DIR)/math_fast_trans_sc$(DBG_EXT): SASC_OPTS += Math=f