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
 |