From da616f03fef545a14f5da6c5ac4d7a963cd1ccd1 Mon Sep 17 00:00:00 2001 From: tzyvoski <67583725+tzyvoski@users.noreply.github.com> Date: Sat, 21 May 2022 20:21:11 +0200 Subject: [PATCH] Created Makefile --- Makefile | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..99e807b --- /dev/null +++ b/Makefile @@ -0,0 +1,48 @@ +CXX = gcc +CC = $(CROSS_COMPILE)$(CXX) + +INCDIR = include +CFLAGS = -O3 -Wall -Wextra -g -I $(INCDIR)/intf -I "src/intf" +LFLAGS = -lm + +SRCDIR = src +OBJDIR = temp +BINDIR = build +OUTFILE = noja + +rwildcard = $(foreach d, $(wildcard $(1:=/*)), $(call rwildcard ,$d, $2) $(filter $(subst *, %, $2), $d)) + +SRC = $(call rwildcard, $(SRCDIR), *.c) +SRC_OBJECTS = $(call rwildcard, $(SRCDIR)/objects, *.c) +SRC_COMPILER = $(call rwildcard, $(SRCDIR)/compiler, *.c) +SRC_COMMON = $(call rwildcard, $(SRCDIR)/common, *.c) +SRC_BUILTINS = $(call rwildcard, $(SRCDIR)/builtins, *.c) +SRC_UTILS = $(call rwildcard, $(SRCDIR)/utils, *.c) +SRC_RUNTIME = $(call rwildcard, $(SRCDIR)/runtime, *.c) + +OBJS_OBJECTS = $(patsubst $(SRCDIR)/objects/%.c, $(OBJDIR)/objects/%.o, $(SRC_OBJECTS)) +OBJS_COMPILER = $(patsubst $(SRCDIR)/compiler/%.c, $(OBJDIR)/compiler/%.o, $(SRC_COMPILER)) +OBJS_COMMON = $(patsubst $(SRCDIR)/common/%.c, $(OBJDIR)/common/%.o, $(SRC_COMMON)) +OBJS_BUILTINS = $(patsubst $(SRCDIR)/builtins/%.c, $(OBJDIR)/builtins/%.o, $(SRC_BUILTINS)) +OBJS_UTILS = $(patsubst $(SRCDIR)/utils/%.c, $(OBJDIR)/utils/%.o, $(SRC_UTILS)) +OBJS_RUNTIME = $(patsubst $(SRCDIR)/runtime/%.c, $(OBJDIR)/runtime/%.o, $(SRC_UTILS)) +OBJS = $(patsubst $(SRCDIR)/%.c, $(OBJDIR)/%.o, $(SRC)) + + +$(OBJDIR)/%.o: $(SRCDIR)/%.c + @ echo $(shell tput setaf 3) [C] $(shell tput setaf 5) [SRC] $(shell tput setaf 7) $^ + @ mkdir -p $(@D) + @ $(CC) $(CFLAGS) -c $^ -o $@ + + +all: $(OBJS) build + +build: + @ mkdir -p build + + @ echo !==== LINKING EVERYTHING + @ $(CC) -o $(BINDIR)/$(OUTFILE) $(OBJS) $(LFLAGS) + +clean: + @ rm -rf $(BINDIR) + @ rm -rf $(OBJDIR)