]> wirehaze git hosting - ppos.git/blob - ppos/makefile

wirehaze git hosting

tasks implementation (ongoing)
[ppos.git] / ppos / makefile
1 # PingPongOS - PingPong Operating System
2 # Prof. Carlos A. Maziero, DINF UFPR
3 # Versão 2.0 -- Junho de 2025
4
5 # ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
6 # ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
7
8 # flags de compilação e ligação
9 CC = gcc
10 CPPFLAGS =
11 CFLAGS = -std=c99 -Wall -Wextra -O0 -g -Wno-unused-function -Wno-unused-parameter
12 LDFLAGS = -z noexecstack
13 LDLIBS = -lrt -lm
14 export CC CPPFLAGS CFLAGS LDFLAGS LDLIBS
15
16 # arquivo .tgz para envio
17 TGZ = ppos-${USER}.tgz
18
19 # estes alvos não são arquivos
20 .PHONY: all help debug clean purge hardware lib kernel
21
22 # regra default
23 help:
24 @echo "Makefile para compilação do PPOS"
25 @echo "Uso:"
26 @echo " make p1 : compila o projeto p1 (idem para p2, ...)"
27 @echo " make debug p1 : idem, com o flag -DDEBUG"
28 @echo " make all : compila todos os projetos"
29 @echo " make clean : remove objetos e backups"
30 @echo " make purge : remove objetos, backups e executáveis"
31 @echo " make tgz : gera um arquivo .tgz para entrega"
32
33 # compila o hardware virtual, bibliotecas e kernel
34 hardware kernel lib:
35 @echo "=== Compilando $@ ==="
36 -test -s $@/makefile && $(MAKE) -C $@
37
38 # ativa modo de depuração
39 debug:
40 $(eval CPPFLAGS += -DDEBUG)
41
42 # programas de teste de cada projeto
43 P1 = pingpong-task1 pingpong-task2 pingpong-task3
44 P2 = pingpong-dispatcher
45 P3 = pingpong-scheduler
46 P4 = pingpong-preempcao
47 P5 = pingpong-contab pingpong-contab-prio pingpong-contab-stress
48 P6 = pingpong-wait pingpong-wait-stress
49 P7 = pingpong-sleep
50 P8 = pingpong-semaphore pingpong-semaphore-stress
51 P9 = pingpong-prodcons
52 P10 = pingpong-mqueue
53 P11 = pingpong-memoria pingpong-mqueue
54 P12 = pingpong-disco pingpong-disco-stress
55 P13 = pingpong-disco-stress
56 P14 = pingpong-cache-on pingpong-cache-off
57
58 BIN = $(P1) $(P2) $(P3) $(P4) $(P5) $(P6) $(P7) $(P8) \
59 $(P9) $(P10) $(P11) $(P12) $(P13) $(P14)
60
61 # compila todos os projetos
62 all: p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14
63
64 # alvos: testes de cada projeto (como criar uma receita genérica aqui?)
65 p1: $(P1)
66 p2: $(P2)
67 p3: $(P3)
68 p4: $(P4)
69 p5: $(P5)
70 p6: $(P6)
71 p7: $(P7)
72 p8: $(P8)
73 p9: $(P9)
74 p10: $(P10)
75 p11: $(P11)
76 p12: $(P12)
77 p13: $(P13)
78 p14: $(P14)
79
80 # compila e liga um programa de teste ping*
81 ping%: hardware kernel lib
82 @echo "=== Compilando $@ ==="
83 $(MAKE) -C test $@
84 @echo "=== Ligando $@ ==="
85 $(eval OBJS = $(wildcard hardware/*.o kernel/*.o lib/*.o))
86 $(CC) $(LDFLAGS) $(OBJS) test/$@.o -o $@ $(LDLIBS)
87
88 # limpa arquivos temporários
89 clean:
90 -rm -f *.o *~ */*.o */*~
91
92 # reinicia o conteúdo do disco virtual
93 disk-reset:
94 -test -s hardware/makefile && $(MAKE) -C hardware reset
95
96 # limpa tudo, deixa só o o código-fonte
97 purge: clean disk-reset
98 -rm -f $(BIN) $(TGZ)
99
100 # gera arquivo .tgz para entrega
101 tgz: purge
102 -rm -f $(TGZ)
103 -tar --ignore-failed-read -czvf $(TGZ) lib/ kernel/ test/$(P9).c
104 @echo ""
105 @echo "Arquivo $(TGZ) pronto para entrega"