-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathMakefile
More file actions
54 lines (40 loc) · 1.43 KB
/
Copy pathMakefile
File metadata and controls
54 lines (40 loc) · 1.43 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
PRIV_DIR := $(MIX_APP_PATH)/priv
NIF_SO := $(PRIV_DIR)/libemily.so
MLX_STAGE_DIR := $(PRIV_DIR)/mlx/lib
BUILD_DIR := $(EMILY_CACHE_DIR)/build-$(EMILY_VERSION)
# Sources
SOURCES := $(wildcard c_src/*.cpp)
HEADERS := $(wildcard c_src/*.h) $(wildcard c_src/*.hpp)
OBJECTS := $(patsubst c_src/%.cpp,$(BUILD_DIR)/%.o,$(SOURCES))
# Flags
CXXFLAGS := -std=c++17 -O3 -fPIC -fvisibility=hidden -Wall -Wextra
CXXFLAGS += -I$(ERTS_INCLUDE_DIR)
# Third-party headers: use -isystem so warnings inside them (e.g. MLX's
# -Wdeprecated-copy on _MLX_BFloat16) don't clutter our builds or trip
# -Werror.
CXXFLAGS += -isystem $(FINE_INCLUDE_DIR) -isystem $(MLX_INCLUDE_DIR)
LDFLAGS := -L$(MLX_LIB_DIR) -lmlx -shared
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Darwin)
LDFLAGS += -undefined dynamic_lookup -flat_namespace -rpath @loader_path/mlx/lib
JOBS := $(shell sysctl -n hw.ncpu)
else
LDFLAGS += -Wl,-rpath,'$$ORIGIN/mlx/lib'
JOBS := $(shell nproc)
endif
MAKE_JOBS ?= $(JOBS)
.PHONY: all clean
all: $(NIF_SO)
$(BUILD_DIR):
@mkdir -p $(BUILD_DIR)
$(PRIV_DIR):
@mkdir -p $(PRIV_DIR)
$(BUILD_DIR)/%.o: c_src/%.cpp $(HEADERS) | $(BUILD_DIR)
$(CXX) $(CXXFLAGS) -c $< -o $@
$(MLX_STAGE_DIR): | $(PRIV_DIR)
@mkdir -p $(MLX_STAGE_DIR)
@cp -a $(MLX_LIB_DIR)/. $(MLX_STAGE_DIR)/
$(NIF_SO): $(OBJECTS) $(MLX_STAGE_DIR) | $(PRIV_DIR)
$(CXX) $(OBJECTS) -o $(NIF_SO) $(LDFLAGS)
clean:
rm -rf $(BUILD_DIR) $(NIF_SO) $(PRIV_DIR)/mlx