blob: bbb51be7aeddc60c362c8d7047237731a98a82cb [file] [log] [blame]
# 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)