| # Builds certain tests for Linux | 
 | # | 
 | # Customize your settings in your Makelocal | 
 | # - LINUX_KDIR: linux source for the module (/path/to/linux/source) | 
 | # | 
 | # You should be able to build the Linux programs without building Akaros by | 
 | # running make in this directory.  Set LINUX_KDIR in your environment.  Fun! | 
 |  | 
 | # Default compiler/tools come from the top-level Makefile.  They can be | 
 | # overridden.  Also these are used if we were called directly instead of from | 
 | # the top-level makefile. | 
 | HOSTCC ?= gcc | 
 | HOSTLD ?= ld | 
 |  | 
 | # Rough attempt to match Akaros's userspace flags, plus turn off the annoying | 
 | # warnings from more recent GCCs.  Note that akaros's CFLAGS_USER has | 
 | # omit-frame-pointer, but the libraries (parlib) don't. | 
 | HOSTCFLAGS = -Wall -Werror -Wreturn-type \ | 
 | 	     -Wno-format -Wno-char-subscripts -Wno-unused -Wno-comment \ | 
 | 	     -std=gnu99 -fno-stack-protector -fgnu89-inline \ | 
 | 	     -O2 -fno-omit-frame-pointer -g | 
 |  | 
 | # These are the flags Linux uses for modules that are applicable to userspace. | 
 | # Note that this overloads the CFLAGS above.  Just pick one based on whichever | 
 | # comparison you're doing | 
 | #HOSTCFLAGS =  \ | 
 |   -fno-strict-aliasing \ | 
 |   -fno-common \ | 
 |   -fshort-wchar \ | 
 |   -std=gnu99 \ | 
 |   -fno-PIE \ | 
 |   -m64 \ | 
 |   -falign-jumps=1 \ | 
 |   -falign-loops=1 \ | 
 |   -mskip-rax-setup \ | 
 |   -mtune=generic \ | 
 |   -mno-red-zone \ | 
 |   -funit-at-a-time \ | 
 |   -pipe \ | 
 |   -fno-asynchronous-unwind-tables \ | 
 |   -fno-delete-null-pointer-checks \ | 
 |   -O2 \ | 
 |   --param=allow-store-data-races=0 \ | 
 |   -fstack-protector-strong \ | 
 |   -fno-omit-frame-pointer \ | 
 |   -fno-optimize-sibling-calls \ | 
 |   -fno-var-tracking-assignments \ | 
 |   -g | 
 |  | 
 | USERDIR = ../../user | 
 | # override to our local obj/ | 
 | OBJDIR = obj | 
 |  | 
 | ifeq ($(TESTS_DIR),) | 
 | # independent build, from this directory | 
 | Q = @ | 
 | endif | 
 | # override, regardless | 
 | TESTS_DIR = .. | 
 |  | 
 | # defined below | 
 | all: | 
 |  | 
 | ifeq ($(LINUX_KDIR),) | 
 |  | 
 | mods: | 
 | 	$(Q)echo LINUX_KDIR is unset.  Set it, Makelocal or env, for Linux mods | 
 |  | 
 | mods_clean: | 
 | 	@: | 
 |  | 
 | else | 
 |  | 
 | mods: | 
 | 	@cd modules && $(MAKE) -C $(LINUX_KDIR) CC=$(HOSTCC) LD=$(HOSTLD) M=$$PWD modules | 
 |  | 
 | mods_clean: | 
 | 	@cd modules && $(MAKE) -C $(LINUX_KDIR) M=$$PWD clean | 
 |  | 
 | endif | 
 |  | 
 | clean: mods_clean | 
 | 	@rm -rf $(OBJDIR) .*cmd | 
 |  | 
 | # Programs in this directory (if any) | 
 | tests_srcs_c := $(wildcard *.c) | 
 | tests_lddepends_c := %.c | 
 | tests_execs_c   = $(patsubst %.c, $(OBJDIR)/%, $(tests_srcs_c)) | 
 |  | 
 | # Select programs from tests/ | 
 | # All programs we build end up in obj/tests/linux/, even the ones from tests/ | 
 | sel_progs = lock_test.c interference.c pthread_test.c | 
 |  | 
 | sel_progs_srcs_c = $(patsubst %c,$(TESTS_DIR)/%c, $(sel_progs)) | 
 | sel_progs_lddepends_c := $(TESTS_DIR)/%.c | 
 | sel_progs_execs_c = $(patsubst %.c, $(OBJDIR)/%, $(sel_progs)) | 
 |  | 
 | progs = $(tests_execs_c) $(sel_progs_execs_c) | 
 |  | 
 | tests_c_deps := $(USERDIR)/benchutil/measure.c | 
 | tests_ldlibs := -lpthread -lm | 
 |  | 
 | $(OBJDIR)/%: $(tests_lddepends_c) | 
 | 	@echo + cc [LINUX_TESTS] $< | 
 | 	@mkdir -p $(@D) | 
 | 	$(Q)$(HOSTCC) -static -O2 $(HOSTCFLAGS) $< $(tests_c_deps) -o $@ $(tests_ldlibs) | 
 |  | 
 | $(OBJDIR)/%: $(sel_progs_lddepends_c) | 
 | 	@echo + cc [LINUX_TESTS] $< | 
 | 	@mkdir -p $(@D) | 
 | 	$(Q)$(HOSTCC) -static -O2 $(HOSTCFLAGS) $< $(tests_c_deps) -o $@ $(tests_ldlibs) | 
 |  | 
 | all: mods $(progs) | 
 | 	@: | 
 |  | 
 | .PHONY: $(all mods clean) |