-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
82 lines (65 loc) · 2.09 KB
/
Makefile
File metadata and controls
82 lines (65 loc) · 2.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# Makefile for Fast JPEG Decoder
# Compiler settings
CXX = g++
CXXFLAGS = -std=c++11 -O3 -Wall -fPIC
INCLUDES = -Isrc/cpp
# Python settings
PYTHON = python3
PYTHON_CONFIG = python3-config
PYTHON_INCLUDES = $(shell $(PYTHON_CONFIG) --includes)
PYTHON_LDFLAGS = $(shell $(PYTHON_CONFIG) --ldflags)
# pybind11 settings
PYBIND11_INCLUDES = $(shell $(PYTHON) -m pybind11 --includes)
# Source files
CPP_SOURCES = src/cpp/bitstream.cpp \
src/cpp/idct.cpp \
src/cpp/huffman.cpp \
src/cpp/decoder.cpp
BINDING_SOURCES = src/bindings/bindings.cpp
# Object files
CPP_OBJECTS = $(CPP_SOURCES:.cpp=.o)
BINDING_OBJECTS = $(BINDING_SOURCES:.cpp=.o)
# Output
EXTENSION_SUFFIX = $(shell $(PYTHON_CONFIG) --extension-suffix)
TARGET = src/python/fast_jpeg_decoder/_fast_jpeg_decoder$(EXTENSION_SUFFIX)
# Targets
.PHONY: all clean install test develop
all: $(TARGET)
# Build Python extension
$(TARGET): $(CPP_OBJECTS) $(BINDING_OBJECTS)
$(CXX) -shared -fPIC $(CXXFLAGS) $^ -o $@ $(PYTHON_LDFLAGS)
# Build C++ objects
src/cpp/%.o: src/cpp/%.cpp
$(CXX) $(CXXFLAGS) $(INCLUDES) -c $< -o $@
# Build binding objects
src/bindings/%.o: src/bindings/%.cpp
$(CXX) $(CXXFLAGS) $(INCLUDES) $(PYTHON_INCLUDES) $(PYBIND11_INCLUDES) -c $< -o $@
# Install package
install: all
$(PYTHON) setup.py install
# Develop mode (editable install)
develop: all
$(PYTHON) -m pip install -e .
# Run tests
test: develop
$(PYTHON) -m pytest tests/ -v
# Clean build artifacts
clean:
rm -f $(CPP_OBJECTS) $(BINDING_OBJECTS)
rm -f $(TARGET)
rm -rf build/ dist/ *.egg-info
rm -rf src/python/fast_jpeg_decoder/*.so
rm -rf src/python/fast_jpeg_decoder/*.pyd
find . -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true
find . -type f -name "*.pyc" -delete
# Help
help:
@echo "Fast JPEG Decoder - Makefile"
@echo ""
@echo "Targets:"
@echo " all - Build the Python extension (default)"
@echo " install - Install the package"
@echo " develop - Install in development mode (editable)"
@echo " test - Run tests"
@echo " clean - Remove build artifacts"
@echo " help - Show this help message"