Select Git revision
Nathael CARLIER authored
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