# Mesa 3-D graphics library
# Version:  4.1
#
# Copyright (C) 2001 Wind River Systems, Inc

# The MIT License
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
# 
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
# 
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
# DEALINGS IN THE SOFTWARE.

# Makefile for core library

# This makefile can moved all objects files in MESA_OBJ for use with
# ld in windShell or create a library from objects files in their
# associated .c folder.
#
# For an easy inclusion of lib$(CPU)$(TOOL)GL.a in vxworks image, this
# makefile collects together all .o in an only file
# (obj$(CPU)$(TOOL)GL.o). This operation is unnecessary for
# lib$(CPU)$(TOOL)OSMesa.a and lib$(CPU)$(TOOL)UglMesa.a because they
# already contain only one file.
#
##### MACROS #####
MESA_MAJOR=4
MESA_MINOR=1
MESA_TINY=0
VERSION=$(MESA_MAJOR).$(MESA_MINOR)

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

##### RULES #####

include ..\rules.windml

#### GL #####

GL_SOURCES = \
	api_arrayelt.c \
	api_loopback.c \
	api_noop.c \
	api_validate.c \
	accum.c \
	arbprogram.c \
	attrib.c \
	blend.c \
	bufferobj.c \
	buffers.c \
	clip.c \
	colortab.c \
	context.c \
	convolve.c \
	debug.c \
	depth.c \
	dispatch.c \
	dlist.c \
	drawpix.c \
	enable.c \
	enums.c \
	eval.c \
	extensions.c \
	feedback.c \
	fog.c \
	get.c \
	glapi.c \
	glthread.c \
	hash.c \
	hint.c \
	histogram.c \
	image.c \
	imports.c \
	light.c \
	lines.c \
	matrix.c \
	pixel.c \
	points.c \
	polygon.c \
	rastpos.c \
	state.c \
	stencil.c \
	texcompress.c \
	texformat.c \
	teximage.c \
	texobj.c \
	texstate.c \
	texstore.c \
	texutil.c \
	varray.c \
	vtxfmt.c \
	X86/x86.c \
	X86/common_x86.c \
	X86/3dnow.c \
	X86/sse.c \
	math/m_debug_clip.c \
	math/m_debug_norm.c \
	math/m_debug_vertex.c \
	math/m_debug_xform.c \
	math/m_eval.c \
	math/m_matrix.c \
	math/m_translate.c \
	math/m_vector.c \
	math/m_vertices.c \
	math/m_xform.c \
	array_cache/ac_context.c \
	array_cache/ac_import.c \
	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_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/ss_context.c \
	swrast_setup/ss_triangle.c \
	swrast_setup/ss_vb.c \
	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_render.c \
	tnl/t_vb_texgen.c \
	tnl/t_vb_texmat.c \
	tnl/t_vb_vertex.c

GL_OBJECTS = $(GL_SOURCES:.c=.o)
GL_OBJNAME = $(MESA_LIBDIR)/objMesaGL.o

#### X86 #####

x86_files = \
	X86/common_x86_asm.S \
	X86/glapi_x86.S \
	X86/x86_cliptest.S \
	X86/x86_vertex.S \
	X86/x86_xform2.S \
	X86/x86_xform3.S \
	X86/x86_xform4.S \

x3dnow_files = \
	X86/3dnow_normal.S \
	X86/3dnow_vertex.S \
	X86/3dnow_xform1.S \
	X86/3dnow_xform2.S \
	X86/3dnow_xform3.S \
	X86/3dnow_xform4.S

sse_files = \
	X86/sse_normal.S \
	X86/sse_vertex.S \
	X86/sse_xform1.S \
	X86/sse_xform2.S \
	X86/sse_xform3.S \
	X86/sse_xform4.S

mmx_files = X86/mmx_blend.S

X86_OBJNAME = $(MESA_LIBDIR)/objMesaX86.o

##### UGL #####

UGL_SOURCES = \
	windml/ugl_api.c \
	windml/ugl_dd.c \
	windml/ugl_span.c \
	windml/ugl_line.c \
	windml/ugl_tri.c \
	windml/tornado/torMesaUGLInit.c

UGL_OBJECTS = $(UGL_SOURCES:.c=.o)
UGL_OBJNAME = $(MESA_LIBDIR)/objMesaUGL.o

##### OS #####

OS_SOURCES = OSmesa/osmesa.c windml/tornado/torMesaOSInit.c
OS_OBJECTS = $(OS_SOURCES:.c=.o)
OS_OBJNAME = $(MESA_LIBDIR)/objMesaOS.o

##### GLUTSHAPES #####

GLUTSHAPES_SOURCES = \
	windml/ugl_glutshapes.c \
	windml/tornado/torGLUTShapesInit.c

GLUTSHAPES_OBJECTS = $(GLUTSHAPES_SOURCES:.c=.o)
GLUTSHAPES_OBJNAME = $(MESA_LIBDIR)/objGLUTShapes.o

SOURCES = $(GL_SOURCES) $(UGL_SOURCES) $(OS_SOURCES) \
	$(GLUTSHAPES_SOURCES)

##### TARGETS #####

all: depend.$(CPU)$(TOOL) cfgX86 $(X86_OBJNAME) $(GL_OBJNAME)\
$(UGL_OBJNAME) $(OS_OBJNAME) $(GLUTSHAPES_OBJNAME)

#histogram.o:
#	$(CC) $(CFLAGS) -O1 $(OPTION_OBJECT_ONLY) $(OPTION_OBJECT_NAME)$@ $<

#image.o:
#	$(CC) $(CFLAGS) -O1 $(OPTION_OBJECT_ONLY) $(OPTION_OBJECT_NAME)$@ $<

cfgX86:
ifdef HAVE_3DNOW
x3dnow_sources = $(x3dnow_files)
CFLAGS_3DNOW = -DUSE_3DNOW_ASM
HAVE_X86 = 1
endif
ifdef HAVE_SSE
sse_sources = $(sse_files)
CFLAGS_SSE = -DUSE_SSE_ASM
HAVE_X86 = 1
endif
ifdef HAVE_MMX
mmx_sources = $(mmx_files)
CFLAGS_MMX = -DUSE_MMX_ASM
HAVE_X86 = 1
endif
ifdef HAVE_X86
x86_sources = $(x86_files)
CFLAGS_X86 = -DUSE_X86_ASM
endif
X86_SOURCES = $(x86_sources) $(mmx_sources) \
	$(x3dnow_sources) $(sse_sources)
X86_OBJECTS = $(X86_SOURCES:.S=.o)
CFLAGS_USE_X86 = $(CFLAGS_3DNOW) $(CFLAGS_SSE) $(CFLAGS_MMX) $(CFLAGS_X86)

#X86/matypes.h: mtypes.h tnl/t_context.h X86/gen_matypes.c
#	$(CC) -I ./ X86/gen_matypes.c -o X86/gen_matypes
#	./X86/gen_matypes > X86/matypes.h
#	$(RM) X86/gen_matypes
#	$(RM) X86/gen_matypes.o

# Make the Mesax86 library
$(X86_OBJNAME): $(X86_OBJECTS)
ifdef HAVE_X86
#	$(LD) -r $(X86_OBJECTS) -o $(MESA_OBJNAME)
	$(LD) -r $(X86_OBJECTS) -o $(X86_OBJNAME)
#	$(AR) rus $(MESA_LIBNAME) $(X86_OBJNAME)
#	$(RM) $(X86_OBJNAME)
endif

# Make the GL library
$(GL_OBJNAME): $(GL_OBJECTS)
#	$(LD) -r $(GL_OBJECTS) -o $(MESA_OBJNAME)
	$(LD) -r $(GL_OBJECTS) -o $(GL_OBJNAME)
#	$(AR) rus $(MESA_LIBNAME) $(GL_OBJNAME)
#	$(AR) rus $(VX_LIBNAME) $(GL_OBJNAME)
#	$(RM) $(GL_OBJNAME)

# Make the UGLMesa library
$(UGL_OBJNAME): $(UGL_OBJECTS)
#	$(LD) -r $(UGL_OBJECTS) -o $(MESA_OBJNAME)
	$(LD) -r $(UGL_OBJECTS) -o $(UGL_OBJNAME)
#	$(AR) rus $(MESA_LIBNAME) $(UGL_OBJNAME)
#	$(AR) rus $(VX_LIBNAME) $(UGL_OBJNAME)
#	$(RM) $(UGL_OBJNAME)

# Make the OSMesa library
$(OS_OBJNAME): $(OS_OBJECTS)
#	$(LD) -r $(OS_OBJECTS) -o $(MESA_OBJNAME)
	$(LD) -r $(OS_OBJECTS) -o $(OS_OBJNAME)
#	$(AR) rus $(MESA_LIBNAME) $(OS_OBJNAME)
#	$(AR) rus $(VX_LIBNAME) $(OS_OBJNAME)
#	$(RM) $(OS_OBJNAME)

# Make the GLUT Shapes library
$(GLUTSHAPES_OBJNAME): $(GLUTSHAPES_OBJECTS)
#	$(LD) -r $(GLUTSHAPES_OBJECTS) -o $(MESA_OBJNAME)
	$(LD) -r $(GLUTSHAPES_OBJECTS) -o $(GLUTSHAPES_OBJNAME)
#	$(AR) rus $(MESA_LIBNAME) $(GLUTSHAPES_OBJNAME)
#	$(AR) rus $(VX_LIBNAME) $(GLUTSHAPES_OBJNAME)
#	$(RM) $(GLUTSHAPES_OBJNAME)

depend.$(CPU)$(TOOL):
ifeq ($(WIND_HOST_TYPE),x86-win32)
	@ $(RM) $@
	@ $(ECHO) Creating depend.$(CPU)$(TOOL)
ifneq ($(SOURCES),)
	@ for %f in ($(SOURCES)) do \
	$(CC) -MM $(CFLAGS) %f >>$@ 
endif
else
Makefile
	@ $(RM) $@
	@ $(ECHO) "Creating depend.$(CPU)$(TOOL)"
ifneq ($(SOURCES),)
	@ for FILE in $(filter-out $(NODEPENDOBJS), $(SOURCES)); \
	do \
	$(CC) -MM $(CFLAGS) $$FILE  \
	| $(TCL) $(BIN_DIR)/depend.tcl $(TGT_DIR) >>$@; \
	done	
endif
endif

.PHONY = clean

clean:
# 	$(AR) d $(MESA_LIBNAME) $(GL_OBJNAME)
# 	$(AR) d $(MESA_LIBNAME) $(UGL_OBJNAME)
# 	$(AR) d $(MESA_LIBNAME) $(OS_OBJNAME)
# 	$(AR) d $(MESA_LIBNAME) $(GLUTSHAPES_OBJNAME)
# 	$(AR) d $(VX_LIBNAME) $(GL_OBJNAME)
# 	$(AR) d $(VX_LIBNAME) $(UGL_OBJNAME)
# 	$(AR) d $(VX_LIBNAME) $(OS_OBJNAME)
# 	$(AR) d $(VX_LIBNAME) $(GLUTSHAPES_OBJNAME)
	$(RM) $(GL_OBJECTS)
	$(RM) $(UGL_OBJECTS)
	$(RM) $(OS_OBJECTS)
	$(RM) $(GLUTSHAPES_OBJECTS)
	$(RM) $(GL_OBJNAME)
	$(RM) $(UGL_OBJNAME)
	$(RM) $(OS_OBJNAME)
	$(RM) $(GLUTSHAPES_OBJNAME)
	$(RM) depend.$(CPU)$(TOOL)

include depend.$(CPU)$(TOOL)