Makefile 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. # Compiler and flags
  2. CC = gcc
  3. CFLAGS = -Wall -Wextra -Wpedantic -Werror -std=c99 \
  4. -O2 -Iexternal/raylib/src
  5. LDFLAGS = -Lexternal/raylib/ -lraylib -lm -lpthread
  6. # Directories
  7. SRC_DIR = src
  8. OBJ_DIR = .obj
  9. RAYLIB_SRC_DIR = external/raylib/src
  10. RAYLIB_LIB = external/raylib/libraylib.a
  11. # Target executable
  12. TARGET = vinora
  13. # Source and object files
  14. C_SOURCES = $(wildcard $(SRC_DIR)/*.c)
  15. OBJECTS = $(C_SOURCES:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o)
  16. # Default target
  17. all: $(TARGET)
  18. # Build Raylib library
  19. raylib: $(RAYLIB_LIB)
  20. $(RAYLIB_LIB):
  21. @echo
  22. @echo "BUILDING RAYLIB..."
  23. @echo
  24. $(MAKE) -C $(RAYLIB_SRC_DIR)
  25. # Goal to download raylib binary from Github
  26. fetch-raylib:
  27. @echo "Downloading Raylib from GitHub..."
  28. @mkdir -p external/raylib
  29. @cd external && \
  30. if [ "$$(uname -s)" = "Linux" ]; then \
  31. if [ "$$(uname -m)" = "x86_64" ]; then \
  32. wget https://github.com/raysan5/raylib/releases/download/5.5/raylib-5.5_linux_amd64.tar.gz && \
  33. tar -xzf raylib-5.5_linux_amd64.tar.gz && mv raylib-5.5_linux_amd64/lib/libraylib.a raylib/ && rm -rf raylib-5.5_linux_amd64 raylib-5.5_linux_amd64.tar.gz; \
  34. else \
  35. wget https://github.com/raysan5/raylib/releases/download/5.5/raylib-5.5_linux_i386.tar.gz && \
  36. tar -xzf raylib-5.5_linux_i386.tar.gz && mv raylib-5.5_linux_i386/lib/libraylib.a raylib/ && rm -rf raylib-5.5_linux_i386 raylib-5.5_linux_i386.tar.gz; \
  37. fi \
  38. else \
  39. if [ "$$(uname -s)" = "Darwin" ]; then \
  40. wget https://github.com/raysan5/raylib/releases/download/5.5/raylib-5.5_macos.tar.gz && \
  41. tar -xzf raylib-5.5_macos.tar.gz && mv raylib-5.5_macos/lib/libraylib.a raylib/ && rm -rf raylib-5.5_macos raylib-5.5_macos.tar.gz; \
  42. else \
  43. echo "Unsupported OS"; exit 1; \
  44. fi \
  45. fi
  46. # Link object files to create executable
  47. $(TARGET): $(OBJECTS) | $(RAYLIB_LIB) $(OBJ_DIR)
  48. $(CC) $(OBJECTS) -o $@ $(LDFLAGS)
  49. # Compile C source files
  50. $(OBJ_DIR)/%.o: $(SRC_DIR)/%.c | $(OBJ_DIR)
  51. $(CC) $(CFLAGS) -c $< -o $@
  52. # Create object directory if it doesn't exist
  53. $(OBJ_DIR):
  54. mkdir -p $(OBJ_DIR)
  55. run: $(TARGET)
  56. ./$(TARGET)
  57. # Clean up
  58. clean:
  59. rm -rf $(OBJ_DIR) $(TARGET)
  60. $(MAKE) -C $(RAYLIB_SRC_DIR) clean
  61. rm -f $(RAYLIB_LIB)
  62. # Phony targets
  63. .PHONY: all clean run raylib