|
| 1 | +# Makefile for Message Slot Kernel Module and User Applications |
| 2 | +# Builds the kernel module and user-space programs with a single command |
| 3 | + |
| 4 | +# Kernel module object |
| 5 | +obj-m := message_slot.o |
| 6 | + |
| 7 | +# Kernel build directory |
| 8 | +KDIR := /lib/modules/$(shell uname -r)/build |
| 9 | + |
| 10 | +# Current working directory |
| 11 | +PWD := $(shell pwd) |
| 12 | + |
| 13 | +# Source directories |
| 14 | +SRC_DIR := src |
| 15 | +INCLUDE_DIR := include |
| 16 | +USER_APPS_DIR := user_apps |
| 17 | + |
| 18 | +# User-space programs |
| 19 | +USER_PROGS := message_sender message_reader |
| 20 | + |
| 21 | +# Compiler flags for user-space programs |
| 22 | +CFLAGS := -O3 -Wall -std=c11 -I$(INCLUDE_DIR) |
| 23 | + |
| 24 | +.PHONY: all module user_programs clean help |
| 25 | + |
| 26 | +# Default target: build everything |
| 27 | +all: module user_programs |
| 28 | + |
| 29 | +# Build the kernel module |
| 30 | +module: |
| 31 | + @echo "Building kernel module..." |
| 32 | + make -C $(KDIR) M=$(PWD)/$(SRC_DIR) modules |
| 33 | + @cp $(SRC_DIR)/message_slot.ko . |
| 34 | + @echo "Kernel module built successfully: message_slot.ko" |
| 35 | + |
| 36 | +# Build user-space programs |
| 37 | +user_programs: $(addprefix $(USER_APPS_DIR)/, $(USER_PROGS)) |
| 38 | + @echo "User applications built successfully" |
| 39 | + |
| 40 | +$(USER_APPS_DIR)/message_sender: $(USER_APPS_DIR)/message_sender.c $(INCLUDE_DIR)/message_slot.h |
| 41 | + @echo "Building message_sender..." |
| 42 | + gcc $(CFLAGS) -o $(USER_APPS_DIR)/message_sender $(USER_APPS_DIR)/message_sender.c |
| 43 | + |
| 44 | +$(USER_APPS_DIR)/message_reader: $(USER_APPS_DIR)/message_reader.c $(INCLUDE_DIR)/message_slot.h |
| 45 | + @echo "Building message_reader..." |
| 46 | + gcc $(CFLAGS) -o $(USER_APPS_DIR)/message_reader $(USER_APPS_DIR)/message_reader.c |
| 47 | + |
| 48 | +# Clean build artifacts |
| 49 | +clean: |
| 50 | + @echo "Cleaning build artifacts..." |
| 51 | + make -C $(KDIR) M=$(PWD)/$(SRC_DIR) clean |
| 52 | + rm -f $(addprefix $(USER_APPS_DIR)/, $(USER_PROGS)) |
| 53 | + rm -f message_slot.ko |
| 54 | + @echo "Clean complete" |
| 55 | + |
| 56 | +# Help target |
| 57 | +help: |
| 58 | + @echo "Message Slot Build System" |
| 59 | + @echo "=========================" |
| 60 | + @echo "" |
| 61 | + @echo "Targets:" |
| 62 | + @echo " all - Build kernel module and user applications (default)" |
| 63 | + @echo " module - Build only the kernel module" |
| 64 | + @echo " user_programs - Build only the user-space programs" |
| 65 | + @echo " clean - Remove all build artifacts" |
| 66 | + @echo " help - Display this help message" |
| 67 | + @echo "" |
| 68 | + @echo "Directory Structure:" |
| 69 | + @echo " src/ - Kernel module source code" |
| 70 | + @echo " include/ - Header files" |
| 71 | + @echo " user_apps/ - User-space applications" |
| 72 | + @echo "" |
| 73 | + @echo "Build Products:" |
| 74 | + @echo " message_slot.ko - Kernel module (root directory)" |
| 75 | + @echo " user_apps/message_sender - Message sender program" |
| 76 | + @echo " user_apps/message_reader - Message reader program" |
0 commit comments