forked from justellie/ProyectoSO
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmakefile
124 lines (102 loc) · 4.61 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
119
120
121
122
123
# ------------------------------------------------------------------
# Elige la extensión del ejecutable según el Sistema Operativo:
# (para el caso en el que se utilice la librería pthread en windows)
#
# Colores: Azul(BL), Rojo(RL), Verde(GL)
# Reiniciar Color(RE). Sólo en Unix/Linux.
BL := \u001b[38;5;32m
RL := \u001b[38;5;9m
GL := \u001b[38;5;10m
RE := \u001b[0m
# ------------------------------------------------------------------
# COMMON -> -lm: enlaza librería matemática,
# -lrt: enlaza con la librería de temporizadores a tiempo real.
# Variables de compilación
CC := gcc
DEBUG := -g -O0 -Wall
COMMON := -pthread $(DEBUG) -lm -lrt --std=gnu99
LIBFLG := -c
TARGET := proyecto.out
TYPES := Tipos
OBJS := RefQueue.o RefMap.o definiciones.o main.o
EXAMPL := ejemplos
TXAMPL := $(TYPES)/$(EXAMPL)
ACTORS := $(wildcard actor_*.c)
OCTORS := $(ACTORS:%.c=%.o)
.PHONY: all
# TODO: Agregar los objetos generados por definiciones y actores
all: refmap generic-queue definiciones actores
@echo -e "$(BL) [@] Generando archivo principal $(GL)($(TARGET))$(BL)...$(RE)"
@echo -e "$(RL)$(OCTORS)$(RE)"
$(CC) $(LIBFLG) -c main.c definiciones.h actores.h $(COMMON)
$(CC) $(OBJS) $(OCTORS) -o $(TARGET) $(COMMON)
run:
@echo -e "$(BL) [|>] Ejecutando Programa...$(RE)"
@command ./$(TARGET)
@echo -e "$(GL)Hecho\n$(RE)"
force: clean-all all
# ------------------------------------------------------
# Crea los archivos de definiciones:
definiciones: refmap generic-queue
@echo -e "$(BL) [D] Generando $(GL)definiciones$(BL): $(RE)"
$(CC) $(LIBFLG) definiciones.c definiciones.h $(COMMON)
@echo -e "$(GL)Hecho\n$(RE)"
# ------------------------------------------------------
# Crea los actores de definiciones:
actores: definiciones refmap generic-queue
@echo -e "$(BL) [D] Generando $(GL)actores$(BL): $(RE)"
$(CC) $(LIBFLG) $(ACTORS) $(COMMON)
@echo -e "$(GL)Hecho\n$(RE)"
# ------------------------------------------------------
# Genera casos de pruebas para los tipos de datos:
tests: queue-tests refmap-tests
# Genera los casos de prueba para el tipo "Cola de Referencias":
queue-tests: generic-queue
@echo -e "$(BL) [Q] Generando ejemplos de uso para la $(GL)Cola de Referencias$(RE)"
$(CC) $(TXAMPL)/simple_queue-long.c RefQueue.o -o $(TXAMPL)/simple_queue-long.out $(COMMON)
$(CC) $(TXAMPL)/simple_queue.c RefQueue.o -o $(TXAMPL)/simple_queue.out $(COMMON)
$(CC) $(TXAMPL)/shared_queue.c RefQueue.o -o $(TXAMPL)/shared_queue.out $(COMMON)
$(CC) $(TXAMPL)/quick_shared_queue.c RefQueue.o -o $(TXAMPL)/quick_shared_queue.out $(COMMON)
$(CC) $(TXAMPL)/tryget_queue.c RefQueue.o -o $(TXAMPL)/tryget_queue.out $(COMMON)
@echo -e "$(GL)Hecho\n$(RE)"
# Genera los casos de prueba para el tipo "Mapa de Referencias":
refmap-tests: refmap
@echo -e "$(BL) [M] Generando ejemplos de uso para el $(GL)Mapa de Referencias$(RE)"
$(CC) $(TXAMPL)/refmap-allocate.c RefMap.o -o $(TXAMPL)/refmap-allocate.out $(COMMON)
$(CC) $(TXAMPL)/refmap-debug.c RefMap.o -o $(TXAMPL)/refmap-debug.out $(COMMON)
$(CC) $(TXAMPL)/refmap-debug-max.c RefMap.o -o $(TXAMPL)/refmap-debug-max.out $(COMMON)
@echo -e "$(GL)Hecho\n$(RE)"
# ------------------------------------------------------
misc-tests:
@echo -e "$(BL) [?] Pruebas $(GL)Misceláneas$(BL)$(RE)"
$(CC) $(TXAMPL)/signals.c -o $(TXAMPL)/signals.out $(COMMON)
$(CC) $(TXAMPL)/timers.c -o $(TXAMPL)/timers.out $(COMMON)
$(CC) $(TXAMPL)/fin-cond.c -o $(TXAMPL)/fin-cond.out $(COMMON)
@echo -e "$(GL)Hecho\n$(RE)"
# ------------------------------------------------------
# Genera los Archivos Objetos de los Tipos de datos:
# >>> Los .o se generan en el archivo raíz.
# Ejemplo: compilar ./$(TYPES)/RefQueue.c --> genera --> ./RefQueue.o
generic-queue:
@echo -e "$(BL) [Q] Creando $(GL)RefQueue$(BL):$(RE)"
$(CC) $(LIBFLG) $(TYPES)/RefQueue.c $(TYPES)/RefQueue.h $(COMMON)
refmap:
@echo -e "$(BL) [M] Creando $(GL)RefMap$(BL):$(RE)"
$(CC) $(LIBFLG) $(TYPES)/RefMap.c $(TYPES)/RefMap.h $(COMMON)
# ------------------------------------------------------
# ------------------------------------------------------
# Métodos para limpiar los rastros de las compilaciones:
clean-all: clean-types clean-root
@echo -e "$(GL)Hecho\n$(RE)"
# Limpieza:
clean-types:
@echo -e "$(RL)[!] Eliminando archivos ejecutables de $(TXAMPL)$(RE)"
rm -f $(TXAMPL)/*.out
@echo -e "$(RL)[!] Eliminando archivos objetos de $(TYPES)$(RE)"
rm -f $(TYPES)/*.h.gch
@echo
clean-root:
@echo -e "$(RL)[!] Eliminando archivos objetos de ./$(RE)"
rm -f *.o *.h.gch
@echo
# --------------------------------------------------------------------