diff options
Diffstat (limited to 'Makefile')
| -rw-r--r-- | Makefile | 226 |
1 files changed, 226 insertions, 0 deletions
diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..d4bdf64 --- /dev/null +++ b/Makefile @@ -0,0 +1,226 @@ +# SRDWM Makefile +# Builds the project without requiring cmake + +CXX = g++ +CXXFLAGS = -std=c++17 -Wall -Wextra -Wpedantic -fPIC +INCLUDES = -Isrc -Isrc/core -Isrc/layouts -Isrc/input -Isrc/platform -Isrc/config -Isrc/utils + +# Platform detection +UNAME_S := $(shell uname -s) +UNAME_M := $(shell uname -m) + +# Platform-specific flags and libraries +ifeq ($(UNAME_S),Linux) + PLATFORM = LINUX_PLATFORM + CXXFLAGS += -DLINUX_PLATFORM + + # Check for Wayland support + ifeq ($(shell pkg-config --exists wayland-client 2>/dev/null && echo yes),yes) + ifeq ($(shell pkg-config --exists wlroots 2>/dev/null && echo yes),yes) + CXXFLAGS += -DWAYLAND_ENABLED + WAYLAND_LIBS = $(shell pkg-config --libs wayland-client wlroots 2>/dev/null) + WAYLAND_CFLAGS = $(shell pkg-config --cflags wayland-client wlroots 2>/dev/null) + endif + endif + + # X11 libraries (always available on Linux) + X11_LIBS = -lX11 -lXrandr -lXinerama -lXfixes -lXcursor + X11_CFLAGS = $(shell pkg-config --cflags x11 xrandr xinerama xfixes xcursor 2>/dev/null || echo "") + +else ifeq ($(UNAME_S),Darwin) + PLATFORM = MACOS_PLATFORM + CXXFLAGS += -DMACOS_PLATFORM + LIBS = -framework Cocoa -framework Carbon -framework IOKit + +else ifeq ($(UNAME_S),MINGW32_NT-10.0) + PLATFORM = WIN32_PLATFORM + CXXFLAGS += -DWIN32_PLATFORM + LIBS = -luser32 -lgdi32 -ldwmapi + +else ifeq ($(UNAME_S),MINGW64_NT-10.0) + PLATFORM = WIN32_PLATFORM + CXXFLAGS += -DWIN32_PLATFORM + LIBS = -luser32 -lgdi32 -ldwmapi + +else ifeq ($(UNAME_S),MSYS_NT-10.0) + PLATFORM = WIN32_PLATFORM + CXXFLAGS += -DWIN32_PLATFORM + LIBS = -luser32 -lgdi32 -ldwmapi + +else + PLATFORM = UNKNOWN + $(warning Unknown platform: $(UNAME_S)) +endif + +# Lua support (optional) +LUA_AVAILABLE := $(shell ldconfig -p | grep -q liblua5.4 && echo yes) +ifeq ($(LUA_AVAILABLE),yes) + # Check for Lua headers + LUA_HEADERS := $(shell find /usr/include -name "lua.h" 2>/dev/null | head -1) + ifneq ($(LUA_HEADERS),) + CXXFLAGS += -DLUA_ENABLED + LUA_LIBS = -llua5.4 + LUA_CFLAGS = -I$(dir $(LUA_HEADERS)) + LUA_SOURCES = src/config/lua_manager.cc + $(info Lua support enabled) + else + $(warning Lua runtime found but headers not found - Lua support disabled) + LUA_SOURCES = + endif +else + $(warning Lua not found - Lua support disabled) + LUA_SOURCES = +endif + +# Source files +SOURCES = \ + src/main.cc \ + src/core/window.cc \ + src/core/window_manager.cc \ + src/layouts/layout_engine.cc \ + src/layouts/dynamic_layout.cc \ + src/layouts/tiling_layout.cc \ + src/layouts/smart_placement.cc \ + src/platform/platform_factory.cc + +# Add Lua sources if available +ifneq ($(LUA_SOURCES),) + SOURCES += $(LUA_SOURCES) +endif + +# Platform-specific source files +ifeq ($(PLATFORM),LINUX_PLATFORM) + SOURCES += src/platform/x11_platform.cc + ifeq ($(shell pkg-config --exists wlroots 2>/dev/null && echo yes),yes) + SOURCES += src/platform/wayland_platform.cc + endif +else ifeq ($(PLATFORM),WIN32_PLATFORM) + SOURCES += src/platform/windows_platform.cc +else ifeq ($(PLATFORM),MACOS_PLATFORM) + SOURCES += src/platform/macos_platform.cc +endif + +# Object files +OBJECTS = $(SOURCES:.cc=.o) + +# Target executable +TARGET = srdwm + +# Default target +all: $(TARGET) + +# Build the executable +$(TARGET): $(OBJECTS) + @echo "Linking $(TARGET)..." + $(CXX) $(OBJECTS) -o $(TARGET) $(LIBS) $(X11_LIBS) $(WAYLAND_LIBS) $(LUA_LIBS) + @echo "Build complete: $(TARGET)" + +# Compile source files +%.o: %.cc + @echo "Compiling $<..." + $(CXX) $(CXXFLAGS) $(INCLUDES) $(X11_CFLAGS) $(WAYLAND_CFLAGS) $(LUA_CFLAGS) -c $< -o $@ + +# Clean build artifacts +clean: + @echo "Cleaning build artifacts..." + rm -f $(OBJECTS) $(TARGET) + @echo "Clean complete" + +# Install (requires sudo) +install: $(TARGET) + @echo "Installing $(TARGET)..." + sudo cp $(TARGET) /usr/local/bin/ + sudo mkdir -p /usr/local/share/srdwm/config + sudo cp -r config/* /usr/local/share/srdwm/config/ + sudo mkdir -p /usr/local/share/srdwm/docs + sudo cp docs/*.md /usr/local/share/srdwm/docs/ + @echo "Installation complete" + +# Uninstall (requires sudo) +uninstall: + @echo "Uninstalling $(TARGET)..." + sudo rm -f /usr/local/bin/$(TARGET) + sudo rm -rf /usr/local/share/srdwm + @echo "Uninstallation complete" + +# Show build information +info: + @echo "=== SRDWM Build Information ===" + @echo "Platform: $(PLATFORM)" + @echo "Compiler: $(CXX)" + @echo "C++ Standard: C++17" + @echo "Architecture: $(UNAME_M)" + @echo "Sources: $(words $(SOURCES)) files" + @echo "Target: $(TARGET)" + @echo "Lua Support: $(if $(LUA_SOURCES),Enabled,Disabled)" + @echo "================================" + +# Show platform-specific information +platform-info: + @echo "=== Platform Information ===" + @echo "Platform: $(PLATFORM)" +ifeq ($(PLATFORM),LINUX_PLATFORM) + @echo "Linux Platform: Enabled" + @echo "X11 Support: Enabled" +ifeq ($(shell pkg-config --exists wlroots 2>/dev/null && echo yes),yes) + @echo "Wayland Support: Enabled" +else + @echo "Wayland Support: Disabled (wlroots not found)" +endif +else ifeq ($(PLATFORM),WIN32_PLATFORM) + @echo "Windows Platform: Enabled" +else ifeq ($(PLATFORM),MACOS_PLATFORM) + @echo "macOS Platform: Enabled" +endif + @echo "=============================" + +# Dependencies +deps: + @echo "=== Dependencies ===" +ifeq ($(PLATFORM),LINUX_PLATFORM) + @echo "Checking Linux dependencies..." + @echo "X11 libraries:" + @echo " - libx11-dev" + @echo " - libxrandr-dev" + @echo " - libxinerama-dev" + @echo " - libxfixes-dev" + @echo " - libxcursor-dev" +ifeq ($(shell pkg-config --exists wlroots 2>/dev/null && echo yes),yes) + @echo "Wayland libraries:" + @echo " - libwayland-dev" + @echo " - libwlroots-dev" +else + @echo "Wayland libraries: Not available" +endif + @echo "Lua: $(if $(LUA_SOURCES),Available,Not available)" +else ifeq ($(PLATFORM),WIN32_PLATFORM) + @echo "Windows dependencies:" + @echo " - MinGW-w64" + @echo " - Lua for Windows" +else ifeq ($(PLATFORM),MACOS_PLATFORM) + @echo "macOS dependencies:" + @echo " - Xcode Command Line Tools" + @echo " - Lua (via Homebrew: brew install lua)" +endif + @echo "===================" + +# Help +help: + @echo "=== SRDWM Makefile Help ===" + @echo "Available targets:" + @echo " all - Build the project (default)" + @echo " clean - Remove build artifacts" + @echo " install - Install to system (requires sudo)" + @echo " uninstall - Remove from system (requires sudo)" + @echo " info - Show build information" + @echo " platform-info - Show platform-specific information" + @echo " deps - Show dependency information" + @echo " help - Show this help" + @echo "" + @echo "Environment variables:" + @echo " CXX - C++ compiler (default: g++)" + @echo " CXXFLAGS - Additional compiler flags" + @echo " LIBS - Additional libraries" + @echo "========================" + +.PHONY: all clean install uninstall info platform-info deps help |
