Makefile fix
This commit is contained in:
104
Makefile
104
Makefile
@@ -1,56 +1,98 @@
|
|||||||
|
# =====================
|
||||||
# Compiler settings
|
# Compiler settings
|
||||||
|
# =====================
|
||||||
CC = gcc
|
CC = gcc
|
||||||
CFLAGS = -std=c11 -Wall -Wextra -O2 -Iinclude
|
CFLAGS = -std=c11 -Wall -Wextra -O2 -Iinclude
|
||||||
SHELL=/bin/sh
|
|
||||||
|
|
||||||
|
# =====================
|
||||||
# Directories
|
# Directories
|
||||||
|
# =====================
|
||||||
SRCDIR = src
|
SRCDIR = src
|
||||||
INCDIR = include
|
INCDIR = include
|
||||||
OBJDIR=build
|
OBJDIR = obj
|
||||||
DISTDIR=dist
|
|
||||||
TESTDIR = tests
|
TESTDIR = tests
|
||||||
|
TESTBINDIR = $(TESTDIR)/bin
|
||||||
|
|
||||||
# Platform-specific sources
|
# =====================
|
||||||
|
# Platform selection
|
||||||
|
# =====================
|
||||||
ifeq ($(OS),Windows_NT)
|
ifeq ($(OS),Windows_NT)
|
||||||
PLATFORM_SRC = $(SRCDIR)/win32_platform.c
|
PLATFORM_SRC = $(SRCDIR)/win32_platform.c
|
||||||
OBJEXT=obj
|
EXEEXT = .exe
|
||||||
LIBEXT=dll
|
|
||||||
RM=del /Q
|
|
||||||
MKDIR=if not exist "$(1)" mkdir "$(1)"
|
|
||||||
else
|
else
|
||||||
PLATFORM_SRC = $(SRCDIR)/linux_platform.c
|
PLATFORM_SRC = $(SRCDIR)/linux_platform.c
|
||||||
OBJEXT=o
|
EXEEXT =
|
||||||
LIBEXT=so
|
|
||||||
RM=rm -f
|
|
||||||
MKDIR=mkdir -p $(1)
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Sources and objects
|
# =====================
|
||||||
SRC=$(PLATFORM_SRC) $(TESTDIR)/main.c
|
# Tools
|
||||||
OBJ=$(patsubst %.c,$(OBJDIR)/%.$(OBJEXT),$(SRC))
|
# =====================
|
||||||
|
RM = rm -f
|
||||||
|
MKDIR = mkdir -p
|
||||||
|
|
||||||
|
# =====================
|
||||||
|
# Library (platform backend)
|
||||||
|
# =====================
|
||||||
|
LIB_SRC = $(PLATFORM_SRC)
|
||||||
|
LIB_OBJ = $(patsubst %.c,$(OBJDIR)/%.o,$(LIB_SRC))
|
||||||
|
|
||||||
|
# =====================
|
||||||
|
# Test / final binaries
|
||||||
|
# =====================
|
||||||
|
TEST_SRCS = $(wildcard $(TESTDIR)/*.c)
|
||||||
|
TEST_BINS = $(patsubst $(TESTDIR)/%.c,$(TESTBINDIR)/%$(EXEEXT),$(TEST_SRCS))
|
||||||
|
|
||||||
|
# =====================
|
||||||
# Targets
|
# Targets
|
||||||
.PHONY: all clean run
|
# =====================
|
||||||
|
.PHONY: all test clean
|
||||||
|
|
||||||
all: $(DISTDIR)/app
|
# Build everything
|
||||||
|
all: $(LIB_OBJ) $(TEST_BINS)
|
||||||
|
|
||||||
# Build main executable
|
# =====================
|
||||||
$(DISTDIR)/app: $(OBJ)
|
# Compile platform object
|
||||||
@$(call MKDIR,$(DISTDIR))
|
# =====================
|
||||||
$(CC) $(CFLAGS) $(OBJ) -o $@
|
$(OBJDIR)/%.o: %.c
|
||||||
|
@$(MKDIR) $(dir $@)
|
||||||
# Compile object files
|
|
||||||
$(OBJDIR)/%.$(OBJEXT): %.c
|
|
||||||
@$(call MKDIR,$(dir $@))
|
|
||||||
$(CC) $(CFLAGS) -c $< -o $@
|
$(CC) $(CFLAGS) -c $< -o $@
|
||||||
|
|
||||||
# Run the app
|
# =====================
|
||||||
run: $(DISTDIR)/app
|
# Build each binary
|
||||||
$(DISTDIR)/app
|
# =====================
|
||||||
|
$(TESTBINDIR)/%$(EXEEXT): $(TESTDIR)/%.c $(LIB_OBJ)
|
||||||
|
@$(MKDIR) $(TESTBINDIR)
|
||||||
|
$(CC) $(CFLAGS) $< $(LIB_OBJ) -o $@
|
||||||
|
|
||||||
|
# =====================
|
||||||
|
# Test runner
|
||||||
|
# =====================
|
||||||
|
test: all
|
||||||
|
@echo "Running binaries..."
|
||||||
|
@SUCCESS=0; FAILURE=0; \
|
||||||
|
for bin in $(TEST_BINS); do \
|
||||||
|
echo "--------------------------------"; \
|
||||||
|
echo "Running $$bin"; \
|
||||||
|
"./$$bin"; \
|
||||||
|
EC=$$?; \
|
||||||
|
NAME=$$(basename "$$bin"); \
|
||||||
|
if [ $$EC -eq 0 ]; then \
|
||||||
|
printf "\033[0;32m%s: EXIT %d (SUCCESS)\033[0m\n" "$$NAME" "$$EC"; \
|
||||||
|
SUCCESS=$$((SUCCESS+1)); \
|
||||||
|
else \
|
||||||
|
printf "\033[0;31m%s: EXIT %d (FAILURE)\033[0m\n" "$$NAME" "$$EC"; \
|
||||||
|
FAILURE=$$((FAILURE+1)); \
|
||||||
|
fi; \
|
||||||
|
done; \
|
||||||
|
echo ""; \
|
||||||
|
echo "SUCCESS: $$SUCCESS"; \
|
||||||
|
echo "FAILURE: $$FAILURE"; \
|
||||||
|
if [ $$FAILURE -ne 0 ]; then exit 1; fi
|
||||||
|
|
||||||
|
# =====================
|
||||||
# Clean
|
# Clean
|
||||||
|
# =====================
|
||||||
clean:
|
clean:
|
||||||
-$(RM) $(OBJ)
|
-$(RM) -r $(OBJDIR) $(TESTBINDIR)
|
||||||
-$(RM) $(DISTDIR)/*
|
@echo "Cleaned objects and test binaries"
|
||||||
@echo "Cleaned build and dist directories"
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#include "../include/platform.h"
|
#include "../include/platform.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
void platform_print(void)
|
void platform_print(void)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user