-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile.linux
More file actions
98 lines (76 loc) · 2.48 KB
/
Makefile.linux
File metadata and controls
98 lines (76 loc) · 2.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# Hyper Programming Language Build System
# Supports Windows, Linux, and macOS
CC = gcc
CFLAGS = -std=c99 -Wall -Wextra -O2 -Iinclude
LDFLAGS =
# Platform detection
ifeq ($(OS),Windows_NT)
PLATFORM = windows
EXE_EXT = .exe
RM = del /Q
MKDIR = mkdir
else
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Linux)
PLATFORM = linux
endif
ifeq ($(UNAME_S),Darwin)
PLATFORM = macos
endif
EXE_EXT =
RM = rm -f
MKDIR = mkdir -p
endif
# Directories
SRC_DIR = src
INC_DIR = include
BUILD_DIR = build_linux
BIN_DIR = bin
OBJ_DIR = $(BUILD_DIR)/obj
# Common sources
COMMON_SRCS = $(SRC_DIR)/common/hyp_common.c
COMMON_OBJS = $(COMMON_SRCS:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o)
# Compiler sources
COMPILER_SRCS = $(SRC_DIR)/hypc/main.c $(SRC_DIR)/lexer/lexer.c $(SRC_DIR)/parser/parser.c $(SRC_DIR)/transpiler/transpiler.c
COMPILER_OBJS = $(COMPILER_SRCS:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o)
# Runtime sources
RUNTIME_SRCS = $(SRC_DIR)/hyprun/main.c $(SRC_DIR)/runtime/hyp_runtime.c
RUNTIME_OBJS = $(RUNTIME_SRCS:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o)
# Package manager sources
HPM_SRCS = $(SRC_DIR)/hpm/main.c $(SRC_DIR)/hpm/hpm.c
HPM_OBJS = $(HPM_SRCS:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o)
# Package executor sources
HPX_SRCS = $(SRC_DIR)/hpx/main.c $(SRC_DIR)/hpx/hpx.c
HPX_OBJS = $(HPX_SRCS:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o)
# Targets
TARGETS = $(BIN_DIR)/hypc$(EXE_EXT) $(BIN_DIR)/hyprun$(EXE_EXT) $(BIN_DIR)/hpm$(EXE_EXT) $(BIN_DIR)/hpx$(EXE_EXT)
.PHONY: all clean dirs
all: dirs $(TARGETS)
dirs:
$(MKDIR) $(BUILD_DIR) $(BIN_DIR) $(OBJ_DIR) $(OBJ_DIR)/common $(OBJ_DIR)/hypc $(OBJ_DIR)/hyprun $(OBJ_DIR)/lexer $(OBJ_DIR)/parser $(OBJ_DIR)/transpiler $(OBJ_DIR)/runtime $(OBJ_DIR)/hpm $(OBJ_DIR)/hpx
# Compiler
$(BIN_DIR)/hypc$(EXE_EXT): $(COMPILER_OBJS) $(COMMON_OBJS)
$(CC) $(COMPILER_OBJS) $(COMMON_OBJS) -o $@ $(LDFLAGS)
# Runtime
$(BIN_DIR)/hyprun$(EXE_EXT): $(RUNTIME_OBJS) $(COMMON_OBJS)
$(CC) $(RUNTIME_OBJS) $(COMMON_OBJS) -o $@ $(LDFLAGS)
# Package Manager
$(BIN_DIR)/hpm$(EXE_EXT): $(HPM_OBJS) $(COMMON_OBJS)
$(CC) $(HPM_OBJS) $(COMMON_OBJS) -o $@ $(LDFLAGS)
# Package Executor
$(BIN_DIR)/hpx$(EXE_EXT): $(HPX_OBJS) $(COMMON_OBJS)
$(CC) $(HPX_OBJS) $(COMMON_OBJS) -o $@ $(LDFLAGS)
# Object files
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
$(CC) $(CFLAGS) -c $< -o $@
clean:
$(RM) $(BUILD_DIR)/* $(BIN_DIR)/*
install: all
cp $(BIN_DIR)/* /usr/local/bin/
# Development targets
dev: CFLAGS += -g -DDEBUG
dev: all
test: all
@echo "Running tests..."
# Add test commands here
.SUFFIXES: .c .o