# Makefile for core Mesa library


##### MACROS #####

TOP = ../..

GL_MAJOR = 1
GL_MINOR = 4
GL_TINY = 0$(MESA_MAJOR)0$(MESA_MINOR)0$(MESA_TINY)

GL_LIB_NAME = "GL"  # may be overridden in Make-config
OSMESA_LIB_NAME = "OSMesa"  # may be overridden in Make-config

VPATH = RCS

LIBDIR = $(TOP)/lib


### Lists of source files

MAIN_SOURCES = \
	main/api_arrayelt.c \
	main/api_loopback.c \
	main/api_noop.c \
	main/api_validate.c \
	main/accum.c \
	main/arbprogram.c \
	main/arbfragparse.c \
	main/arbvertparse.c \
	main/attrib.c \
	main/blend.c \
	main/bufferobj.c \
	main/buffers.c \
	main/clip.c \
	main/colortab.c \
	main/context.c \
	main/convolve.c \
	main/debug.c \
	main/depth.c \
	main/dispatch.c \
	main/dlist.c \
	main/drawpix.c \
	main/enable.c \
	main/enums.c \
	main/eval.c \
	main/extensions.c \
	main/feedback.c \
	main/fog.c \
	main/get.c \
	main/hash.c \
	main/hint.c \
	main/histogram.c \
	main/image.c \
	main/imports.c \
	main/light.c \
	main/lines.c \
	main/matrix.c \
	main/nvprogram.c \
	main/nvfragparse.c \
	main/nvvertexec.c \
	main/nvvertparse.c \
	main/occlude.c \
	main/pixel.c \
	main/points.c \
	main/polygon.c \
	main/rastpos.c \
	main/state.c \
	main/stencil.c \
	main/texcompress.c \
	main/texformat.c \
	main/teximage.c \
	main/texobj.c \
	main/texstate.c \
	main/texstore.c \
	main/texutil.c \
	main/varray.c \
	main/vtxfmt.c

GLAPI_SOURCES = \
	glapi/glapi.c \
	glapi/glthread.c

MATH_SOURCES = \
	math/m_debug_clip.c \
	math/m_debug_norm.c \
	math/m_debug_xform.c \
	math/m_eval.c \
	math/m_matrix.c \
	math/m_translate.c \
	math/m_vector.c \
	math/m_xform.c

ARRAY_CACHE_SOURCES = \
	array_cache/ac_context.c \
	array_cache/ac_import.c

SWRAST_SOURCES = \
	swrast/s_aaline.c \
	swrast/s_aatriangle.c \
	swrast/s_accum.c \
	swrast/s_alpha.c \
	swrast/s_alphabuf.c \
	swrast/s_bitmap.c \
	swrast/s_blend.c \
	swrast/s_buffers.c \
	swrast/s_copypix.c \
	swrast/s_context.c \
	swrast/s_depth.c \
	swrast/s_drawpix.c \
	swrast/s_feedback.c \
	swrast/s_fog.c \
	swrast/s_imaging.c \
	swrast/s_lines.c \
	swrast/s_logic.c \
	swrast/s_masking.c \
	swrast/s_nvfragprog.c \
	swrast/s_pixeltex.c \
	swrast/s_points.c \
	swrast/s_readpix.c \
	swrast/s_span.c \
	swrast/s_stencil.c \
	swrast/s_texture.c \
	swrast/s_texstore.c \
	swrast/s_triangle.c \
	swrast/s_zoom.c

SWRAST_SETUP_SOURCES = \
	swrast_setup/ss_context.c \
	swrast_setup/ss_triangle.c \
	swrast_setup/ss_vb.c

TNL_SOURCES = \
	tnl/t_array_api.c \
	tnl/t_array_import.c \
	tnl/t_context.c \
	tnl/t_eval_api.c \
	tnl/t_imm_alloc.c \
	tnl/t_imm_api.c \
	tnl/t_imm_debug.c \
	tnl/t_imm_dlist.c \
	tnl/t_imm_elt.c \
	tnl/t_imm_eval.c \
	tnl/t_imm_exec.c \
	tnl/t_imm_fixup.c \
	tnl/t_pipeline.c \
	tnl/t_vb_fog.c \
	tnl/t_vb_light.c \
	tnl/t_vb_normals.c \
	tnl/t_vb_points.c \
	tnl/t_vb_program.c \
	tnl/t_vb_render.c \
	tnl/t_vb_texgen.c \
	tnl/t_vb_texmat.c \
	tnl/t_vb_vertex.c

ASM_C_SOURCES =	\
	x86/common_x86.c \
	x86/x86.c \
	x86/3dnow.c \
	x86/sse.c \
	sparc/sparc.c

X86_SOURCES =			\
	x86/common_x86_asm.S	\
	x86/glapi_x86.S		\
	x86/x86_xform2.S	\
	x86/x86_xform3.S	\
	x86/x86_xform4.S	\
	x86/x86_cliptest.S	\
	x86/mmx_blend.S		\
	x86/3dnow_xform1.S	\
	x86/3dnow_xform2.S	\
	x86/3dnow_xform3.S	\
	x86/3dnow_xform4.S	\
	x86/3dnow_normal.S	\
	x86/sse_xform1.S	\
	x86/sse_xform2.S	\
	x86/sse_xform3.S	\
	x86/sse_xform4.S	\
	x86/sse_normal.S

SPARC_SOURCES =			\
	sparc/clip.S		\
	sparc/glapi_sparc.S	\
	sparc/norm.S		\
	sparc/xform.S

X11_DRIVER_SOURCES =		\
	drivers/x11/glxapi.c	\
	drivers/x11/fakeglx.c	\
	drivers/x11/xfonts.c	\
	drivers/x11/xm_api.c	\
	drivers/x11/xm_dd.c	\
	drivers/x11/xm_line.c	\
	drivers/x11/xm_span.c	\
	drivers/x11/xm_tri.c

OSMESA_DRIVER_SOURCES = \
	drivers/osmesa/osmesa.c

GLIDE_DRIVER_SOURCES =			\
	drivers/glide/fxapi.c		\
	drivers/glide/fxdd.c		\
	drivers/glide/fxddspan.c	\
	drivers/glide/fxddtex.c		\
	drivers/glide/fxsetup.c		\
	drivers/glide/fxtexman.c	\
	drivers/glide/fxtris.c		\
	drivers/glide/fxvb.c		\
	drivers/glide/fxglidew.c

SVGA_DRIVER_SOURCES =			\
	drivers/svga/svgamesa.c		\
	drivers/svga/svgamesa8.c	\
	drivers/svga/svgamesa15.c	\
	drivers/svga/svgamesa16.c	\
	drivers/svga/svgamesa24.c	\
	drivers/svga/svgamesa32.c



### Groups of files

CORE_SOURCES = \
	$(MAIN_SOURCES)		\
	$(GLAPI_SOURCES)	\
	$(MATH_SOURCES)		\
	$(ARRAY_CACHE_SOURCES)	\
	$(SWRAST_SOURCES)	\
	$(SWRAST_SETUP_SOURCES)	\
	$(TNL_SOURCES)		\
	$(ASM_C_SOURCES)

# This will probably get set to $(X86_SOURCES) in Make-config:
ASM_SOURCES =

# This should get set in Make-config someday:
DRIVER_SOURCES = \
	$(X11_DRIVER_SOURCES) \
	$(GLIDE_DRIVER_SOURCES) \
	$(SVGA_DRIVER_SOURCES)


### Object files

CORE_OBJECTS = $(CORE_SOURCES:.c=.o)

DRIVER_OBJECTS = $(DRIVER_SOURCES:.c=.o)

ASM_OBJECTS = $(ASM_SOURCES:.S=.o)

OSMESA_OBJECTS = $(OSMESA_DRIVER_SOURCES:.c=.o)

OBJECTS = \
	$(CORE_OBJECTS) \
	$(ASM_OBJECTS) \
	$(DRIVER_OBJECTS)


### Include directories

INCLUDE_DIRS = \
	-I$(TOP)/include \
	-I$(TOP)/src/mesa \
	-I$(TOP)/src/mesa/main \
	-I$(TOP)/src/mesa/glapi \
	-I$(TOP)/src/mesa/math \
	-I$(TOP)/src/mesa/transform \
	-I$(TOP)/src/mesa/swrast \
	-I$(TOP)/src/mesa/swrast_setup



##### RULES #####

.c.o:
	$(CC) -c $(INCLUDE_DIRS) $(CFLAGS) $< -o $@

.S.o:
	$(CC) -c $(INCLUDE_DIRS) $(CFLAGS) $< -o $@


x86/matypes.h: main/mtypes.h tnl/t_context.h x86/gen_matypes.c
	$(CC) $(INCLUDE_DIRS) $(CFLAGS) x86/gen_matypes.c -o x86/gen_matypes
	./x86/gen_matypes > x86/matypes.h
	rm -f x86/gen_matypes x86/*.o

x86/common_x86_asm.o: x86/matypes.h



##### TARGETS #####

default:
	@echo "Specify a target configuration"


targets: $(LIBDIR)/$(GL_LIB) $(LIBDIR)/$(OSMESA_LIB)


# Make the GL library
$(LIBDIR)/$(GL_LIB): $(OBJECTS)
	$(TOP)/bin/mklib -o $(GL_LIB_NAME) -major $(GL_MAJOR) \
		-minor $(GL_MINOR) -patch $(GL_TINY) -install $(LIBDIR) \
		$(GL_LIB_DEPS) $(OBJECTS)


# Make the OSMesa library
$(LIBDIR)/$(OSMESA_LIB): $(OSMESA_OBJECTS)
	if [ ${OSMESA_LIB} ] ; then $(TOP)/bin/mklib -o $(OSMESA_LIB_NAME) \
		-major $(MESA_MAJOR) -minor $(MESA_MINOR) -patch $(GL_TINY) \
		-L$(LIBDIR) -l$(GL_LIB_NAME) -install $(LIBDIR) \
		$(OSMESA_OBJECTS) ; fi

# Make an optional library with _just_ core objects
libmesa: $(LIBDIR)/$(MESA_LIB)
	if [ ${MESA_LIB} ] ; then $(MAKELIB) $(MESA_LIB) $(MESA_MAJOR) $(MESA_MINOR) $(GL_TINY) $(CORE_OBJECTS) ; fi
	if [ ${MESA_LIB} ] ; then rm -f $(LIBDIR)/$(MESA_LIB)* ; fi
	if [ ${MESA_LIB} ] ; then mv $(MESA_LIB)* $(LIBDIR) ; fi

$(LIBDIR)/$(MESA_LIB):	$(CORE_OBJECTS)


# Run 'make -f Makefile.X11 dep' to update the dependencies if you change
# what's included by any source file.
dep: $(CORE_SOURCES) $(DRIVER_SOURCES) $(OSMESA_DRIVER_SOURCES) $(ASM_SOURCES)
	makedepend -fdepend -Y -I../include -DGGI -DSVGA -DFX $(CORE_SOURCES) \
		$(DRIVER_SOURCES) $(OSMESA_DRIVER_SOURCES) $(ASM_SOURCES)


# Emacs tags
tags:
	etags `find . -name \*.[ch]` `find ../include`


# Remove .o and backup files
clean:
	-rm -f */*.o */*~ */*.o */*~
	-rm -f drivers/*/*.o
	-rm -f drivers/dri/*/*.o


include $(TOP)/Make-config

include depend