Files
micro-pascal/Makefile
T
2026-10-06 22:38:04 +00:00

74 lines
1.8 KiB
Makefile

ifeq ($(OS),Windows_NT)
DETECTED_OS := Windows
RM := del /Q
RMDIR := rmdir /S /Q
ARCH_RAW := $(PROCESSOR_ARCHITECTURE)
BIN_EXT := .exe
MKDIR_P = if not exist "$(1)" mkdir "$(1)"
RUN_PREFIX :=
else
DETECTED_OS := $(shell uname -s)
RM := rm -f
RMDIR := rm -rf
ARCH_RAW := $(shell uname -m)
BIN_EXT :=
MKDIR_P = mkdir -p "$(1)"
RUN_PREFIX := ./
endif
ifneq (,$(filter x86_64 amd64 AMD64 x86 i386 i486 i586 i686,$(ARCH_RAW)))
ARCH := x86
else ifneq (,$(filter aarch64 arm64 ARM64 armv7l armv6l arm,$(ARCH_RAW)))
ARCH := arm
else ifneq (,$(filter ppc64 ppc64le powerpc,$(ARCH_RAW)))
ARCH := powerpc
else
ARCH := $(ARCH_RAW)
endif
CC ?= cc
CFLAGS ?= -std=c99 -Wall -Wextra -Iinclude
BUILD_DIR := build/$(ARCH)
BIN_DIR := $(BUILD_DIR)/bin
TEST_DIR := $(BUILD_DIR)/.tests
BIN := $(BIN_DIR)/micropascal$(BIN_EXT)
TEST_BIN := $(TEST_DIR)/micropascal-tests$(BIN_EXT)
LIB_SRCS := $(wildcard src/micropascal-lexer/*.c) $(wildcard src/micropascal-parser/*.c)
APP_SRCS := src/main.c $(LIB_SRCS)
TEST_SRCS := tests/test_main.c tests/test_lexer.c tests/test_parser.c $(LIB_SRCS)
ARGS ?= examples/testaparidade.pas
.PHONY: all help build run test clean
all: build
help:
@echo "micro-Pascal - alvos disponiveis"
@echo " make help mostra esta ajuda"
@echo " make build compila o compilador em $(BIN)"
@echo " make run compila e executa em uma amostra (ARGS=arquivo)"
@echo " make test compila e executa a suite de testes"
@echo " make clean remove o diretorio build"
build: $(BIN)
$(BIN): $(APP_SRCS)
@$(call MKDIR_P,$(BIN_DIR))
$(CC) $(CFLAGS) $(APP_SRCS) -o $(BIN)
$(TEST_BIN): $(TEST_SRCS)
@$(call MKDIR_P,$(TEST_DIR))
$(CC) $(CFLAGS) $(TEST_SRCS) -o $(TEST_BIN)
run: build
$(RUN_PREFIX)$(BIN) $(ARGS)
test: $(TEST_BIN)
$(RUN_PREFIX)$(TEST_BIN)
clean:
$(RMDIR) build