Files
libsst/libsst-math/Makefile
2026-04-03 00:22:39 -05:00

371 lines
8.3 KiB
Makefile

# libsst-math/Makefile
# Author: Charles Lena <cmlena@762studios.com>
# Created: 5/17/2012
#
# Purpose:
#
# Makefile for libsst-math
#
# License:
#
# This program is free software. It comes without any warranty, to
# the extent permitted by applicable law. You can redistribute it
# and/or modify it under the terms of the Do What The Fuck You Want
# To Public License, Version 2, as published by Sam Hocevar. See
# http://sam.zoy.org/wtfpl/COPYING for more details.
#ifeq ($(IS_GCC),1)
#CFLAGS += -mssse3 -ftree-vectorize -ftree-vectorizer-verbose=5 -Wall -std=c99
#CODFLAG=-Wa,-a,-ad
#endif
#ifeq ($(IS_ICC), 1)
#CFLAGS=-vec-report2 -restrict -xSSSE3 -Wall -std=c99
#CODFLAG=-S -fcode-asm
#endif
BINNAME := $(DIST)/libsst-math.a
ifeq ($(TARGET),debug)
BINNAME := $(subst .a,_d.a, $(BINNAME))
endif
#Required libraries
REQ_LIBS := libsst-math.a
# Generate the lib names with the full dist name.
# This is only used for dependency checking
REQ_LIBS_DIST := $(foreach lib,$(REQ_LIBS), $(DIST)/$(lib))
#Generate LDFLAGS for $REQ_LIBS: "libfoo.a" becomes "-lfoo"
REQ_LIBS_LDFLAGS := $(foreach lib,$(REQ_LIBS), $(subst lib,-l,$(lib)))
REQ_LIBS_LDFLAGS := -L$(DIST) $(foreach lib,$(REQ_LIBS_LDFLAGS), $(subst .a,,$(lib)))
DYNSRC_MAT= \
SST_Mat22f.c SST_Mat22d.c \
SST_Mat22i.c SST_Mat22u.c \
SST_Mat33f.c SST_Mat33d.c \
SST_Mat33i.c SST_Mat33u.c \
SST_Mat44f.c SST_Mat44d.c \
SST_Mat44i.c SST_Mat44u.c
DYNSRC_VEC= \
SST_Vec2f.c SST_Vec2d.c \
SST_Vec2i.c SST_Vec2u.c \
SST_Vec3f.c SST_Vec3u.c \
SST_Vec3d.c SST_Vec3i.c \
SST_Vec4f.c SST_Vec4d.c \
SST_Vec4i.c SST_Vec4u.c
DYNUNITTEST = $(addprefix ../ZTestSuite/Test-,$(DYNSRC_MAT:.c=.cpp)) $(addprefix ../ZTestSuite/Test-,$(DYNSRC_VEC:.c=.cpp))
DYNTEST : $(DYNTEST:.c=benchmark.c)
SRC=SST_Transform.c SST_Geo.c SST_VectorN.c
OBJ=$(addprefix obj/$(ARCH)/$(TARGET)/,$(subst .c,.o,$(SRC:.c=.o) $(DYNSRC_MAT:.c=.o) $(DYNSRC_VEC:.c=.o)) )
FULLOBJ=$(addprefix obj/$(ARCH)/$(TARGET)/,$(DYNTEST:.c=.o) )
CODs=$(SRC:.c=.cod)
PYFILE_MAT=./MatrixNxN.py
PYFILE_VEC=./VectorN.py
RANLIB?=ranlib
.PHONY: all clean cleanall assemblers
$(shell mkdir -p obj/$(ARCH)/$(TARGET))
$(BINNAME): $(OBJ)
$(AR) cru $@ $+
$(RANLIB) $@
code:
@rm -f $(DYNSRC_MAT) $(DYNSRC_VEC) $(DYNTEST) $(DYNUNITTEST)
@$(MAKE) -C .. math
test.bin: $(FULLOBJ) $(REQ_LIBS_DIST)
@echo LD $@
$(CC) $+ $(LDFLAGS) -o $@
###############################
# THIS IS THE MATRIX AREA #
###############################
SST_Mat22f.c:
@echo GEN $@
@$(PYFILE_MAT) 2 float > SST_Mat22f.c
SST_Mat22d.c:
@echo GEN $@
@$(PYFILE_MAT) 2 double > SST_Mat22d.c
SST_Mat22i.c:
@echo GEN $@
@$(PYFILE_MAT) 2 int > SST_Mat22i.c
SST_Mat22u.c:
@echo GEN $@
@$(PYFILE_MAT) 2 "unsigned int" > SST_Mat22u.c
SST_Mat33f.c:
@echo GEN $@
@$(PYFILE_MAT) 3 float > SST_Mat33f.c
SST_Mat33d.c:
@echo GEN $@
@$(PYFILE_MAT) 3 double > SST_Mat33d.c
SST_Mat33i.c:
@echo GEN $@
@$(PYFILE_MAT) 3 int > SST_Mat33i.c
SST_Mat33u.c:
@echo GEN $@
@$(PYFILE_MAT) 3 "unsigned int" > SST_Mat33u.c
SST_Mat44f.c:
@echo GEN $@
@$(PYFILE_MAT) 4 float > SST_Mat44f.c
SST_Mat44d.c:
@echo GEN $@
@$(PYFILE_MAT) 4 double > SST_Mat44d.c
SST_Mat44i.c:
@echo GEN $@
@$(PYFILE_MAT) 4 int > SST_Mat44i.c
SST_Mat44u.c:
@echo GEN $@
@$(PYFILE_MAT) 4 "unsigned int" > SST_Mat44u.c
###############################
# THIS IS THE VECTOR AREA #
###############################
SST_Vec2f.c:
@echo GEN $@
echo "$(PYFILE_VEC) 2 float > SST_Vec2f.c"
@$(PYFILE_VEC) 2 float > SST_Vec2f.c
SST_Vec2d.c:
@echo GEN $@
@$(PYFILE_VEC) 2 double > SST_Vec2d.c
SST_Vec2i.c:
@echo GEN $@
@$(PYFILE_VEC) 2 int > SST_Vec2i.c
SST_Vec2u.c:
@echo GEN $@
@$(PYFILE_VEC) 2 "unsigned int" > SST_Vec2u.c
SST_Vec3f.c:
@echo GEN $@
@$(PYFILE_VEC) 3 float > SST_Vec3f.c
SST_Vec3d.c:
@echo GEN $@
@$(PYFILE_VEC) 3 double > SST_Vec3d.c
SST_Vec3i.c:
@echo GEN $@
@$(PYFILE_VEC) 3 int > SST_Vec3i.c
SST_Vec3u.c:
@echo GEN $@
@$(PYFILE_VEC) 3 "unsigned int" > SST_Vec3u.c
SST_Vec4f.c:
@echo GEN $@
@$(PYFILE_VEC) 4 float > SST_Vec4f.c
SST_Vec4d.c:
@echo GEN $@
@$(PYFILE_VEC) 4 double > SST_Vec4d.c
SST_Vec4i.c:
@echo GEN $@
@$(PYFILE_VEC) 4 int > SST_Vec4i.c
SST_Vec4u.c:
@echo GEN $@
@$(PYFILE_VEC) 4 "unsigned int" > SST_Vec4u.c
##################################
# THIS IS THE VECTEST SUITE AREA #
##################################
../ZTestSuite/Test-SST_Vec2f.cpp:
@echo GEN $@
@$(PYFILE_VEC) 2 float unittest > $@
../ZTestSuite/Test-SST_Vec2d.cpp:
@echo GEN $@
@$(PYFILE_VEC) 2 double unittest > $@
../ZTestSuite/Test-SST_Vec2i.cpp:
@echo GEN $@
@$(PYFILE_VEC) 2 int unittest > $@
../ZTestSuite/Test-SST_Vec2u.cpp:
@echo GEN $@
@$(PYFILE_VEC) 2 "unsigned int" unittest > $@
../ZTestSuite/Test-SST_Vec3f.cpp:
@echo GEN $@
@$(PYFILE_VEC) 3 float unittest > $@
../ZTestSuite/Test-SST_Vec3d.cpp:
@echo GEN $@
@$(PYFILE_VEC) 3 double unittest > $@
../ZTestSuite/Test-SST_Vec3i.cpp:
@echo GEN $@
@$(PYFILE_VEC) 3 int unittest > $@
../ZTestSuite/Test-SST_Vec3u.cpp:
@echo GEN $@
@$(PYFILE_VEC) 3 "unsigned int" unittest > $@
../ZTestSuite/Test-SST_Vec4f.cpp:
@echo GEN $@
@$(PYFILE_VEC) 4 float unittest > $@
../ZTestSuite/Test-SST_Vec4d.cpp:
@echo GEN $@
@$(PYFILE_VEC) 4 double unittest > $@
../ZTestSuite/Test-SST_Vec4i.cpp:
@echo GEN $@
@$(PYFILE_VEC) 4 int unittest > $@
../ZTestSuite/Test-SST_Vec4u.cpp:
@echo GEN $@
@$(PYFILE_VEC) 4 "unsigned int" unittest > $@
###############################
# THIS IS THE TEST SUITE AREA #
###############################
../ZTestSuite/Test-SST_Mat22f.cpp:
@echo GEN $@
@$(PYFILE_MAT) 2 float unittest > $@
../ZTestSuite/Test-SST_Mat22d.cpp:
@echo GEN $@
@$(PYFILE_MAT) 2 double unittest > $@
../ZTestSuite/Test-SST_Mat22i.cpp:
@echo GEN $@
@$(PYFILE_MAT) 2 int unittest > $@
../ZTestSuite/Test-SST_Mat22u.cpp:
@echo GEN $@
@$(PYFILE_MAT) 2 "unsigned int" unittest > $@
../ZTestSuite/Test-SST_Mat33f.cpp:
@echo GEN $@
@$(PYFILE_MAT) 3 float unittest > $@
../ZTestSuite/Test-SST_Mat33d.cpp:
@echo GEN $@
@$(PYFILE_MAT) 3 double unittest > $@
../ZTestSuite/Test-SST_Mat33i.cpp:
@echo GEN $@
@$(PYFILE_MAT) 3 int unittest > $@
../ZTestSuite/Test-SST_Mat33u.cpp:
@echo GEN $@
@$(PYFILE_MAT) 3 "unsigned int" unittest > $@
../ZTestSuite/Test-SST_Mat44f.cpp:
@echo GEN $@
@$(PYFILE_MAT) 4 float unittest > $@
../ZTestSuite/Test-SST_Mat44d.cpp:
@echo GEN $@
@$(PYFILE_MAT) 4 double unittest > $@
../ZTestSuite/Test-SST_Mat44i.cpp:
@echo GEN $@
@$(PYFILE_MAT) 4 int unittest > $@
../ZTestSuite/Test-SST_Mat44u.cpp:
@echo GEN $@
@$(PYFILE_MAT) 4 "unsigned int" unittest > $@
###############################
# THIS IS THE BENCHMARK AREA #
###############################
SST_Mat22f_benchmark.c :
@echo GEN $@
@$(PYFILE_MAT) 2 float benchmark > $@
SST_Mat22d_benchmark.c :
@echo GEN $@
@$(PYFILE_MAT) 2 double benchmark > $@
SST_Mat22i_benchmark.c :
@echo GEN $@
@$(PYFILE_MAT) 2 int benchmark > $@
SST_Mat22u_benchmark.c :
@echo GEN $@
@$(PYFILE_MAT) 2 "unsigned int" benchmark > $@
SST_Mat33f_benchmark.c :
@echo GEN $@
@$(PYFILE_MAT) 3 float benchmark > $@
SST_Mat33d_benchmark.c :
@echo GEN $@
@$(PYFILE_MAT) 3 double benchmark > $@
SST_Mat33i_benchmark.c :
@echo GEN $@
@$(PYFILE_MAT) 3 int benchmark > $@
SST_Mat33u_benchmark.c :
@echo GEN $@
@$(PYFILE_MAT) 3 "unsigned int" benchmark > $@
SST_Mat44f_benchmark.c :
@echo GEN $@
@$(PYFILE_MAT) 4 float benchmark > $@
SST_Mat44d_benchmark.c :
@echo GEN $@
@$(PYFILE_MAT) 4 double benchmark > $@
SST_Mat44i_benchmark.c :
@echo GEN $@
@$(PYFILE_MAT) 4 int benchmark > $@
SST_Mat44u_benchmark.c :
@echo GEN $@
@$(PYFILE_MAT) 4 "unsigned int" benchmark > $@
# *.c files to *.o files
obj/$(ARCH)/$(TARGET)/%.o: %.c
@echo CC $@
@$(CC) $(CFLAGS) -c $*.c -o obj/$(ARCH)/$(TARGET)/$*.o
# *.cpp files to *.o files - specifically used for unit test code check
# This should be removed eventually and handled through the ... ZTestSuite?
obj/$(ARCH)/$(TARGET)/%.o: %.cpp
@echo CXX $@
@$(CXX) $(CXXFLAGS) -I../Include -I../Lib/Include -c $< -o $@
$(CODs) : $(SRC)
$(CC) $(CODFLAG) $(CFLAGS) -c $< > $@
assemblers: $(CODs)
# CLEAN
clean:
@-rm -r -f obj $(DIST)/libsst-math*.a test.bin
# CLEAN - Gets rid of dynamically generated code as well
cleanall: clean
$(RM) $(OBJ)
$(RM) $(DYNSRC_MAT)
$(RM) $(DYNSRC_VEC)
$(RM) $(DYNTEST)
$(RM) $(DYNUNITTEST)
all: $(DYNSRC) $(OBJ) $(BINNAME) $(DYNUNITTEST)
release: $(OBJ) $(BINNAME)