Skip to content

Instantly share code, notes, and snippets.

@mfrancois3k
Forked from Pacifist117/Makefile
Created December 22, 2022 21:27
Show Gist options
  • Save mfrancois3k/6a56239e729c912c9c3772fac8e07ccc to your computer and use it in GitHub Desktop.
Save mfrancois3k/6a56239e729c912c9c3772fac8e07ccc to your computer and use it in GitHub Desktop.
Litmus
CC = gcc
CFLAGS = -D_GNU_SOURCE -g -Wall -O0
# Common Library and Linking Flags
LIBS = -lrt -lm -lpthread -lchronos
LDFLAGS = -L/usr/lib -L/usr/local/lib -L /usr/realtime/ -L/usr/realtime/lib/
# Common install directories
#INSTALL_DIR = /usr/local/chronos
INSTALL_DIR = /usr/local/lib
# Common source directories and binary files
# The directories to search in for source files for the main executable
SRC = src/*.c
INCLUDE = -I /usr/realtime/include/ -I include/ -I /usr/local/include/librealtime/
# Common object files
# Extensions to use to find files to compile
####################################################################################################################
# IRMOS #
####################################################################################################################
IRMOS_FLAGS=$(CFLAGS) -DKERN_IRMOS
IRMOS_OUT=libs/libirmos_realtime.a
IRMOS_OBJS=obj/librttest_irmos.o
####################################################################################################################
# ChronOS #
####################################################################################################################
CHRONOS_FLAGS=$(CFLAGS) -DKERN_CHRONOS -Wl,-rpath
CHRONOS_LIBS=-lchronos $(LIBS)
CHRONOS_OUT=libs/libchronos_realtime.a
CHRONOS_OBJS=obj/librttest_chronos.o
####################################################################################################################
# Vanilla #
####################################################################################################################
VANILLA_FLAGS=$(CFLAGS) -Wl,-rpath
VANILLA_OUT=libs/librealtime.a
VANILLA_OBJS=obj/librttest_vanilla.o
####################################################################################################################
# Xenomai #
####################################################################################################################
XENOMAI_FLAGS=$(CFLAGS) -DKERN_XENOMAI -Wl,-rpath
XENOMAI_LDFLAGS=$(LDFLAGS) -L/usr/realtime/lib/
XENOMAI_LIBS=$(LIBS) -lxenomai -lpthread_rt
XENOMAI_OUT=libs/libxeno_realtime.a
XENOMAI_OBJS=obj/librttest_xenomai.o
####################################################################################################################
# RTAI #
####################################################################################################################
RTAI_FLAGS=$(CFLAGS) -DKERN_RTAI -Wl,-rpath
RTAI_INCLUDE=$(INCLUDE) -I /usr/realtime/include/
RTAI_LDFLAGS=$(LDFLAGS) -L /usr/realtime/lib/
RTAI_OUT=libs/librtai_realtime.a
RTAI_OBJS=obj/librttest_rtai.o
####################################################################################################################
# Litmus^RT #
####################################################################################################################
LITMUS_FLAGS=$(CFLAGS) -DKERN_LITMUS -Wl,-rpath
LITMUS_INCLUDE=-I /usr/realtime/arch/x86/include/asm/ $(INCLUDE)
LITMUS_LIBS=$(LIBS) -llitmus_realtime -llitmus
LITMUS_OUT=libs/liblitmus_realtime.a
LITMUS_OBJS=obj/librttest_litmus.o
####################################################################################################################
# Preempt-RT #
####################################################################################################################
PREEMPT_FLAGS=$(CFLAGS) -DKERN_PREEMPT
PREEMPT_OUT=libs/libpreempt_realtime.a
PREEMPT_OBJS=obj/librttest_preempt.o
####################################################################################################################
# SCHED_DEADLINE #
####################################################################################################################
SCHED_DEAD_FLAGS=$(CFLAGS) -DKERN_SCHED_DEAD
SCHED_DEAD_OUT=libs/libsched_dead_realtime.a
SCHED_DEAD_OBJS=obj/librttest_sched_dead.o
# List all 'phony' targets
.PHONY: all clean install irmos chronos vanilla xenomai rtai litmus preempt sched_dead
# Delete the default suffixes
.SUFFIXES:
all: $(IRMOS_OUT) $(CHRONOS_OUT) $(VANILLA_OUT) $(XENOMAI_OUT) $(RTAI_OUT) $(LITMUS_OUT) $(PREEMPT_OUT) $(SCHED_DEAD_OUT)
$(IRMOS_OUT):
$(CC) $(INCLUDE) $(IRMOS_LIBS) $(IRMOS_FLAGS) -c $(SRC)
mv *.o obj/irmos/
ar rcs $(IRMOS_OUT) obj/irmos/*.o
$(CHRONOS_OUT):
$(CC) $(INCLUDE) $(CHRONOS_LIBS) $(CHRONOS_FLAGS) -c $(SRC)
mv *.o obj/chronos/
ar rcs $(CHRONOS_OUT) obj/chronos/*.o
$(VANILLA_OUT):
$(CC) $(INCLUDE) $(VANILLA_LIBS) $(VANILLA_FLAGS) -c $(SRC) #-o $(VANILLA_OBJS)
mv *.o obj/vanilla/
ar rcs $(VANILLA_OUT) obj/vanilla/*.o
$(XENOMAI_OUT):
$(CC) $(INCLUDE) $(XENOMAI_LIBS) $(XENOMAI_FLAGS) -c $(SRC) #-o $(XENOMAI_OBJS)
mv *.o obj/xenomai/
ar rcs $(XENOMAI_OUT) obj/xenomai/*.o
$(RTAI_OUT):
$(CC) $(INCLUDE) $(RTAI_LIBS) $(RTAI_FLAGS) -c $(SRC) -o $(RTAI_OBJS)
mv *.o obj/rtai/
ar rcs $(RTAI_OUT) obj/rtai/*.o
$(LITMUS_OUT):
$(CC) $(INCLUDE) $(LITMUS_LIBS) $(LITMUS_FLAGS) -c $(SRC) -o $(LITMUS_OBJS)
mv *.o obj/litmus/
ar rcs $(LITMUS_OUT) obj/litmus/*.o
$(PREEMPT_OUT):
$(CC) $(INCLUDE) $(PREEMPT_LIBS) $(PREEMPT_FLAGS) -c $(SRC) -o $(PREEMPT_OBJS)
mv *.o obj/preempt/
ar rcs $(PREEMPT_OUT) obj/preempt/*.o
$(SCHED_DEAD_OUT):
$(CC) $(INCLUDE) $(SCHED_DEAD_LIBS) $(SCHED_DEAD_FLAGS) -c $(SRC) -o $(SCHED_DEAD_OBJS)
mv *.o obj/sched_dead/
ar rcs $(SCHED_DEAD_OUT) obj/sched_dead/*.o
# Make a specific static libary
irmos: $(IRMOS_OUT)
chronos: $(CHRONOS_OUT)
vanilla: $(VANILLA_OUT)
xenomai: $(XENOMAI_OUT)
rtai: $(RTAI_OUT)
litmus: $(LITMUS_OUT)
preempt: $(PREEMPT_OUT)
sched_dead: $(SCHED_DEAD_OUT)
# Clean all object, dependency, and binary files
%.o-rm:
@echo ' CLEAN $*.o'
@rm -f $*.o
@rm -f $(*D)/.$(*F).d
clean: $(IRMOS_OBJS:%=%-rm) $(VANILLA_OBJS:%=%-rm) $(CHRONOS_OBJS:%=%-rm) $(XENOMAI_OBJS:%=%-rm) $(RTAI_OBJS:%=%-rm) $(LITMUS_OBJS:%=%-rm) $(PREEMPT_OBJS:%=%-rm) $(SCHED_DEAD_OBJS:%=%-rm)
@echo ' CLEAN ' $(IRMOS_OUT)
@rm -f $(IRMOS_OUT)
@echo ' CLEAN ' $(CHRONOS_OUT)
@rm -f $(CHRONOS_OUT)
@echo ' CLEAN ' $(VANILLA_OUT)
@rm -f $(VANILLA_OUT)
@echo ' CLEAN ' $(XENOMAI_OUT)
@rm -f $(XENOMAI_OUT)
@echo ' CLEAN ' $(RTAI_OUT)
@rm -f $(RTAI_OUT)
@echo ' CLEAN ' $(LITMUS_OUT)
@rm -f $(LITMUS_OUT)
@echo ' CLEAN ' $(PREEMPT_OUT)
@rm -f $(PREEMPT_OUT)
@echo ' CLEAN ' $(SCHED_DEAD_OUT)
@rm -f $(SCHED_DEAD_OUT)
# Install the executable in the right place, link to it, and calculate slopes
install: all
@echo ' INSTALL' $(BINARY)
@cp $(BINARY) $(INSTALL_DIR)/$(BINARY)
@echo ' LINK ' $(BIN_DIR)/$(BINARY) '->' $(INSTALL_DIR)/$(BINARY);
@rm -f $(BIN_DIR)/$(BINARY);
@ln -s $(INSTALL_DIR)/$(BINARY) $(BIN_DIR)/$(BINARY);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment