#******************************************************************************#
#* src/libraries/libc/Makefile                                                *#
#*                                                                 2017/03/09 *#
#* Copyright (C) 2016-2017 Mochi.                                             *#
#******************************************************************************#
#******************************************************************************#
#* マクロ設定                                                                 *#
#******************************************************************************#
# ベースディレクトリsrc/からの相対パス
CUR_DIR   = libraries/libc

# バイナリ名
LIB_NAME  = libc.a

# ソースコード
SRCS = string/memcpy.c \
       string/memset.c

# Cフラグ
CFLAGS = -O               \
         -Wall            \
         -masm=intel      \
         -m32             \
         -ffreestanding   \
         -I../../include/


#******************************************************************************#
#* 自動設定マクロ                                                             *#
#******************************************************************************#
# ベースディレクトリパス
BASE_DIR  = $(shell pwd | sed -e 's/\/src\/$(subst /,\/,$(CUR_DIR))//')
# 中間ファイル格納先ディレクトリパス
OBJS_DIR  = $(BASE_DIR)/build/objs/$(CUR_DIR)
# ディレクトリリスト
DIR_LIST  = $(sort $(addprefix $(OBJS_DIR)/, $(dir $(SRCS))))

# オブジェクトファイル
OBJS      = $(addprefix $(OBJS_DIR)/, $(SRCS:.c=.o))


#******************************************************************************#
#* phonyターゲット                                                            *#
#******************************************************************************#
# サブディレクトリも含めたコンパイル
.PHONY: all
all: $(DIR_LIST) $(OBJS_DIR)/$(LIB_NAME) Makefile

# 全生成ファイルの削除
.PHONY: clean
clean:
	-rm -rf $(OBJS_DIR)/../$(LIB_NAME) $(OBJS_DIR)


#******************************************************************************#
#* 生成規則                                                                   *#
#******************************************************************************#
ifdef DIR_LIST
$(DIR_LIST):
	mkdir -p $@
endif

# バイナリ
$(OBJS_DIR)/$(LIB_NAME): $(OBJS) Makefile
	$(AR) rcs $@ $(OBJS)
	ln -f -s $@ $(OBJS_DIR)/../$(LIB_NAME)

# アセンブラファイルコンパイル
$(OBJS_DIR)/%.o: %.s Makefile
	$(AS) -o $@ $<

# Cファイルコンパイル
$(OBJS_DIR)/%.o: %.c Makefile
	$(CC) $(CFLAGS) -o $@ -c $<


#******************************************************************************#
