From eca46476a1e14534a35807e749fad525aebf4961 Mon Sep 17 00:00:00 2001 From: Jeremy Rand Date: Sat, 20 Jul 2019 10:46:32 -0500 Subject: [PATCH] Move all build products to the standard Xcode directories. Eliminate support for the old version of cc65 because I don't want to test it --- make/createDiskImage | 4 +- make/head.mk | 33 +++++- make/merlin-asm | 38 ++++++ make/tail.mk | 110 +++++++++--------- .../TemplateInfo.plist | 2 +- .../___PACKAGENAME___.xcscheme | 12 ++ .../TemplateInfo.plist | 10 +- .../___PACKAGENAME___.xcscheme | 12 ++ .../TemplateInfo.plist | 2 +- .../___PACKAGENAME___.xcscheme | 12 ++ .../TemplateInfo.plist | 2 +- .../___PACKAGENAME___.xcscheme | 12 ++ 12 files changed, 187 insertions(+), 62 deletions(-) create mode 100755 make/merlin-asm diff --git a/make/createDiskImage b/make/createDiskImage index 55e428a..daec8e9 100755 --- a/make/createDiskImage +++ b/make/createDiskImage @@ -7,7 +7,7 @@ merlinStartAddr() { if [ $# -lt 5 ] then - echo USAGE: $0 ' ' + echo USAGE: $0 ' ' exit 1 fi @@ -318,7 +318,7 @@ do # to copy to the disk image. if [ -f "$ITEM" ] && echo "$ITEM" | grep '\.tok$' > /dev/null then - DESTFILE=`echo "$ITEM" | sed 's/\.tok$//'` + DESTFILE=`basename "$ITEM" | sed 's/\.tok$//'` "$JAVA" -jar "$APPLECOMMANDER" -p "$DISKIMAGE" "$DESTFILE" "$BASICFILETYPE" 0x801 < "$ITEM" continue fi diff --git a/make/head.mk b/make/head.mk index 28ebc58..4fcc688 100644 --- a/make/head.mk +++ b/make/head.mk @@ -24,20 +24,47 @@ CC65=$(CC65_BIN)/cc65 CO65=$(CC65_BIN)/co65 MERLIN_DIR=/usr/local -MERLIN_BIN=$(MERLIN_DIR)/bin/Merlin32 -MERLIN_LIB=$(MERLIN_DIR)/lib/Merlin +export MERLIN_BIN=$(MERLIN_DIR)/bin/Merlin32 +export MERLIN_LIB=$(MERLIN_DIR)/lib/Merlin +MERLIN_ASM=make/merlin-asm AC=make/AppleCommander.jar SRCDIRS=. +# Check for Xcode build variables for the locations of build outputs and fall back +# to the current directory if not set. +ifeq ($(OBJECT_FILE_DIR),) + OBJDIR=. +else + export OBJECT_FILE_DIR + OBJDIR=$(OBJECT_FILE_DIR) +endif + +ifeq ($(DERIVED_SOURCES_DIR),) + GENDIR=. +else + export DERIVED_SOURCES_DIR + GENDIR=$(DERIVED_SOURCES_DIR) +endif + +ifeq ($(TARGET_BUILD_DIR),) + TARGETDIR=. +else + export TARGET_BUILD_DIR + TARGETDIR=$(TARGET_BUILD_DIR) +endif + + MACHINE=apple2 CPU=6502 CFLAGS= ASMFLAGS= LDFLAGS= DRIVERS= -DRVDIR=drivers +DRVDIR=$(GENDIR)/drivers + +MKDIR=mkdir -p XCODE_PATH=/Applications/Xcode.app XCODE_INFO=$(XCODE_PATH)/Contents/Info.plist diff --git a/make/merlin-asm b/make/merlin-asm new file mode 100755 index 0000000..9bed373 --- /dev/null +++ b/make/merlin-asm @@ -0,0 +1,38 @@ +#!/bin/bash + +ERROUTPUT=/tmp/merlin-err.$$ + +LINKSCRIPT="$1" +shift + +OUTFILE="$1" +shift + +TARGETOUTPUT="$1" +shift + +cleanup() +{ + rm -r error_output.txt + rm -f _FileInformation.txt + rm -f _Output.txt + rm -f "$ERROUTPUT" +} + +"$MERLIN_BIN" -V "$MERLIN_LIB" "$LINKSCRIPT" 2>&1 | tee "$ERROUTPUT" +if [ ! -f "$OUTFILE" ] +then + cat error_output.txt + tr "'" '"' < "$ERROUTPUT" | + grep '\[Error\]' | + sed 's!^.*\[Error\] \(.*file "\([^"]*\.s\)".*line \([1-9][0-9]*\).*\)$!'`pwd`'/\2:\3:0: error: \1!' | + sed 's!^.*\[Error\] \(.*line \([1-9][0-9]*\).*file "\([^"]*\.s\)".*\)$!'`pwd`'/\3:\2:0: error: \1!' + cleanup + exit 1 +fi + +mv "$OUTFILE" "$TARGETOUTPUT" + +cleanup + +exit 0 diff --git a/make/tail.mk b/make/tail.mk index fd961e5..3d6256c 100644 --- a/make/tail.mk +++ b/make/tail.mk @@ -14,12 +14,14 @@ BUILD_TYPE := $(shell if echo $(MACHINE) | grep -q -- -basic; then echo basic; e CWD=$(shell pwd) -DISKIMAGE=$(PGM).dsk +DISKIMAGE=$(TARGETDIR)/$(PGM).dsk EXECCMD= -BASIC_SRCS=$(patsubst ./%, %, $(wildcard $(addsuffix /*.bas, $(SRCDIRS)))) -BASIC_OBJS=$(BASIC_SRCS:.bas=.tok) +vpath $(GENDIR) + +BASIC_SRCS=$(patsubst $(GENDIR)/%, %, $(patsubst ./%, %, $(wildcard $(addsuffix /*.bas, $(SRCDIRS))))) +BASIC_OBJS=$(patsubst %.bas, $(TARGETDIR)/%.tok, $(BASIC_SRCS)) ifeq ($(BUILD_TYPE),cc65) export PATH := $(PATH):$(CC65_BIN) @@ -33,50 +35,37 @@ ifeq ($(BUILD_TYPE),cc65) BASE_MACHINE = apple2enh endif - CC65_VERSION := $(shell $(CC65) --version 2>&1 | grep '^cc65 V') + export CC65_SUPPORTS_APPLE_SINGLE=1 + CC65_CREATE_DEP_ARG=--create-dep $(@:.o=.u) + CC65_LIST_ARG=-l $(@:.o=.lst) + CC65_DRV_DIR=$(CC65_HOME)/target/$(BASE_MACHINE)/drv - ifeq ($(CC65_VERSION),cc65 V2.13.3) - export CC65_SUPPORTS_APPLE_SINGLE=0 - CC65_CREATE_DEP_ARG=--create-dep - CC65_LIST_ARG=-l - CC65_DRV_DIR=$(CC65_HOME) - - MACHCONFIG= -t $(BASE_MACHINE) - ifeq ($(filter $(MACHINE), apple2 apple2enh),) - MACHCONFIG += -C $(MACHINE).cfg - endif + MACHCONFIG= -t $(BASE_MACHINE) + ifneq ($(filter $(MACHINE), apple2-system apple2enh-system),) + MACHCONFIG += -C $(BASE_MACHINE)-system.cfg else - export CC65_SUPPORTS_APPLE_SINGLE=1 - CC65_CREATE_DEP_ARG=--create-dep $(@:.o=.u) - CC65_LIST_ARG=-l $(@:.o=.lst) - CC65_DRV_DIR=$(CC65_HOME)/target/$(BASE_MACHINE)/drv - - MACHCONFIG= -t $(BASE_MACHINE) - ifneq ($(filter $(MACHINE), apple2-system apple2enh-system),) - MACHCONFIG += -C $(BASE_MACHINE)-system.cfg + ifeq ($(PROJECT_TYPE),ca65) + MACHCONFIG += -C $(BASE_MACHINE)-asm.cfg + LDFLAGS += -u __EXEHDR__ else - ifeq ($(PROJECT_TYPE),ca65) - MACHCONFIG += -C $(BASE_MACHINE)-asm.cfg - LDFLAGS += -u __EXEHDR__ - else - MACHCONFIG += -C $(BASE_MACHINE).cfg - endif - endif + MACHCONFIG += -C $(BASE_MACHINE).cfg + endif endif + CFLAGS+=-I $(GENDIR) ifneq ($(DRIVERS),) SRCDIRS+=$(DRVDIR) endif - C_SRCS=$(patsubst ./%, %, $(wildcard $(addsuffix /*.c, $(SRCDIRS)))) - C_OBJS=$(C_SRCS:.c=.o) - C_DEPS=$(C_SRCS:.c=.u) + C_SRCS=$(patsubst $(GENDIR)/%, %, $(patsubst ./%, %, $(wildcard $(addsuffix /*.c, $(SRCDIRS))))) + C_OBJS=$(patsubst %.c, $(OBJDIR)/%.o, $(C_SRCS)) + C_DEPS=$(patsubst %.c, $(OBJDIR)/%.u, $(C_SRCS)) - ASM_SRCS=$(patsubst ./%, %, $(wildcard $(addsuffix /*.s, $(SRCDIRS)))) - ASM_OBJS=$(ASM_SRCS:.s=.o) - ASM_LSTS=$(ASM_SRCS:.s=.lst) + ASM_SRCS=$(patsubst $(GENDIR)/%, %, $(patsubst ./%, %, $(wildcard $(addsuffix /*.s, $(SRCDIRS))))) + ASM_OBJS=$(patsubst %.s, $(OBJDIR)/%.o, $(ASM_SRCS)) + ASM_LSTS=$(patsubst %.s, $(OBJDIR)/%.lst, $(ASM_SRCS)) - MAPFILE=$(PGM).map + MAPFILE=$(TARGETDIR)/$(PGM).map ifneq ($(START_ADDR),) # If the MACHINE is set to an option which does not support a variable @@ -113,7 +102,7 @@ endif ifeq ($(BUILD_TYPE),merlin) ASM_SRCS=$(patsubst ./%, %, $(wildcard $(addsuffix /*.s, $(SRCDIRS)))) - MAPFILE=_Output.txt + MAPFILE=$(TARGETDIR)/_Output.txt EXECCMD=$(shell echo brun $(PGM) | tr '[a-z]' '[A-Z]') endif @@ -122,7 +111,7 @@ ifeq ($(BUILD_TYPE),basic) EXECCMD=$(shell echo run $(PGM) | tr '[a-z]' '[A-Z]') endif -OBJS=$(C_OBJS) $(ASM_OBJS) $(BASIC_OBJS) +OBJS=$(C_OBJS) $(ASM_OBJS) ALLTARGET=$(DISKIMAGE) @@ -131,13 +120,14 @@ ALLTARGET=$(DISKIMAGE) build: $(ALLTARGET) -$(DISKIMAGE): $(PGM) - make/createDiskImage $(AC) $(MACHINE) "$(DISKIMAGE)" "$(PGM)" "$(START_ADDR)" $(BASIC_OBJS) $(COPYDIRS) +$(DISKIMAGE): $(TARGETDIR)/$(PGM) $(BASIC_OBJS) + make/createDiskImage $(AC) $(MACHINE) "$(DISKIMAGE)" "$(TARGETDIR)/$(PGM)" "$(START_ADDR)" $(BASIC_OBJS) $(COPYDIRS) execute: $(DISKIMAGE) - osascript make/V2Make.scpt "$(CWD)" "$(PGM)" "$(CWD)/make/DevApple.vii" "$(EXECCMD)" + osascript make/V2Make.scpt "$(TARGETDIR)" "$(PGM)" "$(CWD)/make/DevApple.vii" "$(EXECCMD)" -%.tok: %.bas +$(TARGETDIR)/%.tok: %.bas + $(MKDIR) `dirname $@` make/bt $< $(BASICFLAGS) -o $@ ifneq ($(DRIVERS),) @@ -150,7 +140,7 @@ cleandrivers: endif clean: genclean cleandrivers - rm -f "$(PGM)" $(OBJS) $(C_DEPS) $(MAPFILE) $(ASM_LSTS) "$(DISKIMAGE)" + rm -f "$(TARGETDIR)/$(PGM)" $(OBJS) $(BASIC_OBJS) $(C_DEPS) $(MAPFILE) $(ASM_LSTS) "$(DISKIMAGE)" cleanMacCruft: rm -rf pkg @@ -165,10 +155,10 @@ xcodefix: ifeq ($(BUILD_TYPE),basic) # Build rules for BASIC projects -$(PGM): $(OBJS) - cp $(PGM).tok $(PGM) +$(TARGETDIR)/$(PGM): $(BASIC_OBJS) + cp $(TARGETDIR)/$(PGM).tok $(TARGETDIR)/$(PGM) -$(OBJS): Makefile +$(BASIC_OBJS): Makefile endif @@ -177,9 +167,10 @@ endif ifeq ($(BUILD_TYPE),merlin) # Build rules for Merlin projects -$(PGM): $(ASM_SRCS) Makefile - $(MERLIN_BIN) -V $(MERLIN_LIB) linkscript.s - rm -f _FileInformation.txt +$(TARGETDIR)/$(PGM): $(ASM_SRCS) Makefile + $(MKDIR) $(TARGETDIR) + rm -f $(TARGETDIR)/$(PGM) + $(MERLIN_ASM) linkscript.s $(PGM) $(TARGETDIR)/$(PGM) endif @@ -187,17 +178,30 @@ endif ifeq ($(BUILD_TYPE),cc65) # Build rules for cc65 projects -$(PGM): $(OBJS) - make/errorFilter.sh $(CL65) $(MACHCONFIG) --mapfile $(MAPFILE) $(LDFLAGS) -o "$(PGM)" $(OBJS) +$(TARGETDIR)/$(PGM): $(OBJS) + $(MKDIR) `dirname $@` + make/errorFilter.sh $(CL65) $(MACHCONFIG) --mapfile $(MAPFILE) $(LDFLAGS) -o "$(TARGETDIR)/$(PGM)" $(OBJS) $(OBJS): Makefile -%.o: %.c +$(OBJDIR)/%.o: %.c + $(MKDIR) `dirname $@` make/errorFilter.sh $(CL65) $(MACHCONFIG) $(CFLAGS) $(CC65_CREATE_DEP_ARG) -c -o $@ $< sed -i .bak 's/\.s:/.o:/' $(@:.o=.u) rm -f $(@:.o=.u).bak -%.o: %.s +$(OBJDIR)/%.o: $(GENDIR)/%.c + $(MKDIR) `dirname $@` + make/errorFilter.sh $(CL65) $(MACHCONFIG) $(CFLAGS) $(CC65_CREATE_DEP_ARG) -c -o $@ $< + sed -i .bak 's/\.s:/.o:/' $(@:.o=.u) + rm -f $(@:.o=.u).bak + +$(OBJDIR)/%.o: %.s + $(MKDIR) `dirname $@` + make/errorFilter.sh $(CL65) $(MACHCONFIG) --cpu $(CPU) $(ASMFLAGS) $(CC65_LIST_ARG) -c -o $@ $< + +$(OBJDIR)/%.o: $(GENDIR)/%.s + $(MKDIR) `dirname $@` make/errorFilter.sh $(CL65) $(MACHCONFIG) --cpu $(CPU) $(ASMFLAGS) $(CC65_LIST_ARG) -c -o $@ $< diff --git a/pkg/Templates/Apple II/Apple II Basic Project.xctemplate/TemplateInfo.plist b/pkg/Templates/Apple II/Apple II Basic Project.xctemplate/TemplateInfo.plist index 5bcac7a..76f1065 100644 --- a/pkg/Templates/Apple II/Apple II Basic Project.xctemplate/TemplateInfo.plist +++ b/pkg/Templates/Apple II/Apple II Basic Project.xctemplate/TemplateInfo.plist @@ -179,7 +179,7 @@ GCC_PREPROCESSOR_DEFINITIONS __fastcall__="" HEADER_SEARCH_PATHS - /usr/local/lib/cc65/include /usr/local/share/cc65/include + $TEMP_ROOT/___PACKAGENAME___.build/$CONFIGURATION/___PACKAGENAME___.build/DerivedSources /usr/local/share/cc65/include BuildPhases diff --git a/pkg/Templates/Apple II/Apple II Basic Project.xctemplate/___PACKAGENAME___.xcscheme b/pkg/Templates/Apple II/Apple II Basic Project.xctemplate/___PACKAGENAME___.xcscheme index 61815a2..1debce6 100644 --- a/pkg/Templates/Apple II/Apple II Basic Project.xctemplate/___PACKAGENAME___.xcscheme +++ b/pkg/Templates/Apple II/Apple II Basic Project.xctemplate/___PACKAGENAME___.xcscheme @@ -64,6 +64,18 @@ argument = "$PROJECT_DIR/___PACKAGENAME___" isEnabled = "YES"> + + + + + + diff --git a/pkg/Templates/Apple II/Apple II Merlin Project.xctemplate/TemplateInfo.plist b/pkg/Templates/Apple II/Apple II Merlin Project.xctemplate/TemplateInfo.plist index 09b664a..89abc6d 100644 --- a/pkg/Templates/Apple II/Apple II Merlin Project.xctemplate/TemplateInfo.plist +++ b/pkg/Templates/Apple II/Apple II Merlin Project.xctemplate/TemplateInfo.plist @@ -15,6 +15,7 @@ make/dos33_template.dsk make/errorFilter.sh make/head.mk + make/merlin-asm make/prodos_template.dsk make/tail.mk make/V2Make.scpt @@ -46,6 +47,13 @@ Path make/errorFilter.sh + make/merlin-asm + + Group + make + Path + make/merlin-asm + make/tail.mk Group @@ -185,7 +193,7 @@ GCC_PREPROCESSOR_DEFINITIONS __fastcall__="" HEADER_SEARCH_PATHS - /usr/local/lib/cc65/include /usr/local/share/cc65/include + $TEMP_ROOT/___PACKAGENAME___.build/$CONFIGURATION/___PACKAGENAME___.build/DerivedSources /usr/local/share/cc65/include BuildPhases diff --git a/pkg/Templates/Apple II/Apple II Merlin Project.xctemplate/___PACKAGENAME___.xcscheme b/pkg/Templates/Apple II/Apple II Merlin Project.xctemplate/___PACKAGENAME___.xcscheme index 61815a2..1debce6 100644 --- a/pkg/Templates/Apple II/Apple II Merlin Project.xctemplate/___PACKAGENAME___.xcscheme +++ b/pkg/Templates/Apple II/Apple II Merlin Project.xctemplate/___PACKAGENAME___.xcscheme @@ -64,6 +64,18 @@ argument = "$PROJECT_DIR/___PACKAGENAME___" isEnabled = "YES"> + + + + + + diff --git a/pkg/Templates/Apple II/Apple II ca65 Project.xctemplate/TemplateInfo.plist b/pkg/Templates/Apple II/Apple II ca65 Project.xctemplate/TemplateInfo.plist index 8b7cb12..2a3c554 100644 --- a/pkg/Templates/Apple II/Apple II ca65 Project.xctemplate/TemplateInfo.plist +++ b/pkg/Templates/Apple II/Apple II ca65 Project.xctemplate/TemplateInfo.plist @@ -179,7 +179,7 @@ GCC_PREPROCESSOR_DEFINITIONS __fastcall__="" HEADER_SEARCH_PATHS - /usr/local/lib/cc65/include /usr/local/share/cc65/include + $TEMP_ROOT/___PACKAGENAME___.build/$CONFIGURATION/___PACKAGENAME___.build/DerivedSources /usr/local/share/cc65/include BuildPhases diff --git a/pkg/Templates/Apple II/Apple II ca65 Project.xctemplate/___PACKAGENAME___.xcscheme b/pkg/Templates/Apple II/Apple II ca65 Project.xctemplate/___PACKAGENAME___.xcscheme index 61815a2..1debce6 100644 --- a/pkg/Templates/Apple II/Apple II ca65 Project.xctemplate/___PACKAGENAME___.xcscheme +++ b/pkg/Templates/Apple II/Apple II ca65 Project.xctemplate/___PACKAGENAME___.xcscheme @@ -64,6 +64,18 @@ argument = "$PROJECT_DIR/___PACKAGENAME___" isEnabled = "YES"> + + + + + + diff --git a/pkg/Templates/Apple II/Apple II cc65 Project.xctemplate/TemplateInfo.plist b/pkg/Templates/Apple II/Apple II cc65 Project.xctemplate/TemplateInfo.plist index ef0379c..a67906a 100644 --- a/pkg/Templates/Apple II/Apple II cc65 Project.xctemplate/TemplateInfo.plist +++ b/pkg/Templates/Apple II/Apple II cc65 Project.xctemplate/TemplateInfo.plist @@ -179,7 +179,7 @@ GCC_PREPROCESSOR_DEFINITIONS __fastcall__="" HEADER_SEARCH_PATHS - /usr/local/lib/cc65/include /usr/local/share/cc65/include + $TEMP_ROOT/___PACKAGENAME___.build/$CONFIGURATION/___PACKAGENAME___.build/DerivedSources /usr/local/share/cc65/include BuildPhases diff --git a/pkg/Templates/Apple II/Apple II cc65 Project.xctemplate/___PACKAGENAME___.xcscheme b/pkg/Templates/Apple II/Apple II cc65 Project.xctemplate/___PACKAGENAME___.xcscheme index 61815a2..1debce6 100644 --- a/pkg/Templates/Apple II/Apple II cc65 Project.xctemplate/___PACKAGENAME___.xcscheme +++ b/pkg/Templates/Apple II/Apple II cc65 Project.xctemplate/___PACKAGENAME___.xcscheme @@ -64,6 +64,18 @@ argument = "$PROJECT_DIR/___PACKAGENAME___" isEnabled = "YES"> + + + + + +