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
 | 
