This repository has been archived on 2026-07-19. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
acquire-core-full/Makefile

113 lines
4.7 KiB
Makefile

# ==========================================================================
# acquire-core-full / TxCore Makefile (생성기 산출물)
#
# .pgc --ecpg--> .c --gcc--> build/*.o --ar--> libtxcore.a --ld--> bin/*
#
# ~1000개 .c/.pgc 를 build/*.o 로 컴파일하는 것이 빌드 검증의 핵심.
# 와일드카드로 전체 소스를 수집하고, 대표 데모 바이너리 몇 개를 링크한다.
# ==========================================================================
CC := gcc
ECPG := ecpg
AR := ar
PG_INCDIR := $(shell pg_config --includedir 2>/dev/null)
INCLUDES := -Iframework/txcore/include \
-Iframework/txcore/dbio \
-Iapp/include \
-Iapp/shared/include \
-I$(PG_INCDIR)
# 고정길이 관용구 경고만 억제 (-Werror 없음)
CFLAGS := -g -O2 -Wall -Wextra -Wno-unused-parameter \
-Wno-stringop-truncation -Wno-format-truncation \
-Wno-unused-variable -Wno-unused-but-set-variable $(INCLUDES)
ECPGFLAGS := -Iframework/txcore/include -Iframework/txcore/dbio \
-Iapp/include -Iapp/shared/include
LDLIBS := -lecpg -lpq
BUILD := build
BIN := bin
# ---- 소스 수집 (와일드카드) ----------------------------------------------
ONLINE_PGC := $(wildcard app/online/*.pgc)
BATCH_PGC := $(wildcard app/batch/*.pgc)
DBIO_PGC := $(wildcard app/dbio/*.pgc)
COMMON_C := $(wildcard app/common/*.c)
SHARED_C := $(wildcard app/shared/common/*.c)
PGC_ALL := $(ONLINE_PGC) $(BATCH_PGC) $(DBIO_PGC)
GEN_C := $(PGC_ALL:.pgc=.c)
PGC_OBJ := $(patsubst %,$(BUILD)/%.o,$(basename $(notdir $(PGC_ALL))))
COMMON_OBJ := $(patsubst %,$(BUILD)/%.o,$(basename $(notdir $(COMMON_C))))
SHARED_OBJ := $(patsubst %,$(BUILD)/%.o,$(basename $(notdir $(SHARED_C))))
ALL_OBJ := $(PGC_OBJ) $(COMMON_OBJ) $(SHARED_OBJ)
LIBTXCORE := $(BUILD)/libtxcore.a
DEMO_BINS := $(BIN)/demo_mg_server $(BIN)/demo_ac_server $(BIN)/demo_rc_server $(BIN)/demo_st_server $(BIN)/demo_rc_batch $(BIN)/demo_cl_batch
.SECONDARY:
.PHONY: all clean dirs gen objs demos
all: dirs $(LIBTXCORE) objs demos
@echo "==> 빌드 완료"
@echo "오브젝트: $(words $(ALL_OBJ))"
dirs:
@mkdir -p $(BUILD) $(BIN)
gen: $(GEN_C)
objs: $(ALL_OBJ)
demos: $(DEMO_BINS)
# ---- ecpg: .pgc -> .c (디렉토리별) ---------------------------------------
app/online/%.c: app/online/%.pgc
$(ECPG) $(ECPGFLAGS) -o $@ $<
app/batch/%.c: app/batch/%.pgc
$(ECPG) $(ECPGFLAGS) -o $@ $<
app/dbio/%.c: app/dbio/%.pgc
$(ECPG) $(ECPGFLAGS) -o $@ $<
# ---- 컴파일: build/<basename>.o (gen 선행 보장) --------------------------
$(BUILD)/%.o: app/online/%.c | gen
$(CC) $(CFLAGS) -c $< -o $@
$(BUILD)/%.o: app/batch/%.c | gen
$(CC) $(CFLAGS) -c $< -o $@
$(BUILD)/%.o: app/dbio/%.c | gen
$(CC) $(CFLAGS) -c $< -o $@
$(BUILD)/%.o: app/common/%.c
$(CC) $(CFLAGS) -c $< -o $@
$(BUILD)/%.o: app/shared/common/%.c
$(CC) $(CFLAGS) -c $< -o $@
# ---- TxCore 정적 라이브러리 ----------------------------------------------
$(BUILD)/txcore.o: framework/txcore/src/txcore.c
$(CC) $(CFLAGS) -c $< -o $@
$(LIBTXCORE): $(BUILD)/txcore.o
$(AR) rcs $@ $^
# ---- 대표 데모 바이너리 (링크 검증) --------------------------------------
$(BIN)/demo_mg_server: $(BUILD)/demo_mg_main.o $(BUILD)/mg_ol_0001.o $(BUILD)/mg_dbio_main.o $(SHARED_OBJ) $(LIBTXCORE)
$(CC) $(CFLAGS) -o $@ $(BUILD)/demo_mg_main.o $(BUILD)/mg_ol_0001.o $(BUILD)/mg_dbio_main.o $(SHARED_OBJ) -L$(BUILD) -ltxcore $(LDLIBS)
$(BIN)/demo_ac_server: $(BUILD)/demo_ac_main.o $(BUILD)/ac_ol_0001.o $(BUILD)/ac_dbio_main.o $(SHARED_OBJ) $(LIBTXCORE)
$(CC) $(CFLAGS) -o $@ $(BUILD)/demo_ac_main.o $(BUILD)/ac_ol_0001.o $(BUILD)/ac_dbio_main.o $(SHARED_OBJ) -L$(BUILD) -ltxcore $(LDLIBS)
$(BIN)/demo_rc_server: $(BUILD)/demo_rc_main.o $(BUILD)/rc_ol_0001.o $(BUILD)/rc_dbio_main.o $(SHARED_OBJ) $(LIBTXCORE)
$(CC) $(CFLAGS) -o $@ $(BUILD)/demo_rc_main.o $(BUILD)/rc_ol_0001.o $(BUILD)/rc_dbio_main.o $(SHARED_OBJ) -L$(BUILD) -ltxcore $(LDLIBS)
$(BIN)/demo_st_server: $(BUILD)/demo_st_main.o $(BUILD)/st_ol_0001.o $(BUILD)/st_dbio_main.o $(SHARED_OBJ) $(LIBTXCORE)
$(CC) $(CFLAGS) -o $@ $(BUILD)/demo_st_main.o $(BUILD)/st_ol_0001.o $(BUILD)/st_dbio_main.o $(SHARED_OBJ) -L$(BUILD) -ltxcore $(LDLIBS)
$(BIN)/demo_rc_batch: $(BUILD)/rc_bt_0001.o $(BUILD)/rc_dbio_main.o $(SHARED_OBJ) $(LIBTXCORE)
$(CC) $(CFLAGS) -o $@ $(BUILD)/rc_bt_0001.o $(BUILD)/rc_dbio_main.o $(SHARED_OBJ) -L$(BUILD) -ltxcore $(LDLIBS)
$(BIN)/demo_cl_batch: $(BUILD)/cl_bt_0001.o $(BUILD)/cl_dbio_main.o $(SHARED_OBJ) $(LIBTXCORE)
$(CC) $(CFLAGS) -o $@ $(BUILD)/cl_bt_0001.o $(BUILD)/cl_dbio_main.o $(SHARED_OBJ) -L$(BUILD) -ltxcore $(LDLIBS)
# ==========================================================================
clean:
rm -rf $(BUILD) $(BIN)
rm -f $(GEN_C)