1 # PingPongOS - PingPong Operating System
2 # Prof. Carlos A. Maziero, DINF UFPR
3 # Versão 2.0 -- Junho de 2025
5 # ATENÇÃO: ESTE ARQUIVO NÃO DEVE SER ALTERADO;
6 # ALTERAÇÕES SERÃO DESCARTADAS NA CORREÇÃO.
8 # flags de compilação e ligação
11 CFLAGS = -std=c99 -Wall -Wextra -O0 -g -Wno-unused-function -Wno-unused-parameter
12 LDFLAGS = -z noexecstack
14 export CC CPPFLAGS CFLAGS LDFLAGS LDLIBS
16 # arquivo .tgz para envio
17 TGZ = ppos-${USER}.tgz
19 # estes alvos não são arquivos
20 .PHONY: all help debug clean purge hardware lib kernel
24 @echo "Makefile para compilação do PPOS"
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"
33 # compila o hardware virtual, bibliotecas e kernel
35 @echo "=== Compilando $@ ==="
36 -test -s $@/makefile && $(MAKE) -C $@
38 # ativa modo de depuração
40 $(eval CPPFLAGS += -DDEBUG)
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
50 P8 = pingpong-semaphore pingpong-semaphore-stress
51 P9 = pingpong-prodcons
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
58 BIN = $(P1) $(P2) $(P3) $(P4) $(P5) $(P6) $(P7) $(P8) \
59 $(P9) $(P10) $(P11) $(P12) $(P13) $(P14)
61 # compila todos os projetos
62 all: p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14
64 # alvos: testes de cada projeto (como criar uma receita genérica aqui?)
80 # compila e liga um programa de teste ping*
81 ping%: hardware kernel lib
82 @echo "=== Compilando $@ ==="
84 @echo "=== Ligando $@ ==="
85 $(eval OBJS = $(wildcard hardware/*.o kernel/*.o lib/*.o))
86 $(CC) $(LDFLAGS) $(OBJS) test/$@.o -o $@ $(LDLIBS)
88 # limpa arquivos temporários
90 -rm -f *.o *~ */*.o */*~
92 # reinicia o conteúdo do disco virtual
94 -test -s hardware/makefile && $(MAKE) -C hardware reset
96 # limpa tudo, deixa só o o código-fonte
97 purge: clean disk-reset
100 # gera arquivo .tgz para entrega
103 -tar --ignore-failed-read -czvf $(TGZ) lib/ kernel/ test/$(P9).c
105 @echo "Arquivo $(TGZ) pronto para entrega"