Skip to content

Commit 8a8dbaa

Browse files
authored
Add files via upload
1 parent 6692c63 commit 8a8dbaa

1 file changed

Lines changed: 173 additions & 0 deletions

File tree

Makefile

Lines changed: 173 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
1+
# =============================================================================
2+
# Kcode v31.0.0 — Makefile (공개용 / Public Build)
3+
#
4+
# 빌드 타겟:
5+
# make — 전체 빌드 (gen + kvm + llvm-check)
6+
# make gen — C 코드 생성기 빌드 (kcode_gen)
7+
# make kvm — 바이트코드 VM 빌드 (kbc)
8+
# make test — 렉서 단위 테스트
9+
# make all — gen + kvm + test
10+
# make llvm-check — LLVM 설치 여부 확인
11+
# make LLVM=1 — LLVM 백엔드 포함 빌드 (kcode_llvm)
12+
# make clean — 빌드 결과물 삭제
13+
#
14+
# 참고: 인터프리터(kinterp)는 온톨로지 엔진 연동이 필요하여
15+
# 전체 엔진 빌드에서 제외됩니다.
16+
# 바이트코드 VM(kbc)으로 .han 파일을 실행하세요.
17+
#
18+
# MIT License / zerojat7-ui
19+
# =============================================================================
20+
21+
CC = gcc
22+
CFLAGS = -Wall -std=c11 -g -Wno-format-truncation
23+
LDFLAGS = -lm
24+
25+
# =============================================================================
26+
# 레이어 0 — 코어 (렉서 + 파서)
27+
# =============================================================================
28+
LAYER0_SRC = klexer.c kparser.c
29+
30+
# =============================================================================
31+
# 레이어 1 — 기본 런타임 (GC + 텐서 + 자동미분 + MCP)
32+
# =============================================================================
33+
LAYER1_SRC = kgc.c kc_tensor.c kc_autograd.c kc_mcp.c
34+
35+
# =============================================================================
36+
# C 코드 생성기 타겟
37+
# =============================================================================
38+
GEN_SRC = $(LAYER0_SRC) \
39+
kcodegen.c kcodegen_core.c kcodegen_expr.c \
40+
kcodegen_stmt.c kcodegen_func.c kcodegen_main.c
41+
GEN_BIN = kcode_gen
42+
43+
# =============================================================================
44+
# KVM 바이트코드 VM 타겟
45+
# =============================================================================
46+
KVM_SRC = $(LAYER0_SRC) kc_bytecode.c kc_bcgen.c kgc.c kc_vm.c kbc_main.c
47+
KVM_BIN = kbc
48+
49+
# =============================================================================
50+
# 렉서 단위 테스트
51+
# =============================================================================
52+
TEST_SRC = klexer.c ktest_lexer.c
53+
TEST_BIN = ktest_lexer
54+
55+
# =============================================================================
56+
# LLVM 옵션 (make LLVM=1)
57+
# =============================================================================
58+
LLVM ?= 0
59+
60+
ifeq ($(LLVM), 1)
61+
LLVM_CONFIG := $(shell command -v llvm-config 2>/dev/null)
62+
ifeq ($(LLVM_CONFIG),)
63+
$(warning [경고] llvm-config 를 찾을 수 없습니다. LLVM 없이 빌드합니다.)
64+
LLVM := 0
65+
else
66+
LLVM_CFLAGS := $(shell llvm-config --cflags)
67+
LLVM_LDFLAGS := $(shell llvm-config --ldflags --libs core analysis native bitwriter)
68+
CFLAGS += $(LLVM_CFLAGS) -DKCODE_LLVM=1
69+
LDFLAGS += $(LLVM_LDFLAGS)
70+
$(info [정보] LLVM 연동 활성화: $(shell llvm-config --version))
71+
endif
72+
endif
73+
74+
LLVM_GEN_SRC = $(LAYER0_SRC) \
75+
kcodegen.c kcodegen_core.c kcodegen_expr.c \
76+
kcodegen_stmt.c kcodegen_func.c \
77+
kcodegen_llvm.c kcodegen_llvm_expr.c \
78+
kcodegen_llvm_stmt.c kcodegen_llvm_builtin.c \
79+
kcodegen_llvm_util.c kcodegen_llvm_main.c
80+
LLVM_BIN = kcode_llvm
81+
82+
# =============================================================================
83+
# 기본 타겟
84+
# =============================================================================
85+
.PHONY: all gen kvm test llvm-check clean help
86+
87+
all: gen kvm test
88+
@echo ""
89+
@echo "========================================="
90+
@echo " Kcode v31.0.0 빌드 완료"
91+
@echo " C 생성기 : ./$(GEN_BIN)"
92+
@echo " 바이트코드VM: ./$(KVM_BIN)"
93+
@echo "========================================="
94+
@echo " .han 파일 실행:"
95+
@echo " ./kbc exec 소스.han"
96+
@echo "========================================="
97+
98+
# --- C 코드 생성기 ------------------------------------------------------------
99+
gen: $(GEN_BIN)
100+
101+
$(GEN_BIN): $(GEN_SRC) klexer.h kparser.h kcodegen.h
102+
$(CC) $(CFLAGS) -o $@ $(GEN_SRC) $(LDFLAGS)
103+
@echo "[빌드 완료] C 코드 생성기 → $@"
104+
105+
# --- KVM 바이트코드 VM --------------------------------------------------------
106+
kvm: $(KVM_BIN)
107+
108+
$(KVM_BIN): $(KVM_SRC) klexer.h kparser.h kc_bytecode.h kc_bcgen.h kc_vm.h
109+
$(CC) $(CFLAGS) -o $@ $(KVM_SRC) $(LDFLAGS)
110+
@echo "[빌드 완료] 바이트코드 VM → $@"
111+
112+
# --- LLVM 생성기 (make LLVM=1) ------------------------------------------------
113+
ifeq ($(LLVM), 1)
114+
llvm: $(LLVM_BIN)
115+
116+
$(LLVM_BIN): $(LLVM_GEN_SRC) klexer.h kparser.h kcodegen.h kcodegen_llvm.h
117+
$(CC) $(CFLAGS) -o $@ $(LLVM_GEN_SRC) $(LDFLAGS)
118+
@echo "[빌드 완료] LLVM 생성기 → $@"
119+
endif
120+
121+
# --- 렉서 단위 테스트 ---------------------------------------------------------
122+
test: $(TEST_BIN)
123+
@echo ""
124+
@echo "=== Kcode 렉서 단위 테스트 ==="
125+
-./$(TEST_BIN)
126+
127+
$(TEST_BIN): $(TEST_SRC) klexer.h
128+
@sed 's|#include "../src/klexer.h"|#include "klexer.h"|g' ktest_lexer.c > _ktest_patched.c
129+
$(CC) $(CFLAGS) -o $@ klexer.c _ktest_patched.c $(LDFLAGS)
130+
@rm -f _ktest_patched.c
131+
@echo "[빌드 완료] 렉서 테스트 → $@"
132+
133+
# =============================================================================
134+
# LLVM 설치 확인
135+
# =============================================================================
136+
llvm-check:
137+
@echo "--- LLVM 환경 확인 ---"
138+
@if command -v llvm-config >/dev/null 2>&1; then \
139+
echo "[OK] llvm-config: $$(llvm-config --version)"; \
140+
echo " → make LLVM=1 으로 빌드"; \
141+
else \
142+
echo "[없음] llvm-config 를 찾을 수 없습니다."; \
143+
echo " Ubuntu/Debian : sudo apt install llvm-dev"; \
144+
echo " macOS (brew) : brew install llvm"; \
145+
fi
146+
147+
# =============================================================================
148+
# 정리
149+
# =============================================================================
150+
clean:
151+
rm -f $(GEN_BIN) $(KVM_BIN) $(LLVM_BIN) $(TEST_BIN) \
152+
*.kbc _ktest_patched.c
153+
@echo "[정리 완료]"
154+
155+
# =============================================================================
156+
# 도움말
157+
# =============================================================================
158+
help:
159+
@echo "Kcode v31.0.0 빌드 도움말"
160+
@echo ""
161+
@echo " make 전체 빌드 (gen + kvm + test)"
162+
@echo " make gen C 코드 생성기 (kcode_gen)"
163+
@echo " make kvm 바이트코드 VM (kbc)"
164+
@echo " make test 렉서 단위 테스트"
165+
@echo " make LLVM=1 LLVM 백엔드 포함 빌드"
166+
@echo " make llvm-check LLVM 설치 확인"
167+
@echo " make clean 빌드 결과물 삭제"
168+
@echo ""
169+
@echo " .han 파일 실행:"
170+
@echo " ./kbc exec 소스.han 컴파일 + 즉시 실행"
171+
@echo " ./kbc compile 소스.han → 소스.kbc 생성"
172+
@echo " ./kbc run 소스.kbc 바이트코드 실행"
173+
@echo " ./kbc dump 소스.kbc 디스어셈블"

0 commit comments

Comments
 (0)