
CC=gcc 

LDFLAGS=

OS=$(shell uname -s)

### standard version: 
CFLAGS_STD=$(CFLAGS) -Wall -O2 -DMAP_LOAD_GENOME
### methylome version:
CFLAGS_BS=$(CFLAGS) -Wall -O2 -fpic -DMETHYLOME -DMAP_LOAD_GENOME
### paralized version:
CFLAGS_MT=$(CFLAGS) -pthread -DTHREADS -D_REENTRANT -Wall -O2 -DMAP_LOAD_GENOME

ifeq ($(OS),Darwin)
CFLAGS_STD+=-arch x86_64
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/genomemapper.c src/genomemapper/hitseriell.c src/genomemapper/hitthread.c src/genomemapper/hit.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
GMINDEX_SOURCES=src/gmindex/alloc.c src/gmindex/index.c src/gmindex/init.c src/gmindex/load.c src/gmindex/gmindex.c src/gmindex/usage.c src/gmindex/write.c

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)

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


all: $(BINARIES)

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/%.o: src/%.c
	@mkdir -p $(@D)
	$(CC) $(CFLAGS_STD) -c -o $@ $<

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

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

clean:
	rm -rf obj $(BINARIES)


