
CC=gcc 

LDFLAGS=

OS=$(shell uname -s)

CFLAGS_ALL=$(CFLAGS) -Wall -O2 -DMAP_LOAD_GENOME
#CFLAGS_ALL=$(CFLAGS) -Wall -O0 -DMAP_LOAD_GENOME -g

### standard version: 
CFLAGS_STD=$(CFLAGS_ALL)
### methylome version:
CFLAGS_BS=$(CFLAGS_ALL) -fpic -DMETHYLOME
### paralized version:
CFLAGS_MT=$(CFLAGS_ALL) -pthread -DTHREADS -D_REENTRANT

ifeq ($(OS),Darwin)
CFLAGS_STD+=-arch x86_64 -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5
CFLAGS_BS+=-arch x86_64
CFLAGS_MT+=-arch x86_64
endif

################################################################################

GENOMEMAPPER_SOURCES= \
    src/genomemapper/alignseriell.c \
    src/genomemapper/alignthread.c \
    src/genomemapper/alloc.c \
    src/genomemapper/astr.c \
    src/genomemapper/genomemapper.c \
    src/genomemapper/hit.c \
    src/genomemapper/hitcuda.c \
    src/genomemapper/hitseriell.c \
    src/genomemapper/hitthread.c \
    src/genomemapper/index.c \
    src/genomemapper/init.c \
    src/genomemapper/load.c \
    src/genomemapper/print.c \
    src/genomemapper/read.c \
    src/genomemapper/usage.c

GENOMEMAPPER_HEADERS= \
    src/genomemapper/astr.h \
    src/genomemapper/genomemappercu.h \
    src/genomemapper/genomemapper.h

GMINDEX_SOURCES= \
    src/gmindex/alloc.c \
    src/gmindex/gmindex.c \
    src/gmindex/index.c \
    src/gmindex/init.c \
    src/gmindex/load.c \
    src/gmindex/usage.c \
    src/gmindex/write.c

GMINDEX_HEADERS=src/gmindex/gmindex.h

DIST_FILES:= \
    Makefile \
    doc/genomemapper_manual.tex \
    doc/genomemapper_manual.pdf \
    $(GENOMEMAPPER_SOURCES) \
    $(GENOMEMAPPER_HEADERS) \
    $(GMINDEX_SOURCES) \
    $(GMINDEX_HEADERS)


################################################################################

GENOMEMAPPER_OBJ_STD:=$(GENOMEMAPPER_SOURCES:src/%.c=obj/std/%.o)
GENOMEMAPPER_OBJ_BS:=$(GENOMEMAPPER_SOURCES:src/%.c=obj/bs/%.o)
GENOMEMAPPER_OBJ_MT:=$(GENOMEMAPPER_SOURCES:src/%.c=obj/mt/%.o)
GMINDEX_OBJ_STD:=$(GMINDEX_SOURCES:src/%.c=obj/std/%.o)
GMINDEX_OBJ_BS:=$(GMINDEX_SOURCES:src/%.c=obj/bs/%.o)
GMINDEX_OBJ_MT:=$(GMINDEX_SOURCES:src/%.c=obj/mt/%.o)

VERSION=$(shell awk '($$1=="\#define")&&($$2=="VERSION"){gsub(/"/,"",$$3); print $$3;exit}' src/genomemapper/genomemapper.h)

BINARIES=genomemapper gmindex genomemapper-bs gmindex-bs genomemapper-mt gmindex-mt

DIST_DIR=genomemapper-$(VERSION)
DIST_ARCHIVE=$(DIST_DIR).tar.gz


all: genomemapper gmindex

genomemapper: $(GENOMEMAPPER_OBJ_STD)
	$(CC) $(CFLAGS_STD) -o $@ $^ $(LDFLAGS)

gmindex: $(GMINDEX_OBJ_STD)
	$(CC) $(CFLAGS_STD) -o $@ $^ $(LDFLAGS)

genomemapper-bs: $(GENOMEMAPPER_OBJ_BS)
	$(CC) $(CFLAGS_BS) -o $@ $^ $(LDFLAGS)

gmindex-bs: $(GMINDEX_OBJ_BS)
	$(CC) $(CFLAGS_BS) -o $@ $^ $(LDFLAGS)

genomemapper-mt: $(GENOMEMAPPER_OBJ_MT)
	$(CC) $(CFLAGS_MT) -o $@ $^ $(LDFLAGS)

gmindex-mt: $(GMINDEX_OBJ_MT)
	$(CC) $(CFLAGS_MT) -o $@ $^ $(LDFLAGS)

obj/std/genomemapper/%.o: src/genomemapper/%.c $(GENOMEMAPPER_HEADERS)
	@mkdir -p $(@D)
	$(CC) $(CFLAGS_STD) -c -o $@ $<

obj/bs/genomemapper/%.o: src/genomemapper/%.c $(GENOMEMAPPER_HEADERS)
	@mkdir -p $(@D)
	$(CC) $(CFLAGS_BS) -c -o $@ $<

obj/mt/genomemapper/%.o: src/genomemapper/%.c $(GENOMEMAPPER_HEADERS)
	@mkdir -p $(@D)
	$(CC) $(CFLAGS_MT) -c -o $@ $<

obj/std/gmindex/%.o: src/gmindex/%.c $(GMINDEX_HEADERS)
	@mkdir -p $(@D)
	$(CC) $(CFLAGS_STD) -c -o $@ $<

obj/bs/gmindex/%.o: src/gmindex/%.c $(GMINDEX_HEADERS)
	@mkdir -p $(@D)
	$(CC) $(CFLAGS_BS) -c -o $@ $<

obj/mt/gmindex/%.o: src/gmindex/%.c $(GMINDEX_HEADERS)
	@mkdir -p $(@D)
	$(CC) $(CFLAGS_MT) -c -o $@ $<

clean:
	rm -rf obj
	rm -rf $(BINARIES)
	rm -rf $(DIST_ARCHIVE)

dist:
	rm -rf $(DIST_DIR)
	mkdir $(DIST_DIR)
	cp --parents $(DIST_FILES) $(DIST_DIR)
	tar -czf $(DIST_ARCHIVE) $(DIST_DIR)
	rm -rf $(DIST_DIR)

