From ae30ea29f54d11ce5e8685f5dbd517ef1bf1368d Mon Sep 17 00:00:00 2001 From: Harvey Fong Date: Sat, 12 Apr 2025 11:49:20 -0600 Subject: [PATCH] transposed makefile style from vmax2bella --- makefile | 281 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 153 insertions(+), 128 deletions(-) diff --git a/makefile b/makefile index 328fc87..b81eb38 100644 --- a/makefile +++ b/makefile @@ -1,139 +1,164 @@ -SDKNAME =bella_engine_sdk -OUTNAME =poomer-raylib-bella_onimage -UNAME =$(shell uname) +# Project configuration +BELLA_SDK_NAME = bella_engine_sdk +EXECUTABLE_NAME = poomer-raylib-bella_onimage +PLATFORM = $(shell uname) +BUILD_TYPE ?= release# Default to release build if not specified -ifeq ($(UNAME), Darwin) +# Common paths +BELLA_SDK_PATH = ../bella_engine_sdk +RAYGUI_PATH = ../raygui +RAYLIB_PATH = ../raylib +OBJ_DIR = obj/$(PLATFORM)/$(BUILD_TYPE) +BIN_DIR = bin/$(PLATFORM)/$(BUILD_TYPE) +OUTPUT_FILE = $(BIN_DIR)/$(EXECUTABLE_NAME) - SDKBASE = ../bella_engine_sdk - - SDKFNAME = lib$(SDKNAME).dylib - INCLUDEDIRS = -I$(SDKBASE)/src - INCLUDEDIRS2 = -I../raygui/src - INCLUDEDIRS3 = -I../raylib/src - RAYLIBDIR = ../raylib/src - RAYLIBNAME = libraylib.dylib - LIBDIR = $(SDKBASE)/lib - LIBDIRS = -L$(LIBDIR) -L$(RAYLIBDIR) - OBJDIR = obj/$(UNAME) - BINDIR = bin/$(UNAME) - OUTPUT = $(BINDIR)/$(OUTNAME) - - ISYSROOT = /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk - - CC = clang - CXX = clang++ - - CCFLAGS = -arch x86_64\ - -arch arm64\ - -mmacosx-version-min=11.0\ - -isysroot $(ISYSROOT)\ - -fvisibility=hidden\ - -O3\ - $(INCLUDEDIRS)\ - $(INCLUDEDIRS2)\ - $(INCLUDEDIRS3) - - CFLAGS = $(CCFLAGS)\ - -std=c11 - - CXXFLAGS = $(CCFLAGS)\ - -std=c++11 - - CPPDEFINES = -DNDEBUG=1\ - -DDL_USE_SHARED - - LIBS = -l$(SDKNAME)\ - -lraylib\ - -lm\ - -ldl\ - -framework OpenGL\ - -framework CoreFoundation\ - -framework AppKit\ - -framework IOKit\ - -framework CoreGraphics\ - -framework Foundation - - LINKFLAGS = -mmacosx-version-min=11.0\ - -isysroot $(ISYSROOT)\ - -framework Cocoa\ - -framework IOKit\ - -framework CoreVideo\ - -framework CoreFoundation\ - -framework Accelerate\ - -fvisibility=hidden\ - -O5\ - -rpath @executable_path\ - -weak_library $(LIBDIR)/libvulkan.dylib +# Platform-specific configuration +ifeq ($(PLATFORM), Darwin) + # macOS configuration + SDK_LIB_EXT = dylib + SDK_LIB_FILE = lib$(BELLA_SDK_NAME).$(SDK_LIB_EXT) + RAYLIB_LIB_NAME = libraylib.$(SDK_LIB_EXT) + MACOS_SDK_PATH = /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk + + # Compiler settings + CC = clang + CXX = clang++ + + # Architecture flags + ARCH_FLAGS = -arch x86_64 -arch arm64 -mmacosx-version-min=11.0 -isysroot $(MACOS_SDK_PATH) + + # Include paths + INCLUDE_PATHS = -I$(BELLA_SDK_PATH)/src \ + -I$(RAYGUI_PATH)/src \ + -I$(RAYLIB_PATH)/src + + # Library paths + SDK_LIB_PATH = $(BELLA_SDK_PATH)/lib + RAYLIB_LIB_PATH = $(RAYLIB_PATH)/src + LIB_PATHS = -L$(SDK_LIB_PATH) -L$(RAYLIB_LIB_PATH) + + # Platform-specific libraries + LIBRARIES = -l$(BELLA_SDK_NAME) \ + -lraylib \ + -lm \ + -ldl \ + -framework OpenGL \ + -framework CoreFoundation \ + -framework AppKit \ + -framework IOKit \ + -framework CoreGraphics \ + -framework Foundation + + # Linking flags + LINKER_FLAGS = -mmacosx-version-min=11.0 \ + -isysroot $(MACOS_SDK_PATH) \ + -framework Cocoa \ + -framework IOKit \ + -framework CoreVideo \ + -framework CoreFoundation \ + -framework Accelerate \ + -fvisibility=hidden \ + -O5 \ + -rpath @executable_path \ + -weak_library $(SDK_LIB_PATH)/libvulkan.dylib else - - SDKBASE = ../bella_engine_sdk - - SDKFNAME = lib$(SDKNAME).so - INCLUDEDIRS = -I$(SDKBASE)/src - INCLUDEDIRS2 = -I../raygui/src - INCLUDEDIRS3 = -I../raylib/src - LIBDIR = $(SDKBASE)/lib - RAYLIBDIR = ../raylib/src - RAYLIBNAME = libraylib.so - SODDIR = /usr/lib/x86_64-linux-gnu/ - LIBDIRS = -L$(LIBDIR) -L$(RAYLIBDIR) - OBJDIR = obj/$(UNAME) - BINDIR = bin/$(UNAME) - OUTPUT = $(BINDIR)/$(OUTNAME) - - CC = gcc - CXX = g++ - - CCFLAGS = -m64\ - -Wall\ - -fvisibility=hidden\ - -D_FILE_OFFSET_BITS=64\ - -O3\ - $(INCLUDEDIRS)\ - $(INCLUDEDIRS2)\ - $(INCLUDEDIRS3) - - CFLAGS = $(CCFLAGS)\ - -std=c11 - - CXXFLAGS = $(CCFLAGS)\ - -std=c++11 - - CPPDEFINES = -DNDEBUG=1\ - -DDL_USE_SHARED - - LIBS = -l$(SDKNAME)\ - -lraylib\ - -lm\ - -ldl\ - -lrt\ - -lpthread\ - -lX11\ - -lGL\ - -lvulkan - - LINKFLAGS = -m64\ - -fvisibility=hidden\ - -O3\ - -Wl,-rpath,'$$ORIGIN'\ - -Wl,-rpath,'$$ORIGIN/lib' + # Linux configuration + SDK_LIB_EXT = so + SDK_LIB_FILE = lib$(BELLA_SDK_NAME).$(SDK_LIB_EXT) + RAYLIB_LIB_NAME = libraylib.$(SDK_LIB_EXT) + + # Compiler settings + CC = gcc + CXX = g++ + + # Architecture flags + ARCH_FLAGS = -m64 -D_FILE_OFFSET_BITS=64 + + # Include paths + INCLUDE_PATHS = -I$(BELLA_SDK_PATH)/src \ + -I$(RAYGUI_PATH)/src \ + -I$(RAYLIB_PATH)/src + + # Library paths + SDK_LIB_PATH = $(BELLA_SDK_PATH)/lib + RAYLIB_LIB_PATH = $(RAYLIB_PATH)/src + SYSTEM_LIB_PATH = /usr/lib/x86_64-linux-gnu/ + LIB_PATHS = -L$(SDK_LIB_PATH) -L$(RAYLIB_LIB_PATH) + + # Platform-specific libraries + LIBRARIES = -l$(BELLA_SDK_NAME) \ + -lraylib \ + -lm \ + -ldl \ + -lrt \ + -lpthread \ + -lX11 \ + -lGL \ + -lvulkan + + # Linking flags + LINKER_FLAGS = -m64 \ + -fvisibility=hidden \ + -O3 \ + -Wl,-rpath,'$$ORIGIN' \ + -Wl,-rpath,'$$ORIGIN/lib' endif -OBJS = poomer-raylib-bella_onimage.o -OBJ = $(patsubst %,$(OBJDIR)/%,$(OBJS)) +# Build type specific flags +ifeq ($(BUILD_TYPE), debug) + CPP_DEFINES = -D_DEBUG -DDL_USE_SHARED + COMMON_FLAGS = $(ARCH_FLAGS) -fvisibility=hidden -g -O0 $(INCLUDE_PATHS) +else + CPP_DEFINES = -DNDEBUG=1 -DDL_USE_SHARED + COMMON_FLAGS = $(ARCH_FLAGS) -fvisibility=hidden -O3 $(INCLUDE_PATHS) +endif -$(OBJDIR)/%.o: %.cpp +# Language-specific flags +C_FLAGS = $(COMMON_FLAGS) -std=c11 +CXX_FLAGS = $(COMMON_FLAGS) -std=c++11 + +# Objects +OBJECTS = $(EXECUTABLE_NAME).o +OBJECT_FILES = $(patsubst %,$(OBJ_DIR)/%,$(OBJECTS)) + +# Build rules +$(OBJ_DIR)/%.o: %.cpp @mkdir -p $(@D) - $(CXX) -c -o $@ $< $(CXXFLAGS) $(CPPDEFINES) + $(CXX) -c -o $@ $< $(CXX_FLAGS) $(CPP_DEFINES) -$(OUTPUT): $(OBJ) +$(OUTPUT_FILE): $(OBJECT_FILES) @mkdir -p $(@D) - $(CXX) -o $@ $^ $(LINKFLAGS) $(LIBDIRS) $(LIBS) - @cp $(LIBDIR)/$(SDKFNAME) $(BINDIR)/$(SDKFNAME) + $(CXX) -o $@ $^ $(LINKER_FLAGS) $(LIB_PATHS) $(LIBRARIES) + @echo "Copying libraries to $(BIN_DIR)..." + @cp $(SDK_LIB_PATH)/$(SDK_LIB_FILE) $(BIN_DIR)/$(SDK_LIB_FILE) + @echo "Build complete: $(OUTPUT_FILE)" -.PHONY: clean +# Add default target +all: $(OUTPUT_FILE) + +.PHONY: clean cleanall all clean: - rm -f $(OBJDIR)/*.o - rm -f $(OUTPUT) - rm -f $(BINDIR)/$(SDKFNAME) - rm -f $(BINDIR)/$(RAYLIBNAME) + rm -f $(OBJ_DIR)/*.o + rm -f $(OUTPUT_FILE) + rm -f $(BIN_DIR)/$(SDK_LIB_FILE) + rm -f $(BIN_DIR)/$(RAYLIB_LIB_NAME) + rmdir $(OBJ_DIR) 2>/dev/null || true + rmdir $(BIN_DIR) 2>/dev/null || true + +cleanall: + rm -f obj/*/release/*.o + rm -f obj/*/debug/*.o + rm -f bin/*/release/$(EXECUTABLE_NAME) + rm -f bin/*/debug/$(EXECUTABLE_NAME) + rm -f bin/*/release/$(SDK_LIB_FILE) + rm -f bin/*/debug/$(SDK_LIB_FILE) + rm -f bin/*/release/*.$(SDK_LIB_EXT) + rm -f bin/*/debug/*.$(SDK_LIB_EXT) + rmdir obj/*/release 2>/dev/null || true + rmdir obj/*/debug 2>/dev/null || true + rmdir bin/*/release 2>/dev/null || true + rmdir bin/*/debug 2>/dev/null || true + rmdir obj/* 2>/dev/null || true + rmdir bin/* 2>/dev/null || true + rmdir obj 2>/dev/null || true + rmdir bin 2>/dev/null || true