Newer
Older
snipet / libsc / trunk / 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 = sc
MAJOR_VER   = 1
MINOR_VER   = 0

SRCDIR      = src
OBJDIR      = obj

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

DEPEND_FILE = depend.inc

INCLUDES    = -Iinclude
CFLAGS      = $(INCLUDES)
CFLAGS     += -Wall
SFLAGS      = -fPIC
LDFLAGS     =
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)

# ---------------------------------------------------------------------
#  test
# ---------------------------------------------------------------------
.PHONY: test
test:
	$(MAKE) -C tests

# ---------------------------------------------------------------------
#  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,lib$(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 $@ $<

# ---------------------------------------------------------------------
#  clean
# ---------------------------------------------------------------------
.PHONY: clean
clean:
	$(RM) -f lib$(TARGET_NAME).a
	$(RM) -f lib$(TARGET_NAME).so.*
	$(RM) -f $(TARGET_NAME).dll
	$(RM) -f $(TARGET_NAME).exe
	$(RM) -f $(OBJDIR)/*.o
	$(RM) -f $(DEPEND_FILE)
	$(RM) -f *~ */*~
	$(MAKE) clean -C tests

# ---------------------------------------------------------------------
#  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)