# ---------- Пользовательские настройки ---------------------------------------

# Эти переменные следует переопределить снаружи
LCC = lcc
BUILD_DIR = .
INSTALL_DIR_LIB = _lib
INSTALL = cp -R

# См. mcstbug #58675
# Через Makefile зададим возможность отключать fcntl (F_SETLKW)
SKIP_F_SETLKW = 0

# ---------- Общие внутренние настройки ---------------------------------------

# Путь до текущего каталога. В том числе используется при сборке
SRC_DIR := $(shell dirname $(MAKEFILE_LIST))

include $(SRC_DIR)/Makefile.common

# ---------- Внутренние настройки ---------------------------------------------

# Список требуемых файлов
OFILES := _gcov.o _gcov_merge_add.o _gcov_merge_single.o

# Добавляем каталог сборки ко всем объектным файлам
OFILES := $(addprefix $(BUILD_DIR)/, $(OFILES))

# Имя результирующей библиотеки
LIBGCOV_NAME := libgcov.a
LIBGCOV := $(BUILD_DIR)/$(LIBGCOV_NAME)

# Эти флаги взяты на основании сборки libgcov от gcc-4.7.3 на x86_64
# В них присутствовала опция -fPIC, но отсюда я её убрал, т.к. опция
# есть в CFLAGS_STATIC_ONLY. При таком раскладе будет меньше проблем
# для решений из mcstbug #91030
CFLAGS_LIBGCOV := -DIN_GCC -DIN_LIBGCC2 -DENABLE_DECIMAL_BID_FORMAT \
	          -DHAVE_CC_TLS -DUSE_TLS -D__GCC_FLOAT_NOT_NEEDED \
		  -fbuilding-libgcc -fno-stack-protector \
		  -I$(SRC_DIR)/config -I$(SRC_DIR)/gcc-4.7.3/gcc -I$(SRC_DIR)/gcc-4.7.3/include
ifeq ($(SKIP_F_SETLKW), 1)
  CFLAGS_LIBGCOV += -DSKIP_F_SETLKW
endif

# Флаги предупреждений
# Данные флаги взяты на основании сборки libgcov от gcc-4.7.3 на x86_64
WFLAGS_LIBGCOV=-W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition

# Обходим особенности кода libgcov.c, на которые gcc-4.7.3 не ругается, а мы ругаемся
WFLAGS_LCC=-Wno-undef -Wno-unused-function-all -Wno-ignored-pragmas -Wno-maybe-uninitialized-extra -Wno-conversion -Wno-declaration-after-statement

# Полные флаги компиляции
CFLAGS := $(CFLAGS_COMMON) $(CFLAGS_STATIC_ONLY) $(CFLAGS_LIBGCOV) $(WFLAGS_LIBGCOV) $(WFLAGS_LCC)

# ---------- Цели -------------------------------------------------------------

.PHONY: all install

all: $(BUILD_DIR) $(LIBGCOV)

$(BUILD_DIR):
	mkdir -p $(BUILD_DIR)

$(LIBGCOV): $(OFILES)
	$(AR) $(ARFLAGS) $@ $^

$(OFILES): $(SRC_DIR)/gcc-4.7.3/gcc/libgcov.c
	$(LCC) -DL$(*F) -c $(CFLAGS) $< -o $@

install:
	mkdir -p $(INSTALL_DIR_LIB) && \
        $(INSTALL) $(LIBGCOV) $(INSTALL_DIR_LIB)
