This repository has been archived by the owner on Nov 8, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
119 lines (97 loc) · 3.52 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
116
117
118
# ============================================================================
# Makefile for *NIX.
#
# AUDIOSIM: AUDIO Interface SIMulator.
# Copyright (C) 2013, Tyler J. Stachecki.
# All rights reserved.
#
# This file is subject to the terms and conditions defined in
# file 'LICENSE', which is part of this source code package.
# ============================================================================
TARGET = libaudio.a
# ============================================================================
# A list of files to link into the library.
# ============================================================================
SOURCES := $(wildcard *.c)
ifeq ($(OS),windows)
OBJECTS = $(addprefix $(OBJECT_DIR)\, $(notdir $(SOURCES:.c=.o)))
else
OBJECTS = $(addprefix $(OBJECT_DIR)/, $(notdir $(SOURCES:.c=.o)))
endif
# =============================================================================
# Build variables and settings.
# =============================================================================
OBJECT_DIR=Objects
# ============================================================================
# Build rules and flags.
# ============================================================================
BLUE=$(shell tput setaf 4)
PURPLE=$(shell tput setaf 5)
TEXTRESET=$(shell tput sgr0)
YELLOW=$(shell tput setaf 3)
ECHO=/usr/bin/printf "%s\n"
MKDIR = /bin/mkdir -p
ifeq ($(OS),windows)
CC=gcc.exe
CXX=g++.exe
BLUE=
PURPLE=
TEXTRESET=
YELLOW=
ECHO=echo
MAYBE=if not exist
MKDIR=mkdir
RM=del /q /s 1>NUL 2>NUL
endif
AR = ar
DOXYGEN = doxygen
AUDIO_FLAGS =
WARNINGS = -Wall -Wextra -pedantic
COMMON_CFLAGS = $(WARNINGS) $(AUDIO_FLAGS) -std=c99 -march=native -I. -I../include
COMMON_CXXFLAGS = $(WARNINGS) $(AUDIO_FLAGS) -std=c++0x -march=native -I. -I../include
OPTIMIZATION_FLAGS = -flto -fuse-linker-plugin -fdata-sections \
-ffunction-sections -funsafe-loop-optimizations
ARFLAGS = rcs
RELEASE_CFLAGS = -DNDEBUG -O3 $(OPTIMIZATION_FLAGS)
DEBUG_CFLAGS = -DDEBUG -O0 -ggdb -g3
# ============================================================================
# Build targets.
# ============================================================================
.PHONY: all all-cpp clean debug debug-cpp
all: CFLAGS = $(COMMON_CFLAGS) $(RELEASE_CFLAGS) $(AUDIO_FLAGS)
all: $(TARGET)
debug: CFLAGS = $(COMMON_CFLAGS) $(DEBUG_CFLAGS) $(AUDIO_FLAGS)
debug: $(TARGET)
all-cpp: CFLAGS = $(COMMON_CXXFLAGS) $(RELEASE_CFLAGS) $(AUDIO_FLAGS)
all-cpp: $(TARGET)
all-cpp: CC = $(CXX)
debug-cpp: CFLAGS = $(COMMON_CXXFLAGS) $(DEBUG_CFLAGS) $(AUDIO_FLAGS)
debug-cpp: $(TARGET)
debug-cpp: CC = $(CXX)
clean:
ifeq ($(OS),windows)
@$(ECHO) $(BLUE)Cleaning libaudio...$(TEXTRESET)
else
@$(ECHO) "$(BLUE)Cleaning libaudio...$(TEXTRESET)"
endif
@$(RM) $(OBJECTS) $(TARGET)
# ============================================================================
# Build rules.
# ============================================================================
ifeq ($(OS),windows)
$(TARGET): $(OBJECTS)
@$(ECHO) $(BLUE)Linking$(YELLOW): $(PURPLE)$(PREFIXDIR)$@$(TEXTRESET)
@$(AR) $(ARFLAGS) $@ $^
$(OBJECT_DIR)\\%.o: %.c %.h Common.h
@$(MAYBE) $(OBJECT_DIR) $(MKDIR) $(OBJECT_DIR)
@$(ECHO) $(BLUE)Compiling$(YELLOW): $(PURPLE)$(PREFIXDIR)$<$(TEXTRESET)
@$(CC) $(CFLAGS) $< -c -o $@
else
$(TARGET): $(OBJECTS)
@$(ECHO) "$(BLUE)Linking$(YELLOW): $(PURPLE)$(PREFIXDIR)$@$(TEXTRESET)"
@$(AR) $(ARFLAGS) $@ $^
$(OBJECT_DIR)/%.o: %.c %.h Common.h
@$(MKDIR) $(OBJECT_DIR)
@$(ECHO) "$(BLUE)Compiling$(YELLOW): $(PURPLE)$(PREFIXDIR)$<$(TEXTRESET)"
@$(CC) $(CFLAGS) $< -c -o $@
endif