Skip to content
Snippets Groups Projects
Select Git revision
  • master
1 result

Makefile

Blame
  • Makefile 4.93 KiB
    CC = gcc
    PYTHON_CFLAGS = $(shell python3-config --includes)
    PYTHON_LDFLAGS = $(shell python3-config --ldflags)
    PYTHON_VERSION = $(shell python3 --version | sed 's/.* //' | sed 's/\([0-9]*\.[0-9]*\)\.[0-9]*/\1/')
    PYTHON_LIBS = $(shell python3-config --libs)
    CFLAGS = -Wall -Wextra -O2 -fPIC
    CFLAGS_PY = $(CFLAGS) $(PYTHON_CFLAGS)
    LDFLAGS = -lvulkan -lglfw -lm -ldl -lpthread -lX11 -lXxf86vm -lXrandr -lXi
    SHARED_LDFLAGS = -shared -Wl,-rpath,'$$ORIGIN' $(LDFLAGS)
    INCLUDE = -Iinclude
    
    SRC_DIR = src
    EXAMPLES_DIR = examples
    BUILD_DIR = build
    INCLUDE_DIR = include
    
    # exclusion des fichiers python
    LIB_SOURCES = $(filter-out $(SRC_DIR)/python_ext.c $(SRC_DIR)/python.c, $(wildcard $(SRC_DIR)/*.c))
    LIB_OBJECTS = $(patsubst $(SRC_DIR)/%.c, $(BUILD_DIR)/%.o, $(LIB_SOURCES))
    
    BASIC_EXAMPLE_SRC = $(EXAMPLES_DIR)/example.c
    BASIC_EXAMPLE_TARGET = $(BUILD_DIR)/example
    
    TUTORIAL_SRC = $(EXAMPLES_DIR)/tutorial.c
    TUTORIAL_TARGET = $(BUILD_DIR)/tutorial
    
    MOVING_EXAMPLE_SRC = $(EXAMPLES_DIR)/moving_example.c
    MOVING_EXAMPLE_TARGET = $(BUILD_DIR)/moving_example
    
    PY_EXAMPLES_DIR = $(EXAMPLES_DIR)/python
    
    LIB_NAME = libs3dl
    # fichier compilé dynamique
    LIB_EXT = .so
    LIB_TARGET = $(BUILD_DIR)/$(LIB_NAME)$(LIB_EXT)
    LIB_TARGET_PY = s3dl/$(LIB_NAME)$(LIB_EXT)
    
    SHADERS_SRC = shaders
    SHADERS_OUT = $(BUILD_DIR)
    
    all: dirs shaders $(LIB_TARGET) $(LIB_TARGET_PY) examples
    
    dirs:
    	@mkdir -p $(BUILD_DIR)
    
    shaders:
    	@echo "Compiling Shaders"
    	@if [ -d "$(SHADERS_SRC)" ]; then \
    		if which glslc > /dev/null; then \
    			glslc $(SHADERS_SRC)/shader.vert -o $(SHADERS_OUT)/vert.spv 2>/dev/null || echo "Vertex Shader compilation skipped"; \
    			glslc $(SHADERS_SRC)/shader.frag -o $(SHADERS_OUT)/frag.spv 2>/dev/null || echo "Fragment Shader compilation skipped"; \
    		else \
    			echo "glslc not found, shader compilation skipped"; \
    		fi \
    	else \
    		echo "No shader directory found, shader compilation skipped"; \
    	fi
    
    $(LIB_TARGET): $(LIB_OBJECTS)
    	$(CC) $(CFLAGS) -o $@ $^ $(SHARED_LDFLAGS)
    
    $(LIB_TARGET_PY): $(LIB_TARGET)
    	@mkdir -p s3dl
    	cp $< $@
    
    $(BUILD_DIR)/%.o: $(SRC_DIR)/%.c
    	$(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@
    
    $(BASIC_EXAMPLE_TARGET): $(EXAMPLES_DIR)/example.c $(LIB_TARGET)
    	$(CC) $(CFLAGS) $(INCLUDE) -o $@ $< -L$(BUILD_DIR) -ls3dl $(LDFLAGS) -Wl,-rpath,'$$ORIGIN'
    
    $(TUTORIAL_TARGET): $(EXAMPLES_DIR)/tutorial.c $(LIB_TARGET)
    	$(CC) $(CFLAGS) $(INCLUDE) -o $@ $< -L$(BUILD_DIR) -ls3dl $(LDFLAGS) -Wl,-rpath,'$$ORIGIN'
    
    $(MOVING_EXAMPLE_TARGET): $(EXAMPLES_DIR)/moving_example.c $(LIB_TARGET)
    	$(CC) $(CFLAGS) $(INCLUDE) -o $@ $< -L$(BUILD_DIR) -ls3dl $(LDFLAGS) -Wl,-rpath,'$$ORIGIN'
    
    examples: $(BASIC_EXAMPLE_TARGET) $(TUTORIAL_TARGET) $(MOVING_EXAMPLE_TARGET)
    
    install: $(LIB_TARGET)
    	cp $(LIB_TARGET) /usr/local/lib/
    	ldconfig
    
    python: dirs shaders $(LIB_TARGET) $(LIB_TARGET_PY)
    	@echo "Building with Python include: $(PYTHON_CFLAGS)"
    	@echo "Building Python extension module"
    	$(CC) $(CFLAGS_PY) $(INCLUDE) -c src/python.c -o $(BUILD_DIR)/python_ext.o
    	$(CC) $(CFLAGS_PY) $(INCLUDE) -shared -o s3dl/s3dl_ext.so $(BUILD_DIR)/python_ext.o -L$(BUILD_DIR) -Ls3dl -ls3dl $(PYTHON_LDFLAGS) $(PYTHON_LIBS) $(LDFLAGS) -Wl,-rpath,'$$ORIGIN'
    	@echo "Python library and extension module are ready to use"
    
    clean:
    	rm -rf $(BUILD_DIR)/*.o $(LIB_TARGET) $(BASIC_EXAMPLE_TARGET) $(TUTORIAL_TARGET) $(MOVING_EXAMPLE_TARGET) $(LIB_NAME)$(LIB_EXT) s3dl/s3dl_ext.so $(LIB_TARGET_PY) $(BUILD_DIR)/python_ext.o
    
    run-example: $(BASIC_EXAMPLE_TARGET)
    	@echo "Running example..."
    	@mkdir -p lib
    	@cp $(LIB_TARGET) lib/ 2>/dev/null || true
    	@export LD_LIBRARY_PATH=./lib:$$LD_LIBRARY_PATH && ./$(BASIC_EXAMPLE_TARGET)
    
    run-tutorial: $(TUTORIAL_TARGET)
    	@echo "Running tutorial..."
    	@mkdir -p lib
    	@cp $(LIB_TARGET) lib/ 2>/dev/null || true
    	@export LD_LIBRARY_PATH=./lib:$$LD_LIBRARY_PATH && ./$(TUTORIAL_TARGET)
    
    run-moving_example: $(MOVING_EXAMPLE_TARGET)
    	@echo "Running moving_example..."
    	@mkdir -p lib
    	@cp $(LIB_TARGET) lib/ 2>/dev/null || true
    	@export LD_LIBRARY_PATH=./lib:$$LD_LIBRARY_PATH && ./$(MOVING_EXAMPLE_TARGET)
    
    example: dirs $(BASIC_EXAMPLE_TARGET) run-example
    tutorial: dirs $(TUTORIAL_TARGET) run-tutorial
    moving_example: dirs $(MOVING_EXAMPLE_TARGET) run-moving_example
    
    py-example: python
    	@echo "Running Python example..."
    	@export PYTHONPATH=$(PWD):$$PYTHONPATH && python3 $(PY_EXAMPLES_DIR)/example.py
    
    py-texample: python
    	@echo "Running Python texample..."
    	@export PYTHONPATH=$(PWD):$$PYTHONPATH && python3 $(PY_EXAMPLES_DIR)/texample.py
    
    py-smayonnaise: python
    	@echo "Running Python Smayonnaise..."
    	@export PYTHONPATH=$(PWD):$$PYTHONPATH && python3 $(PY_EXAMPLES_DIR)/Smayonnaise.py
    
    pip_install: python
    	@echo "Preparing files for pip installation..."
    	@mkdir -p s3dl/shaders
    	@cp -f $(SHADERS_OUT)/vert.spv s3dl/shaders/ 2>/dev/null || touch s3dl/shaders/vert.spv
    	@cp -f $(SHADERS_OUT)/frag.spv s3dl/shaders/ 2>/dev/null || touch s3dl/shaders/frag.spv
    
    .PHONY: all clean dirs install python shaders examples example tutorial moving_example run-example run-tutorial run-moving_example py-example py-texample py-smayonnaise pip_install