# Mesa 3-D graphics library
# Version:  4.1
# 
# Copyright (C) 1995-2002  Brian Paul   All Rights Reserved.
# 
# 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
# BRIAN PAUL 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.
#
# BeOS driver makefile v1.0 for Mesa 4.1
#
#  Copyright (C) 2002 - Philippe Houdoin
#  Email : philippe.houdoin@free.fr
#  Web   : http://philippe.houdoin.free.fr/phil/beos/index-en.html
#
# -------------------------------------------------------------------

## BeOS Generic Makefile v2.0 ##

## Fill in this file to specify the project being created, and the referenced
## makefile-engine will do all of the hard work for you.  This handles both
## Intel and PowerPC builds of the BeOS.

## Application Specific Settings ---------------------------------------------

# specify the name of the binary
NAME= libGL.so

# specify the type of binary
#	APP:	Application
#	SHARED:	Shared library or add-on
#	STATIC:	Static library archive
#	DRIVER: Kernel Driver
TYPE= SHARED

#	specify the source files to use
#	full paths or paths relative to the makefile can be included
# 	all files, regardless of directory, will have their object
#	files created in the common object directory.
#	Note that this means this makefile will not work correctly
#	if two source files with the same name (source.c or source.cpp)
#	are included from different directories.  Also note that spaces
#	in folder names do not work well with this makefile.

MESA_CORE_SRCS = \
	api_arrayelt.c \
	api_loopback.c \
	api_noop.c \
	api_validate.c \
	accum.c \
	attrib.c \
	blend.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 \
	mmath.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 \
	vpexec.c \
	vpparse.c \
	vpstate.c \
	vtxfmt.c \
	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/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_histogram.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_program.c \
	tnl/t_vb_render.c \
	tnl/t_vb_texgen.c \
	tnl/t_vb_texmat.c \
	tnl/t_vb_vertex.c
	
MESA_BEOS_DRIVER_SRCS = \
	BeOS/GLView.cpp
	
MESA_X86_SRCS = \
	X86/x86.c \
	X86/glapi_x86.S \
	X86/common_x86.c \
	X86/common_x86_asm.S \
	X86/x86_xform2.S \
	X86/x86_xform3.S \
	X86/x86_xform4.S \
	X86/x86_cliptest.S

MESA_MMX_SRCS = \
	X86/mmx_blend.S

MESA_SSE_SRCS = \
	X86/sse.c \
	X86/sse_xform2.S \
	X86/sse_xform3.S \
	X86/sse_xform4.S \
	X86/sse_normal.S

MESA_3DNOW_SRCS = \
	X86/3dnow.c \
	X86/3dnow_normal.S \
	X86/3dnow_xform1.S \
	X86/3dnow_xform2.S \
	X86/3dnow_xform3.S \
	X86/3dnow_xform4.S

MESA_DEFINES =
# To use GAS assembler, uncomment this line instead:
MESA_DEFINES += GNU_ASSEMBLER
# To use NASM assembler, uncomment this line instead:
# MESA_DEFINES += NASM_ASSEMBLER
# To build a DEBUG version of Mesa, uncomment this line instead:
# MESA_DEFINES += DEBUG

# x86-optimized code
MACHINE=$(shell uname -m)
ifeq ($(MACHINE), BePC)
	HAVE_MMX = 1
	HAVE_SSE = 1
	HAVE_3DNOW = 1
else
	# No assembly optimization for PowerPC...
	# HAVE_ALTIVEC=1
endif

ifdef HAVE_MMX
	MESA_X86_SRCS += $(MESA_MMX_SRCS)
	MESA_DEFINES += USE_MMX_ASM
	HAVE_X86 = 1
endif
ifdef HAVE_SSE
	MESA_X86_SRCS += $(MESA_SSE_SRCS)
	MESA_DEFINES += USE_SSE_ASM
	HAVE_X86 = 1
endif
ifdef HAVE_3DNOW
	MESA_X86_SRCS += $(MESA_3DNOW_SRCS)
	MESA_DEFINES += USE_3DNOW_ASM
	HAVE_X86 = 1
endif
ifdef HAVE_X86
	MESA_DEFINES += USE_X86_ASM
else
	MESA_X86_SRCS =
endif

# FIXME: SI-GLU version support currently broken
# USE_SI_GLU=1
ifdef USE_SI_GLU
	GLU_SRCS = \
	../si-glu/libutil/error.c		\
	../si-glu/libutil/glue.c		\
	../si-glu/libutil/mipmap.c	\
	../si-glu/libutil/project.c	\
	../si-glu/libutil/quad.c		\
	../si-glu/libutil/registry.c	\
	../si-glu/libtess/dict.c		\
	../si-glu/libtess/geom.c		\
	../si-glu/libtess/memalloc.c	\
	../si-glu/libtess/mesh.c		\
	../si-glu/libtess/normal.c	\
	../si-glu/libtess/priorityq.c	\
	../si-glu/libtess/render.c	\
	../si-glu/libtess/sweep.c		\
	../si-glu/libtess/tess.c		\
	../si-glu/libtess/tessmono.c	\
	../si-glu/libnurbs/interface/bezierEval.cc		\
	../si-glu/libnurbs/interface/bezierPatch.cc		\
	../si-glu/libnurbs/interface/bezierPatchMesh.cc		\
	../si-glu/libnurbs/interface/glcurveval.cc		\
	../si-glu/libnurbs/interface/glinterface.cc		\
	../si-glu/libnurbs/interface/glrenderer.cc		\
	../si-glu/libnurbs/interface/glsurfeval.cc		\
	../si-glu/libnurbs/interface/incurveeval.cc		\
	../si-glu/libnurbs/interface/insurfeval.cc		\
	../si-glu/libnurbs/internals/arc.cc			\
	../si-glu/libnurbs/internals/arcsorter.cc			\
	../si-glu/libnurbs/internals/arctess.cc			\
	../si-glu/libnurbs/internals/backend.cc			\
	../si-glu/libnurbs/internals/basiccrveval.cc		\
	../si-glu/libnurbs/internals/basicsurfeval.cc		\
	../si-glu/libnurbs/internals/bin.cc			\
	../si-glu/libnurbs/internals/bufpool.cc			\
	../si-glu/libnurbs/internals/cachingeval.cc		\
	../si-glu/libnurbs/internals/ccw.cc			\
	../si-glu/libnurbs/internals/coveandtiler.cc		\
	../si-glu/libnurbs/internals/curve.cc			\
	../si-glu/libnurbs/internals/curvelist.cc			\
	../si-glu/libnurbs/internals/curvesub.cc			\
	../si-glu/libnurbs/internals/dataTransform.cc		\
	../si-glu/libnurbs/internals/displaylist.cc		\
	../si-glu/libnurbs/internals/flist.cc			\
	../si-glu/libnurbs/internals/flistsorter.cc		\
	../si-glu/libnurbs/internals/hull.cc			\
	../si-glu/libnurbs/internals/intersect.cc			\
	../si-glu/libnurbs/internals/knotvector.cc		\
	../si-glu/libnurbs/internals/mapdesc.cc			\
	../si-glu/libnurbs/internals/mapdescv.cc			\
	../si-glu/libnurbs/internals/maplist.cc			\
	../si-glu/libnurbs/internals/mesher.cc			\
	../si-glu/libnurbs/internals/monoTriangulationBackend.cc	\
	../si-glu/libnurbs/internals/monotonizer.cc		\
	../si-glu/libnurbs/internals/mycode.cc			\
	../si-glu/libnurbs/internals/nurbsinterfac.cc		\
	../si-glu/libnurbs/internals/nurbstess.cc			\
	../si-glu/libnurbs/internals/patch.cc			\
	../si-glu/libnurbs/internals/patchlist.cc			\
	../si-glu/libnurbs/internals/quilt.cc			\
	../si-glu/libnurbs/internals/reader.cc			\
	../si-glu/libnurbs/internals/renderhints.cc		\
	../si-glu/libnurbs/internals/slicer.cc			\
	../si-glu/libnurbs/internals/sorter.cc			\
	../si-glu/libnurbs/internals/splitarcs.cc			\
	../si-glu/libnurbs/internals/subdivider.cc		\
	../si-glu/libnurbs/internals/tobezier.cc			\
	../si-glu/libnurbs/internals/trimline.cc			\
	../si-glu/libnurbs/internals/trimregion.cc		\
	../si-glu/libnurbs/internals/trimvertpool.cc		\
	../si-glu/libnurbs/internals/uarray.cc			\
	../si-glu/libnurbs/internals/varray.cc			\
	../si-glu/libnurbs/nurbtess/directedLine.cc		\
	../si-glu/libnurbs/nurbtess/gridWrap.cc			\
	../si-glu/libnurbs/nurbtess/monoChain.cc			\
	../si-glu/libnurbs/nurbtess/monoPolyPart.cc		\
	../si-glu/libnurbs/nurbtess/monoTriangulation.cc		\
	../si-glu/libnurbs/nurbtess/partitionX.cc			\
	../si-glu/libnurbs/nurbtess/partitionY.cc			\
	../si-glu/libnurbs/nurbtess/polyDBG.cc			\
	../si-glu/libnurbs/nurbtess/polyUtil.cc			\
	../si-glu/libnurbs/nurbtess/primitiveStream.cc		\
	../si-glu/libnurbs/nurbtess/quicksort.cc			\
	../si-glu/libnurbs/nurbtess/rectBlock.cc			\
	../si-glu/libnurbs/nurbtess/sampleComp.cc			\
	../si-glu/libnurbs/nurbtess/sampleCompBot.cc		\
	../si-glu/libnurbs/nurbtess/sampleCompRight.cc		\
	../si-glu/libnurbs/nurbtess/sampleCompTop.cc		\
	../si-glu/libnurbs/nurbtess/sampleMonoPoly.cc		\
	../si-glu/libnurbs/nurbtess/sampledLine.cc		\
	../si-glu/libnurbs/nurbtess/searchTree.cc
else
	GLU_SRCS = \
		../src-glu/glu.c \
		../src-glu/mipmap.c \
		../src-glu/project.c \
		../src-glu/quadric.c \
		../src-glu/tess.c \
		../src-glu/tesselat.c \
		../src-glu/polytest.c \
		../src-glu/nurbs.c \
		../src-glu/nurbscrv.c \
		../src-glu/nurbssrf.c \
		../src-glu/nurbsutl.c
endif

SRCS =  $(MESA_CORE_SRCS) $(MESA_X86_SRCS) $(GLU_SRCS) $(MESA_BEOS_DRIVER_SRCS) 
		
#	specify the resource files to use
#	full path or a relative path to the resource file can be used.
RSRCS = 

#	specify additional libraries to link against
#	there are two acceptable forms of library specifications
#	-	if your library follows the naming pattern of:
#		libXXX.so or libXXX.a you can simply specify XXX
#		library: libbe.so entry: be
#		
#	- 	if your library does not follow the standard library
#		naming scheme you need to specify the path to the library
#		and it's name
#		library: my_lib.a entry: my_lib.a or path/my_lib.a
LIBS = be
		
#	specify additional paths to directories following the standard
#	libXXX.so or libXXX.a naming scheme.  You can specify full paths
#	or paths relative to the makefile.  The paths included may not
#	be recursive, so include all of the paths where libraries can
#	be found.  Directories where source files are found are
#	automatically included.
LIBPATHS =

#	additional paths to look for system headers
#	thes use the form: #include <header>
#	source file directories are NOT auto-included here
SYSTEM_INCLUDE_PATHS = ../include
ifdef USE_SI_GLU
	SYSTEM_INCLUDE_PATHS += ../si-glu/include
endif

#	additional paths to look for local headers
#	thes use the form: #include "header"
#	source file directories are automatically included
LOCAL_INCLUDE_PATHS = 

#	specify the level of optimization that you desire
#	NONE, SOME, FULL
OPTIMIZE = FULL

#	specify any preprocessor symbols to be defined.  The symbols
#	will be set to a value of 1.  For example specify DEBUG if you want
#	DEBUG=1 to be set when compiling.
DEFINES = $(MESA_DEFINES)

#	specify special warning levels
#	if unspecified default warnings will be used
#	NONE = suppress all warnings
#	ALL = enable all warnings
WARNINGS = ALL

#	specify whether image symbols will be created
#	so that stack crawls in the debugger are meaningful
#	if TRUE symbols will be created
SYMBOLS = TRUE 

#	specify debug settings
#	if TRUE will allow application to be run from
#	a source-level debugger
# DEBUGGER = TRUE
DEBUGGER = FALSE

#	specify additional compiler flags for all files
COMPILER_FLAGS = 

#	specify additional linker flags
LINKER_FLAGS =



## include the makefile-engine
include /boot/develop/etc/makefile-engine



# X86/matypes.h include file is *generated*!
# Rules to (re)generate it as needed:

X86/common_x86_asm.S : X86/matypes.h

X86/matypes.h : X86/gen_matypes.c
	@echo "(Re-)Generating $@ ..."
	$(CC) $< $(INCLUDES) $(CFLAGS)  -o X86/gen_matypes
	X86/gen_matypes > $@
	rm -f X86/gen_matypes

## Add NASM support for assembly code compilation...
# $(OBJ_DIR)/%.o : %.nasm
#	nasm -f elf $(MESA_DEFINES) -o $@ $<

$(OBJ_DIR)/%.o : %.S
	gcc -c $< $(INCLUDES) $(CFLAGS) -o $@
#	gcc $(INCLUDES) $(CFLAGS) -E $< | grep -v '^$$' > $(addsuffix .nasm, $(basename $<))
#	nasm -f elf $(MESA_DEFINES) -o $@ $(addsuffix .nasm, $(basename $<))

