|
1 | 1 | all: clusty
|
2 | 2 |
|
3 |
| - |
4 |
| -#################### |
5 |
| - |
6 |
| -ifdef MSVC # Avoid the MingW/Cygwin sections |
7 |
| - uname_S := Windows |
8 |
| -else # If uname not available => 'not' |
9 |
| - uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not') |
10 |
| - uname_M := $(shell sh -c 'uname -m 2>/dev/null || echo not') |
11 |
| -endif |
12 |
| - |
13 |
| -ifeq ($(uname_S),Linux) |
14 |
| - # check if CPU supports AVX2 |
15 |
| -# HAVE_AVX2 = $(filter-out 0,$(shell grep avx2 /proc/cpuinfo | wc -l)) |
16 |
| -# OMP_FLAGS = -fopenmp |
17 |
| - ABI_FLAGS = -fabi-version=6 |
18 |
| - MIMALLOC_OBJ=libs/mimalloc/mimalloc.o |
19 |
| -endif |
20 |
| -ifeq ($(uname_S),Darwin) |
21 |
| - # check if CPU supports SSE4.2 |
22 |
| -# HAVE_AVX2 = $(filter-out 0,$(shell sysctl -n machdep.cpu.features machdep.cpu.leaf7_features| grep AVX2 - | wc -l)) |
23 |
| -# OMP_FLAGS = -Xpreprocessor -fopenmp |
24 |
| - ABI_FLAGS = |
25 |
| - MIMALLOC_OBJ= |
26 |
| -endif |
27 |
| - |
28 |
| - |
29 |
| -ifeq ($(PLATFORM), arm8) |
30 |
| -$(info *** ARMv8 with NEON extensions ***) |
31 |
| - ARCH_FLAGS := -march=armv8-a -DARCH_ARM |
32 |
| -else ifeq ($(PLATFORM), m1) |
33 |
| -$(info *** Apple M1(or never) with NEON extensions ***) |
34 |
| - ARCH_FLAGS := -march=armv8.4-a -DARCH_ARM |
35 |
| -else ifeq ($(PLATFORM), sse2) |
36 |
| -$(info *** x86-64 with SSE2 extensions ***) |
37 |
| - ARCH_FLAGS := -msse2 -m64 -DARCH_X64 |
38 |
| -else ifeq ($(PLATFORM), avx) |
39 |
| -$(info *** x86-64 with AVX extensions ***) |
40 |
| - ARCH_FLAGS := -mavx -m64 -DARCH_X64 |
41 |
| -else ifeq ($(PLATFORM), avx2) |
42 |
| -$(info *** x86-64 with AVX2 extensions ***) |
43 |
| - ARCH_FLAGS := -mavx2 -m64 -DARCH_X64 |
| 3 | +# *** REFRESH makefile utils |
| 4 | +include refresh.mk |
| 5 | + |
| 6 | +$(call INIT_SUBMODULES) |
| 7 | +$(call INIT_GLOBALS) |
| 8 | +$(call CHECK_OS_ARCH, $(PLATFORM)) |
| 9 | + |
| 10 | +# *** Project directories |
| 11 | +$(call SET_SRC_OBJ_BIN,src,obj,bin) |
| 12 | +3RD_PARTY_DIR := ./libs |
| 13 | + |
| 14 | +# *** Project configuration |
| 15 | +$(call ADD_MIMALLOC, $(3RD_PARTY_DIR)/mimalloc) |
| 16 | +#$(call ADD_REFRESH_LIB, $(3RD_PARTY_DIR)) |
| 17 | +$(call SET_STATIC, $(STATIC_LINK)) |
| 18 | +$(call SET_C_CPP_STANDARDS, c11, c++17) |
| 19 | +$(call SET_GIT_COMMIT) |
| 20 | + |
| 21 | +ifeq ($(LEIDEN),true) |
| 22 | +$(call ADD_IGRAPH, $(3RD_PARTY_DIR)/igraph) |
44 | 23 | else
|
45 |
| -$(info *** Unspecified platform - use native compilation) |
46 |
| - ifeq ($(uname_M),x86_64) |
47 |
| - ARCH_FLAGS := -march=native -DARCH_X64 |
48 |
| - else |
49 |
| - ARCH_FLAGS := -march=native -DARCH_ARM |
50 |
| - endif |
| 24 | +DEFINE_FLAGS += -DNO_LEIDEN |
51 | 25 | endif
|
52 | 26 |
|
| 27 | +$(call SET_FLAGS, $(TYPE)) |
53 | 28 |
|
54 |
| -GIT_COMMIT = $(shell git describe --always --dirty) |
55 |
| - |
56 |
| -##################### |
57 |
| -ROOT_DIR = . |
58 |
| -MAIN_DIR = src |
59 |
| -INCLUDES = -I libs/mimalloc/include |
60 |
| -DEFINE_FLAGS := -DGIT_COMMIT=$(GIT_COMMIT) |
| 29 | +$(call SET_COMPILER_VERSION_ALLOWED, GCC, Linux_x86_64, 10, 20) |
| 30 | +$(call SET_COMPILER_VERSION_ALLOWED, GCC, Linux_aarch64, 11, 20) |
| 31 | +$(call SET_COMPILER_VERSION_ALLOWED, GCC, Darwin_x86_64, 11, 13) |
| 32 | +$(call SET_COMPILER_VERSION_ALLOWED, GCC, Darwin_arm64, 11, 13) |
61 | 33 |
|
62 |
| -ifeq ($(LEIDEN), true) |
63 |
| - INCLUDES += -I ./libs/igraph/include -I ./libs/igraph/build/include |
64 |
| - LIB_IGRAPH = ./libs/igraph/build/src/libigraph.a |
65 |
| -else |
66 |
| - DEFINE_FLAGS += -DNO_LEIDEN |
| 34 | +ifneq ($(MAKECMDGOALS),clean) |
| 35 | +$(call CHECK_COMPILER_VERSION) |
67 | 36 | endif
|
68 | 37 |
|
| 38 | +# *** Source files and rules |
| 39 | +$(eval $(call PREPARE_DEFAULT_COMPILE_RULE,MAIN,.)) |
69 | 40 |
|
70 |
| -ifeq ($(DYNAMIC_LINK), true) |
71 |
| - CFLAGS = -Wall -O3 $(ARCH_FLAGS) -std=c++17 $(DEFINE_FLAGS) $(INCLUDES) -pthread |
72 |
| - CLINK = -lm -O3 -std=c++17 -pthread $(ABI_FLAGS) |
73 |
| -else |
74 |
| -ifeq ($(uname_S),Darwin) |
75 |
| - CFLAGS = -Wall -O3 $(ARCH_FLAGS) -std=c++17 $(DEFINE_FLAGS) $(INCLUDES) |
76 |
| - CLINK = -lm -O3 -std=c++17 $(ABI_FLAGS) -static-libgcc |
77 |
| -else |
78 |
| - CFLAGS = -Wall -O3 $(ARCH_FLAGS) -std=c++17 $(DEFINE_FLAGS) $(INCLUDES) -static -Wl,--whole-archive -lpthread -Wl,--no-whole-archive |
79 |
| - CLINK = -lm -static -O3 -std=c++17 $(ABI_FLAGS) -Wl,--whole-archive -lpthread -Wl,--no-whole-archive |
80 |
| -endif |
81 |
| -endif |
82 |
| - |
83 |
| - |
84 |
| - |
85 |
| -CMAKE_OSX_SYSROOT_FLAG = |
86 |
| -ifeq ($(uname_S),Darwin) |
87 |
| - SDK_PATH := $(shell $(CXX) -v 2>&1 | grep -- '--with-sysroot' | sed -E 's/.*--with-sysroot=([^ ]+).*/\1/') |
88 |
| - CMAKE_OSX_SYSROOT_FLAG := -DCMAKE_OSX_SYSROOT=$(SDK_PATH) |
89 |
| -endif |
90 |
| - |
91 |
| -ifeq ($(LEIDEN), true) |
92 |
| -igraph: |
93 |
| - mkdir libs/igraph/build |
94 |
| - cmake $(CMAKE_OSX_SYSROOT_FLAG) -DIEEE754_DOUBLE_ENDIANNESS_MATCHES=TRUE -DCMAKE_C_COMPILER=$(CC) -DCMAKE_CXX_COMPILER=$(CXX) -S libs/igraph -B libs/igraph/build |
95 |
| - cmake $(CMAKE_OSX_SYSROOT_FLAG) -DIEEE754_DOUBLE_ENDIANNESS_MATCHES=TRUE -DCMAKE_C_COMPILER=$(CC) -DCMAKE_CXX_COMPILER=$(CXX) -S libs/igraph -B libs/igraph/build |
96 |
| - cmake --build libs/igraph/build |
97 |
| -else |
98 |
| -igraph: |
99 |
| - |
100 |
| -endif |
101 |
| - |
102 |
| - |
103 |
| -$(MIMALLOC_OBJ): |
104 |
| - $(CC) -DMI_MALLOC_OVERRIDE -O3 -DNDEBUG -fPIC -Wall -Wextra -Wno-unknown-pragmas -fvisibility=hidden -Wstrict-prototypes -ftls-model=initial-exec -fno-builtin-malloc -std=gnu11 -c -I libs/mimalloc/include libs/mimalloc/src/static.c -o $(MIMALLOC_OBJ) |
105 |
| - |
106 |
| - |
107 |
| - |
108 |
| -OBJS := \ |
| 41 | +# *** Targets |
| 42 | +clusty: $(OUT_BIN_DIR)/clusty |
| 43 | +$(OUT_BIN_DIR)/clusty: mimalloc_obj \ |
| 44 | + $(OBJ_MAIN) |
| 45 | + -mkdir -p $(OUT_BIN_DIR) |
| 46 | + $(CXX) -o $@ \ |
109 | 47 | $(MIMALLOC_OBJ) \
|
110 |
| - $(MAIN_DIR)/console.o \ |
111 |
| - $(MAIN_DIR)/conversion.o \ |
112 |
| - $(MAIN_DIR)/graph.o \ |
113 |
| - $(MAIN_DIR)/log.o \ |
114 |
| - $(MAIN_DIR)/main.o \ |
115 |
| - $(MAIN_DIR)/params.o \ |
| 48 | + $(OBJ_MAIN) \ |
| 49 | + $(LIBRARY_FILES) $(LINKER_FLAGS) $(LINKER_DIRS) |
116 | 50 |
|
117 |
| -%.o: %.cpp igraph |
118 |
| - $(CXX) $(CFLAGS) -c $< -o $@ |
| 51 | +# *** Cleaning |
| 52 | +.PHONY: clean init |
| 53 | +clean: clean-zlib-ng clean-isa-l clean-mimalloc_obj clean-igraph |
| 54 | + -rm -r $(OBJ_DIR) |
| 55 | + -rm -r $(OUT_BIN_DIR) |
119 | 56 |
|
120 |
| -clusty: $(OBJS) |
121 |
| - $(CXX) $(CLINK) $(LDFLAGS) -o $(ROOT_DIR)/$@ $(OBJS) $(LIB_IGRAPH) |
| 57 | +init: |
| 58 | + $(call INIT_SUBMODULES) |
122 | 59 |
|
123 |
| -clean: |
124 |
| - -rm $(MAIN_DIR)/*.o |
125 |
| - -rm $(MIMALLOC_OBJ) |
126 |
| - -rm clusty |
127 |
| - -rm -r libs/igraph/build |
128 |
| - |
0 commit comments