295 lines
11 KiB
Makefile
295 lines
11 KiB
Makefile
|
|
||
|
CXX?=g++
|
||
|
CLANG_CC=clang
|
||
|
CLANG_CXX=clang++
|
||
|
|
||
|
IPHONE_PLATFORM_PATH = /Developer/Platforms/iPhoneOS.platform/Developer
|
||
|
IPHONE_ISYSROOT_PATH = $(IPHONE_PLATFORM_PATH)/SDKs/iPhoneOS4.2.sdk/
|
||
|
IPHONE_CC = $(IPHONE_PLATFORM_PATH)/usr/bin/g++ -isysroot $(IPHONE_ISYSROOT_PATH) -arch armv7
|
||
|
# -mfloat-abi=softfp -mfpu=neon
|
||
|
|
||
|
#CXXFLAGS += -Iinclude -O0
|
||
|
#CXXFLAGS += -g -Iinclude -Wall -Wextra -pedantic -Wno-unused -O3 -fstrict-aliasing -Wstrict-aliasing=2 -ffast-math
|
||
|
CXXFLAGS += -Iinclude -Wall -Wextra -pedantic -Wno-unused -O3 -fstrict-aliasing -Wstrict-aliasing=2 -ffast-math -D__extern_always_inline=inline
|
||
|
|
||
|
SPEC_SRC = $(wildcard spec/*.cpp)
|
||
|
SPEC_OBJ = $(SPEC_SRC:.cpp=.o)
|
||
|
|
||
|
BENCH_SRC = $(wildcard bench/*.cpp)
|
||
|
BENCH_OBJ = $(BENCH_SRC:.cpp=.o)
|
||
|
BENCH_ASM = $(patsubst %.cpp,asm$(SUFFIX)/%.S,$(BENCH_SRC))
|
||
|
|
||
|
SUFFIX=
|
||
|
|
||
|
DEFAULT_CC=1
|
||
|
|
||
|
ifeq ($(FORCE_SCALAR),1)
|
||
|
CXXFLAGS+= -DVECTORIAL_FORCED -DVECTORIAL_SCALAR
|
||
|
SUFFIX=-scalar
|
||
|
endif
|
||
|
|
||
|
ifeq ($(FORCE_SSE),1)
|
||
|
CXXFLAGS+= -DVECTORIAL_FORCED -DVECTORIAL_SSE -msse -msse2 -mfpmath=sse
|
||
|
SUFFIX=-sse
|
||
|
endif
|
||
|
|
||
|
ifeq ($(FORCE_GNU),1)
|
||
|
CXXFLAGS+= -DVECTORIAL_FORCED -DVECTORIAL_GNU
|
||
|
#-msse -msse2 -mfpmath=sse
|
||
|
SUFFIX=-gnu
|
||
|
endif
|
||
|
|
||
|
ifeq ($(FORCE_NEON),1)
|
||
|
CXXFLAGS+= -DVECTORIAL_FORCED -DVECTORIAL_NEON
|
||
|
SUFFIX=-neon
|
||
|
ARM=1
|
||
|
endif
|
||
|
|
||
|
|
||
|
ifeq ($(ARM),1)
|
||
|
ifeq ($(shell uname -s),Darwin)
|
||
|
CC=$(IPHONE_CC)
|
||
|
CXX=$(IPHONE_CC)
|
||
|
endif
|
||
|
# CXXFLAGS+= -mcpu=cortex-a8
|
||
|
CXXFLAGS+= -mno-thumb -mfloat-abi=softfp -mfpu=neon
|
||
|
DEFAULT_CC=0
|
||
|
endif
|
||
|
|
||
|
ifeq ($(CLANG),1)
|
||
|
CC=$(CLANG_CC)
|
||
|
CXX=$(CLANG_CXX)
|
||
|
DEFAULT_CC=0
|
||
|
endif
|
||
|
|
||
|
ifeq ($(DEFAULT_CC),1)
|
||
|
# CXXFLAGS += -msse -msse2 -mfpmath=sse
|
||
|
endif
|
||
|
|
||
|
ifeq ($(ASM),1)
|
||
|
CC+= -S
|
||
|
CXX+= -S
|
||
|
endif
|
||
|
|
||
|
BUILDDIR=build$(SUFFIX)
|
||
|
SPEC_OBJ := $(addprefix $(BUILDDIR)/,$(SPEC_OBJ))
|
||
|
BENCH_OBJ := $(addprefix $(BUILDDIR)/,$(BENCH_OBJ))
|
||
|
SILENT=@
|
||
|
MKDIR=mkdir -p
|
||
|
PATH_SEPARATOR=/
|
||
|
|
||
|
$(BUILDDIR)/%.o: %.cpp
|
||
|
@echo CXX $<
|
||
|
$(SILENT) $(MKDIR) $(subst /,$(PATH_SEPARATOR),$(dir $@))
|
||
|
$(SILENT) $(COMPILE.cc) -o $@ $<
|
||
|
|
||
|
|
||
|
|
||
|
.PHONY: all
|
||
|
all: specsuite$(SUFFIX)
|
||
|
./specsuite$(SUFFIX)
|
||
|
|
||
|
|
||
|
.PHONY: full
|
||
|
full:
|
||
|
@clear
|
||
|
@echo FULL COMPILE at `date +%H:%M:%S`
|
||
|
# FORCE_SCALAR=1 $(MAKE) clean
|
||
|
@FORCE_SCALAR=1 $(MAKE) specsuite-scalar
|
||
|
# FORCE_GNU=1 $(MAKE) clean
|
||
|
@FORCE_GNU=1 $(MAKE) specsuite-gnu
|
||
|
# FORCE_SSE=1 $(MAKE) clean
|
||
|
@FORCE_SSE=1 $(MAKE) specsuite-sse
|
||
|
# FORCE_NEON=1 $(MAKE) clean
|
||
|
# FORCE_NEON=1 $(MAKE) specsuite-neon
|
||
|
@./specsuite-scalar
|
||
|
@./specsuite-sse
|
||
|
@./specsuite-gnu
|
||
|
|
||
|
specsuite$(SUFFIX): $(SPEC_OBJ)
|
||
|
@echo LINK $@
|
||
|
@$(CXX) $(LDFLAGS) $^ -o $@
|
||
|
|
||
|
.PHONY: depend
|
||
|
depend:
|
||
|
@echo DEP
|
||
|
@makedepend -Y -- $(CXXFLAGS) -- $(SPEC_SRC) $(BENCH_SRC) -p$(BUILDDIR)/ > /dev/null 2>&1
|
||
|
@$(RM) Makefile.bak
|
||
|
|
||
|
define asm-command
|
||
|
@mkdir -p $(dir asm$(SUFFIX)/$(1))
|
||
|
$(CXX) $(CXXFLAGS) -S $(1) -o asm$(SUFFIX)/$(1).S
|
||
|
|
||
|
endef
|
||
|
|
||
|
bench-asm: $(BENCH_SRC)
|
||
|
$(foreach p,$(BENCH_SRC),$(call asm-command,$(p)))
|
||
|
|
||
|
benchmark$(SUFFIX): $(BENCH_OBJ) bench-asm
|
||
|
$(CXX) $(BENCH_OBJ) -o $@
|
||
|
|
||
|
.PHONY: bench-full
|
||
|
bench-full:
|
||
|
FORCE_SCALAR=1 $(MAKE) benchmark-scalar
|
||
|
FORCE_GNU=1 $(MAKE) benchmark-gnu
|
||
|
FORCE_SSE=1 $(MAKE) benchmark-sse
|
||
|
# FORCE_NEON=1 $(MAKE) clean
|
||
|
# FORCE_NEON=1 $(MAKE) benchmark-neon
|
||
|
./benchmark-scalar
|
||
|
./benchmark-sse
|
||
|
./benchmark-gnu
|
||
|
|
||
|
.PHONY: clean
|
||
|
clean:
|
||
|
rm -f $(SPEC_OBJ) $(BENCH_OBJ) benchmark$(SUFFIX) specsuite$(SUFFIX)
|
||
|
rm -rf asm$(SUFFIX)
|
||
|
|
||
|
.PHONY: realclean
|
||
|
realclean: clean
|
||
|
rm -f specsuite*
|
||
|
rm -rf build*
|
||
|
|
||
|
|
||
|
.PHONY: update_spec
|
||
|
update_spec:
|
||
|
./tools/update_spec.rb spec/spec_*.cpp
|
||
|
|
||
|
ifeq ($(MAKECMDGOALS),export)
|
||
|
ifeq ($(origin to),undefined)
|
||
|
$(error to not set, like make export to=/foo/bar)
|
||
|
endif
|
||
|
endif
|
||
|
|
||
|
.PHONY: export
|
||
|
export:
|
||
|
$(SILENT) git archive --format tar master | tar x -C $(to)
|
||
|
|
||
|
|
||
|
include/vectorial/vec2f.h include/vectorial/vec3f.h include/vectorial/vec4f.h: include/vectorial/simd4f.h
|
||
|
include/vectorial/simd4f.h: include/vectorial/simd4f_scalar.h
|
||
|
include/vectorial/simd4f.h: include/vectorial/simd4f_neon.h
|
||
|
include/vectorial/simd4f.h: include/vectorial/simd4f_gnu.h
|
||
|
include/vectorial/simd4f.h: include/vectorial/simd4f_sse.h
|
||
|
include/vectorial/simd4f.h: include/vectorial/simd4f_scalar.h
|
||
|
include/vectorial/simd4f.h: include/vectorial/config.h
|
||
|
include/vectorial/simd4x4f.h: include/vectorial/simd4f.h
|
||
|
include/vectorial/simd4x4f.h: include/vectorial/simd4x4f_scalar.h
|
||
|
include/vectorial/simd4x4f.h: include/vectorial/simd4x4f_neon.h
|
||
|
include/vectorial/simd4x4f.h: include/vectorial/simd4x4f_gnu.h
|
||
|
include/vectorial/simd4x4f.h: include/vectorial/simd4x4f_sse.h
|
||
|
include/vectorial/simd4x4f.h: include/vectorial/config.h
|
||
|
spec/spec_helper.h: include/vectorial/simd4x4f.h include/vectorial/simd4f.h include/vectorial/vec4f.h include/vectorial/vec3f.h include/vectorial/vec2f.h
|
||
|
spec/spec.cpp: spec/spec.h
|
||
|
spec/spec_main.cpp: spec/spec.h
|
||
|
spec/spec_simd4f.cpp: spec/spec_helper.h
|
||
|
spec/spec_simd4x4f.cpp: spec/spec_helper.h
|
||
|
spec/spec_vec2f.cpp: spec/spec_helper.h
|
||
|
spec/spec_vec3f.cpp: spec/spec_helper.h
|
||
|
spec/spec_vec4f.cpp: spec/spec_helper.h
|
||
|
|
||
|
$(BUILDDIR)/spec/spec_simd4f.o: \
|
||
|
include/vectorial/simd4x4f.h include/vectorial/simd4f.h \
|
||
|
include/vectorial/simd4f_scalar.h include/vectorial/simd4f_neon.h \
|
||
|
include/vectorial/simd4f_gnu.h include/vectorial/simd4f_sse.h \
|
||
|
include/vectorial/config.h
|
||
|
|
||
|
$(BUILDDIR)/spec/spec_simd4x4f.o: \
|
||
|
include/vectorial/simd4x4f.h include/vectorial/simd4f.h \
|
||
|
include/vectorial/simd4f_scalar.h include/vectorial/simd4f_neon.h \
|
||
|
include/vectorial/simd4f_gnu.h include/vectorial/simd4f_sse.h \
|
||
|
include/vectorial/simd4x4f_scalar.h include/vectorial/simd4x4f_neon.h \
|
||
|
include/vectorial/simd4x4f_gnu.h include/vectorial/simd4x4f_sse.h include/vectorial/config.h
|
||
|
|
||
|
$(BUILDDIR)/spec/spec_vec2f.o $(BUILDDIR)/spec/spec_vec3f.o $(BUILDDIR)/spec/spec_vec4f.o: \
|
||
|
include/vectorial/simd4x4f.h include/vectorial/simd4f.h \
|
||
|
include/vectorial/vec4f.h include/vectorial/vec3f.h include/vectorial/vec2f.h \
|
||
|
include/vectorial/simd4f_scalar.h include/vectorial/simd4f_neon.h \
|
||
|
include/vectorial/simd4f_gnu.h include/vectorial/simd4f_sse.h \
|
||
|
include/vectorial/simd4x4f_scalar.h include/vectorial/simd4x4f_neon.h \
|
||
|
include/vectorial/simd4x4f_gnu.h include/vectorial/simd4x4f_sse.h include/vectorial/config.h
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
# DO NOT DELETE
|
||
|
|
||
|
$(BUILDDIR)/spec/spec.o: spec/spec.h
|
||
|
$(BUILDDIR)/spec/spec_main.o: spec/spec.h
|
||
|
$(BUILDDIR)/spec/spec_mat4f.o: spec/spec_helper.h spec/spec.h
|
||
|
$(BUILDDIR)/spec/spec_mat4f.o: include/vectorial/simd4f.h
|
||
|
$(BUILDDIR)/spec/spec_mat4f.o: include/vectorial/config.h
|
||
|
$(BUILDDIR)/spec/spec_mat4f.o: include/vectorial/simd4f_gnu.h
|
||
|
$(BUILDDIR)/spec/spec_mat4f.o: include/vectorial/simd4f_common.h
|
||
|
$(BUILDDIR)/spec/spec_mat4f.o: include/vectorial/vec4f.h include/vectorial/vec3f.h
|
||
|
$(BUILDDIR)/spec/spec_mat4f.o: include/vectorial/vec2f.h
|
||
|
$(BUILDDIR)/spec/spec_mat4f.o: include/vectorial/simd4x4f.h
|
||
|
$(BUILDDIR)/spec/spec_mat4f.o: include/vectorial/simd4f.h
|
||
|
$(BUILDDIR)/spec/spec_mat4f.o: include/vectorial/simd4x4f_gnu.h
|
||
|
$(BUILDDIR)/spec/spec_mat4f.o: include/vectorial/mat4f.h
|
||
|
$(BUILDDIR)/spec/spec_simd4f.o: spec/spec_helper.h spec/spec.h
|
||
|
$(BUILDDIR)/spec/spec_simd4f.o: include/vectorial/simd4f.h
|
||
|
$(BUILDDIR)/spec/spec_simd4f.o: include/vectorial/config.h
|
||
|
$(BUILDDIR)/spec/spec_simd4f.o: include/vectorial/simd4f_gnu.h
|
||
|
$(BUILDDIR)/spec/spec_simd4f.o: include/vectorial/simd4f_common.h
|
||
|
$(BUILDDIR)/spec/spec_simd4f.o: include/vectorial/vec4f.h include/vectorial/vec3f.h
|
||
|
$(BUILDDIR)/spec/spec_simd4f.o: include/vectorial/vec2f.h
|
||
|
$(BUILDDIR)/spec/spec_simd4f.o: include/vectorial/simd4x4f.h
|
||
|
$(BUILDDIR)/spec/spec_simd4f.o: include/vectorial/simd4f.h
|
||
|
$(BUILDDIR)/spec/spec_simd4f.o: include/vectorial/simd4x4f_gnu.h
|
||
|
$(BUILDDIR)/spec/spec_simd4f.o: include/vectorial/mat4f.h
|
||
|
$(BUILDDIR)/spec/spec_simd4x4f.o: spec/spec_helper.h spec/spec.h
|
||
|
$(BUILDDIR)/spec/spec_simd4x4f.o: include/vectorial/simd4f.h
|
||
|
$(BUILDDIR)/spec/spec_simd4x4f.o: include/vectorial/config.h
|
||
|
$(BUILDDIR)/spec/spec_simd4x4f.o: include/vectorial/simd4f_gnu.h
|
||
|
$(BUILDDIR)/spec/spec_simd4x4f.o: include/vectorial/simd4f_common.h
|
||
|
$(BUILDDIR)/spec/spec_simd4x4f.o: include/vectorial/vec4f.h
|
||
|
$(BUILDDIR)/spec/spec_simd4x4f.o: include/vectorial/vec3f.h
|
||
|
$(BUILDDIR)/spec/spec_simd4x4f.o: include/vectorial/vec2f.h
|
||
|
$(BUILDDIR)/spec/spec_simd4x4f.o: include/vectorial/simd4x4f.h
|
||
|
$(BUILDDIR)/spec/spec_simd4x4f.o: include/vectorial/simd4f.h
|
||
|
$(BUILDDIR)/spec/spec_simd4x4f.o: include/vectorial/simd4x4f_gnu.h
|
||
|
$(BUILDDIR)/spec/spec_simd4x4f.o: include/vectorial/mat4f.h
|
||
|
$(BUILDDIR)/spec/spec_vec2f.o: spec/spec_helper.h spec/spec.h
|
||
|
$(BUILDDIR)/spec/spec_vec2f.o: include/vectorial/simd4f.h
|
||
|
$(BUILDDIR)/spec/spec_vec2f.o: include/vectorial/config.h
|
||
|
$(BUILDDIR)/spec/spec_vec2f.o: include/vectorial/simd4f_gnu.h
|
||
|
$(BUILDDIR)/spec/spec_vec2f.o: include/vectorial/simd4f_common.h
|
||
|
$(BUILDDIR)/spec/spec_vec2f.o: include/vectorial/vec4f.h include/vectorial/vec3f.h
|
||
|
$(BUILDDIR)/spec/spec_vec2f.o: include/vectorial/vec2f.h
|
||
|
$(BUILDDIR)/spec/spec_vec2f.o: include/vectorial/simd4x4f.h
|
||
|
$(BUILDDIR)/spec/spec_vec2f.o: include/vectorial/simd4f.h
|
||
|
$(BUILDDIR)/spec/spec_vec2f.o: include/vectorial/simd4x4f_gnu.h
|
||
|
$(BUILDDIR)/spec/spec_vec2f.o: include/vectorial/mat4f.h
|
||
|
$(BUILDDIR)/spec/spec_vec3f.o: spec/spec_helper.h spec/spec.h
|
||
|
$(BUILDDIR)/spec/spec_vec3f.o: include/vectorial/simd4f.h
|
||
|
$(BUILDDIR)/spec/spec_vec3f.o: include/vectorial/config.h
|
||
|
$(BUILDDIR)/spec/spec_vec3f.o: include/vectorial/simd4f_gnu.h
|
||
|
$(BUILDDIR)/spec/spec_vec3f.o: include/vectorial/simd4f_common.h
|
||
|
$(BUILDDIR)/spec/spec_vec3f.o: include/vectorial/vec4f.h include/vectorial/vec3f.h
|
||
|
$(BUILDDIR)/spec/spec_vec3f.o: include/vectorial/vec2f.h
|
||
|
$(BUILDDIR)/spec/spec_vec3f.o: include/vectorial/simd4x4f.h
|
||
|
$(BUILDDIR)/spec/spec_vec3f.o: include/vectorial/simd4f.h
|
||
|
$(BUILDDIR)/spec/spec_vec3f.o: include/vectorial/simd4x4f_gnu.h
|
||
|
$(BUILDDIR)/spec/spec_vec3f.o: include/vectorial/mat4f.h
|
||
|
$(BUILDDIR)/spec/spec_vec4f.o: spec/spec_helper.h spec/spec.h
|
||
|
$(BUILDDIR)/spec/spec_vec4f.o: include/vectorial/simd4f.h
|
||
|
$(BUILDDIR)/spec/spec_vec4f.o: include/vectorial/config.h
|
||
|
$(BUILDDIR)/spec/spec_vec4f.o: include/vectorial/simd4f_gnu.h
|
||
|
$(BUILDDIR)/spec/spec_vec4f.o: include/vectorial/simd4f_common.h
|
||
|
$(BUILDDIR)/spec/spec_vec4f.o: include/vectorial/vec4f.h include/vectorial/vec3f.h
|
||
|
$(BUILDDIR)/spec/spec_vec4f.o: include/vectorial/vec2f.h
|
||
|
$(BUILDDIR)/spec/spec_vec4f.o: include/vectorial/simd4x4f.h
|
||
|
$(BUILDDIR)/spec/spec_vec4f.o: include/vectorial/simd4f.h
|
||
|
$(BUILDDIR)/spec/spec_vec4f.o: include/vectorial/simd4x4f_gnu.h
|
||
|
$(BUILDDIR)/spec/spec_vec4f.o: include/vectorial/mat4f.h
|
||
|
$(BUILDDIR)/bench/add_bench.o: bench/bench.h include/vectorial/vec4f.h
|
||
|
$(BUILDDIR)/bench/bench.o: bench/bench.h include/vectorial/config.h
|
||
|
$(BUILDDIR)/bench/dot_bench.o: bench/bench.h include/vectorial/vec4f.h
|
||
|
$(BUILDDIR)/bench/matrix_bench.o: bench/bench.h include/vectorial/simd4x4f.h
|
||
|
$(BUILDDIR)/bench/matrix_bench.o: include/vectorial/simd4f.h
|
||
|
$(BUILDDIR)/bench/matrix_bench.o: include/vectorial/simd4x4f_gnu.h
|
||
|
$(BUILDDIR)/bench/quad_bench.o: bench/bench.h include/vectorial/simd4x4f.h
|
||
|
$(BUILDDIR)/bench/quad_bench.o: include/vectorial/simd4f.h
|
||
|
$(BUILDDIR)/bench/quad_bench.o: include/vectorial/simd4x4f_gnu.h
|