Newer
Older
snipet / libsc / trunk / tests / Makefile
# vim: ts=4 sw=4 sts=4 fenc=utf-8 ff=unix :
# =====================================================================
#  Makefile  for  libsc
# =====================================================================

# ---------------------------------------------------------------------
#  SETTING & OPTION
# ---------------------------------------------------------------------
#TARGET_TYPE = static-library
#TARGET_TYPE = shared-library
#TARGET_TYPE = windows-dll
TARGET_TYPE = exec

TARGET_NAME = unittest
MAJOR_VER   = 1
MINOR_VER   = 0

SRCDIR      = ../src
TESTDIR     = src
OBJDIR      = obj

SRCS        = $(wildcard $(SRCDIR)/*.c)
TESTS       = $(wildcard $(TESTDIR)/*.c) $(TESTDIR)/unittest_main.c
OBJS        = $(SRCS:$(SRCDIR)/%.c=$(OBJDIR)/%.o) $(TESTS:$(TESTDIR)/%.c=$(OBJDIR)/%.o)

DEPEND_FILE = depend.inc

INCLUDES    = -I../include -Iinclude
CFLAGS      = $(INCLUDES)
CFLAGS     += -Wall
CFLAGS     += -DSC_DEBUG
CFLAGS     += -g -fprofile-arcs -ftest-coverage
SFLAGS      = -fPIC
LDFLAGS     = -g -fprofile-arcs -ftest-coverage
LIBS        = `../sc-config --libs-depends`


# ---------------------------------------------------------------------
#  TARGET_TYPE 毎の設定
# ---------------------------------------------------------------------
ifeq ($(TARGET_TYPE), static-library)
TARGET      = lib$(TARGET_NAME).a

else ifeq ($(TARGET_TYPE), shared-library)
TARGET      = lib$(TARGET_NAME).so.$(MAJOR_VER).$(MINOR_VER)
CFLAGS     += $(SFLAGS)

else ifeq ($(TARGET_TYPE), windows-dll)
TARGET      = $(TARGET_NAME).dll
CFLAGS     += -mrtd

else ifeq ($(TARGET_TYPE), exec)
TARGET      = $(TARGET_NAME).exe

endif


# ---------------------------------------------------------------------
#  SUFFIXES
# ---------------------------------------------------------------------
.SUFFIXES: .o .c


# ---------------------------------------------------------------------
#  COMMANDS
# ---------------------------------------------------------------------
AS     = as
AR     = ar
CC     = gcc
CP     = cp
MV     = mv
MAKE   = make
MKDIR  = mkdir
RANLIB = ranlib
RM     = rm
STRIP  = strip


# ---------------------------------------------------------------------
#  TARGET
# ---------------------------------------------------------------------
all: depend $(TARGET)


# ---------------------------------------------------------------------
#  static library
# ---------------------------------------------------------------------
lib$(TARGET_NAME).a: $(OBJS)
	$(AR) rv $(TARGET) $^
	$(RANLIB) $(TARGET)

# ---------------------------------------------------------------------
#  shared library
# ---------------------------------------------------------------------
lib$(TARGET_NAME).so.$(MAJOR_VER).$(MINOR_VER): $(OBJS)
	$(CC) $(LDFLAGS) -shared -Wl,soname,$(TARGET_NAME).so.$(MAJOR_VER) -o $(TARGET) $^ $(LIBS)

# ---------------------------------------------------------------------
#  windows dll
# ---------------------------------------------------------------------
$(TARGET_NAME).dll: $(OBJS)
	$(CC) $(LDFLAGS) -shared -o $(TARGET) $^ $(LIBS)

# ---------------------------------------------------------------------
# exec
# ---------------------------------------------------------------------
$(TARGET_NAME).exe: $(OBJS)
	$(CC) $(LDFLAGS) -o $(TARGET) $^ $(LIBS)

# ---------------------------------------------------------------------
#  .c -> .o
# ---------------------------------------------------------------------
$(OBJDIR)/%.o: $(SRCDIR)/%.c
	$(CC) $(CFLAGS) -c -o $@ $<

$(OBJDIR)/%.o: $(TESTDIR)/%.c
	$(CC) $(CFLAGS) -c -o $@ $<

# ---------------------------------------------------------------------
#  create unittest_main.c
# ---------------------------------------------------------------------
$(TESTDIR)/unittest_main.c:
	lib/create_unittest_main.sh

# ---------------------------------------------------------------------
#  clean
# ---------------------------------------------------------------------
.PHONY: clean
clean:
	$(RM) -f $(TARGET_NAME).a
	$(RM) -f $(TARGET_NAME).so.*
	$(RM) -f $(TARGET_NAME).dll
	$(RM) -f $(TARGET_NAME).exe
	$(RM) -f $(OBJDIR)/*.o
	$(RM) -f $(OBJDIR)/*.gcda $(OBJDIR)/*.gcno
	$(RM) -f $(DEPEND_FILE)
	$(RM) -f *~ */*~
	$(RM) -f $(TESTDIR)/unittest_main.c
	$(RM) -f $(TESTDIR)/unittest_main.h
	$(RM) -f unittest.tmp

# ---------------------------------------------------------------------
#  depends
# ---------------------------------------------------------------------
.PHONY: depend
depend: $(SRCS)
	-@ $(RM) -f $(DEPEND_FILE)
	-@ for i in $^; do \
		echo -n "$(OBJDIR)/" >> $(DEPEND_FILE); \
		cpp -MM $(CFLAGS) $$i | sed "s/\ [_a-zA-Z0-9\/]*\.c//g" >> $(DEPEND_FILE); \
		echo "" >> $(DEPEND_FILE); \
		done

# ---------------------------------------------------------------------
#  include
# ---------------------------------------------------------------------
-include $(DEPEND_FILE)