-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathMakefile
115 lines (81 loc) · 4.18 KB
/
Makefile
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
###############################################################################
# Topo
# Multi-platform system topology abstraction library.
###############################################################################
# Authored by Samuel Grossman
# Department of Electrical Engineering, Stanford University
# Copyright (c) 2016-2017
###############################################################################
# Makefile
# Build script for GNU-compatible Linux operating systems.
###############################################################################
# --------- PROJECT PROPERTIES ------------------------------------------------
PROJECT_NAME = topo
PLATFORM_NAME = linux
SOURCE_DIR = source
INCLUDE_DIR = include
OUTPUT_BASE_DIR = output
OUTPUT_DOCS_DIR = $(OUTPUT_BASE_DIR)/docs
OUTPUT_DIR = $(OUTPUT_BASE_DIR)/$(PLATFORM_NAME)
OUTPUT_FILE = lib$(PROJECT_NAME).a
INTERMEDIATE_DIR = $(OUTPUT_DIR)/build
C_SOURCE_SUFFIX = .c
CXX_SOURCE_SUFFIX = .cpp
ASSEMBLY_SOURCE_SUFFIX = .s
# --------- TOOL SELECTION AND CONFIGURATION ----------------------------------
CC = gcc
CXX = g++
AR = ar
CCFLAGS = -O3 -Wall -fPIC -std=c11 -march=core-avx-i -mno-vzeroupper -I$(INCLUDE_DIR) -D_GNU_SOURCE
CXXFLAGS = -O3 -Wall -fPIC -std=c++0x -march=core-avx-i -mno-vzeroupper -I$(INCLUDE_DIR)
ARFLAGS =
# --------- FILE ENUMERATION --------------------------------------------------
OBJECT_FILE_SUFFIX = .o
DEP_FILE_SUFFIX = .d
C_SOURCE_FILES = $(filter-out $(wildcard $(SOURCE_DIR)/*-*$(C_SOURCE_SUFFIX)), $(wildcard $(SOURCE_DIR)/*$(C_SOURCE_SUFFIX))) $(wildcard $(SOURCE_DIR)/*-$(PLATFORM_NAME)$(C_SOURCE_SUFFIX))
CXX_SOURCE_FILES = $(filter-out $(wildcard $(SOURCE_DIR)/*-*$(CXX_SOURCE_SUFFIX)), $(wildcard $(SOURCE_DIR)/*$(CXX_SOURCE_SUFFIX))) $(wildcard $(SOURCE_DIR)/*-$(PLATFORM_NAME)$(CXX_SOURCE_SUFFIX))
ALL_SOURCE_FILES = $(C_SOURCE_FILES) $(CXX_SOURCE_FILES)
OBJECT_FILES_FROM_SOURCE = $(patsubst $(SOURCE_DIR)/%, $(INTERMEDIATE_DIR)/%$(OBJECT_FILE_SUFFIX), $(ALL_SOURCE_FILES))
DEP_FILES_FROM_SOURCE = $(patsubst $(SOURCE_DIR)/%, $(INTERMEDIATE_DIR)/%$(DEP_FILE_SUFFIX), $(ALL_SOURCE_FILES))
# --------- TOP-LEVEL RULE CONFIGURATION --------------------------------------
.PHONY: topo docs clean help
# --------- TARGET DEFINITIONS ------------------------------------------------
topo: $(OUTPUT_DIR)/$(OUTPUT_FILE)
docs: | $(OUTPUT_DOCS_DIR)
@doxygen
help:
@echo ''
@echo 'Usage: make [target]'
@echo ''
@echo 'Targets:'
@echo ' topo'
@echo ' Default target.'
@echo ' Builds Topo as a static library.'
@echo ' docs'
@echo ' Builds HTML and LaTeX documentation using Doxygen.'
@echo ' clean'
@echo ' Removes all output files, including binary and documentation.'
@echo ' help'
@echo ' Shows this information.'
@echo ''
# --------- BUILDING AND CLEANING RULES ---------------------------------------
$(OUTPUT_DIR)/$(OUTPUT_FILE): $(OBJECT_FILES_FROM_SOURCE)
@echo ' AR $@'
@$(AR) $(ARFLAGS) rcs $@ $^
@echo 'Build completed: $(PROJECT_NAME).'
clean:
@echo ' RM $(OUTPUT_BASE_DIR)'
@rm -rf $(OUTPUT_BASE_DIR)
@echo 'Clean completed: $(PROJECT_NAME).'
# --------- COMPILING AND ASSEMBLING RULES ------------------------------------
$(INTERMEDIATE_DIR):
@mkdir -p $(INTERMEDIATE_DIR)
$(OUTPUT_DOCS_DIR):
@mkdir -p $(OUTPUT_DOCS_DIR)
$(INTERMEDIATE_DIR)/%$(C_SOURCE_SUFFIX)$(OBJECT_FILE_SUFFIX): $(SOURCE_DIR)/%$(C_SOURCE_SUFFIX) | $(INTERMEDIATE_DIR)
@echo ' CC $@'
@$(CC) $(CCFLAGS) -MD -MP -c -o $@ -Wa,-adhlms=$(patsubst %$(OBJECT_FILE_SUFFIX),%$(ASSEMBLY_SOURCE_SUFFIX),$@) $<
$(INTERMEDIATE_DIR)/%$(CXX_SOURCE_SUFFIX)$(OBJECT_FILE_SUFFIX): $(SOURCE_DIR)/%$(CXX_SOURCE_SUFFIX) | $(INTERMEDIATE_DIR)
@echo ' CXX $@'
@$(CXX) $(CXXFLAGS) -MD -MP -c -o $@ -Wa,-adhlms=$(patsubst %$(OBJECT_FILE_SUFFIX),%$(ASSEMBLY_SOURCE_SUFFIX),$@) $<
-include $(DEP_FILES_FROM_SOURCE)