# $Id$
+DESTDIR=
+prefix=/home/keithp/sat
+libdir=$(prefix)/lib
+includedir=$(prefix)/include
+
+CC=arm-none-eabi-gcc
+
# This is where you chose which platform to compile for (see 'make links' / './platform')
-PLATFORM := example
+PLATFORM := altos
# This is a list of all non-source files that are part of the distribution.
AUXFILES := Makefile Readme.txt
PROJDIRS := functions includes internals
# All source files of the project
SRCFILES := $(shell find -L $(PROJDIRS) -type f -name "*.c")
+BUILDFILES := $(shell find -L build -type f -name "*.c")
# All header files of the project
HDRFILES := $(shell find -L $(PROJDIRS) -type f -name "*.h")
+BUILDHDRFILES := $(shell find -L build -type f -name "*.h")
# All .c files in functions/_PDCLIB that do not have a regression test driver
INTFILES := _Exit atomax digits open print scan remove rename seed stdinit strtox_main strtox_prelim filemode eol errno seek prepread prepwrite allocpages tmpfilename closeall
# All object files in the library
-OBJFILES := $(patsubst %.c,%.o,$(SRCFILES))
+OBJFILES := $(patsubst %.c,%.o,$(BUILDFILES))
# All test drivers (.t)
TSTFILES := $(patsubst %.c,%_t,$(SRCFILES))
# All regression test drivers (.r)
ALLFILES := $(SRCFILES) $(HDRFILES) $(AUXFILES)
WARNINGS := -Wall -Wextra -pedantic -Wno-unused-parameter -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wnested-externs -Winline -Wno-long-long -Wuninitialized -Wstrict-prototypes
-CFLAGS := -fno-builtin -g -std=c99 -I./internals -I./testing $(WARNINGS) $(USERFLAGS)
+PLATFORM_FLAGS=-nostdinc -mlittle-endian -mthumb -mcpu=cortex-m3 -ffreestanding -nostdlib
+CFLAGS := -fno-builtin -Os -g -std=c99 -I./build/internals -I./testing $(WARNINGS) $(USERFLAGS) $(PLATFORM_FLAGS)
.PHONY: all clean srcdist bindist test tests testdrivers regtests regtestdrivers todos fixmes find links unlink help
-all: pdclib.a testdrivers regtestdrivers
+all: pdclib.a
+
+check: all testdrivers regtestdrivers
@echo
@echo "========================"
@echo "Executing library tests:"
@ar rc pdclib.a $?
@echo
+install: install-lib install-hdr
+
+install-lib: pdclib.a
+ install -D -c pdclib.a $(DESTDIR)$(libdir)/pdclib.a
+
+install-hdr: $(BUILDHDRFILES)
+ for file in $(BUILDHDRFILES); do \
+ install -D -c $$file $(DESTDIR)$(includedir)/.; \
+ done
+
test: functions/$(FILE)
functions/$(FILE)
links:
@echo "Linking platform/$(PLATFORM)..."
- @for file in $$(find platform/$(PLATFORM) -mindepth 2 -type f ! -path *.svn* -printf "%P\n"); do ln -s $$(dirname $$file | sed "s@[^/]*@..@g")/platform/$(PLATFORM)/$$file $$file; done
+ @for dir in $$(find functions includes internals -type d); do mkdir -p build/$$dir; done
+ @for file in $$(find platform/$(PLATFORM) -mindepth 2 -type f ! -path *.svn* -printf "%P\n"); do if [ ! -f build/$$file ]; then ln -s $$(dirname $$file | sed "s@[^/]*@..@g")/../platform/$(PLATFORM)/$$file build/$$file; fi; done
+ @for super in $(PROJDIRS); do for file in $$(find $$super -type f ! -path *.svn* -printf "%P\n"); do if [ ! -f build/$$super/$$file ]; then ln -s $$(echo $$file | sed "s@[^/]*@..@g")/../$$super/$$file build/$$super/$$file; fi; done; done
unlink:
@echo "Unlinking platform files..."
- @for dir in $(PROJDIRS); do find $$dir -type l -exec rm {} +; done
+ @for dir in $(PROJDIRS); do find build/$$dir -type l -exec rm {} +; done
help:
@echo "Available make targets:"
@echo "(Usage: USERFLAGS=\"flags\" make [...])."
%.o: %.c Makefile
- @echo " CC $(patsubst functions/%,%,$@)"
- @$(CC) $(CFLAGS) -MMD -MP -I./includes -c $< -o $@
+ echo " CC $(patsubst functions/%,%,$@)"
+ $(CC) $(CFLAGS) -MMD -MP -I./build/includes -c $< -o $@
%_t: %.c Makefile pdclib.a
@echo " CC $(patsubst functions/%,%,$@)"
- @$(CC) $(CFLAGS) -MMD -MP -DTEST -I./includes $< pdclib.a -o $@
+ @$(CC) $(CFLAGS) -MMD -MP -DTEST -I./build/includes $< pdclib.a -o $@
%_r: %.c Makefile
@echo " CC $(patsubst functions/%,%,$@)"