Files
lbs/makefile
Riley King-Saunders 2a121caf42 Created main makefile - Need to add clean recipe
`make modules debug|release MODULES...` Builds the provided list of lua modules in release/debug
`make release`
`make debug` Builds a debug build of the lbs program
`make clean` TODO
2025-11-25 00:04:24 +11:00

71 lines
1.6 KiB
Makefile

CC=clang
CFLAGS = -Wall -Wextra
ifeq ($(OS),Windows_NT)
CFLAGS += -D WIN32
ifeq ($(PROCESSOR_ARCHITEW6432),AMD64)
CFLAGS += -D AMD64
else
ifeq ($(PROCESSOR_ARCHITECTURE),AMD64)
CFLAGS += -D AMD64
endif
ifeq ($(PROCESSOR_ARCHITECTURE),x86)
CFLAGS += -D IA32
endif
endif
RELEASE_TARGET=bin/lbs.exe
DEBUG_TARGET=bin/lbs-dbg.exe
else
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Linux)
CFLAGS += -D LINUX
endif
ifeq ($(UNAME_S),Darwin)
CFLAGS += -D OSX
endif
UNAME_P := $(shell uname -p)
ifeq ($(UNAME_P),x86_64)
CFLAGS += -D AMD64
endif
ifneq ($(filter %86,$(UNAME_P)),)
CFLAGS += -D IA32
endif
ifneq ($(filter arm%,$(UNAME_P)),)
CFLAGS += -D ARM
endif
RELEASE_TARGET=bin/lbs
DEBUG_TARGET=bin/lbs-dbg
endif
# If the first argument is "modules"...
ifeq (modules,$(firstword $(MAKECMDGOALS)))
# use the rest as arguments for "run"
MODULE_ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
# ...and turn them into do-nothing targets
$(eval $(MODULE_ARGS):;@:)
endif
rwildcard=$(foreach d,$(wildcard $(1:=/*)),$(call rwildcard,$d,$2) $(filter $(subst *,%,$2),$d))
SRC_FILES=$(call rwildcard, src, *.c)
OBJ_FILES=$(addprefix obj/, $(SRC_FILES:.c=.o))
modules:
cd modules && $(MAKE) $(MODULE_ARGS)
obj/src/%.o: src/%.c
$(CC) $(CFLAGS) -c $(@:obj/%.o=%.c) -o $@
release: $(RELEASE_TARGET)
$(RELEASE_TARGET): $(OBJ_FILES)
$(CC) $(LFLAGS) $^ -o $@
debug: $(DEBUG_TARGET)
$(DEBUG_TARGET): $(OBJ_FILES)
$(CC) $(LFLAGS) $^ -o $@
clean:
echo TODO