# $OpenBSD: Makefile,v 1.8 2007/04/07 15:37:50 matthieu Exp $

all: ${OBJS}
LIB=	GL

MESA=	${.CURDIR}/../../dist/Mesa/src/mesa
GL=	${.CURDIR}/../../dist/Mesa/src/GL
GLX=	${.CURDIR}/../../dist/Mesa/src/glx/x11
MESA_INCLUDE=	${.CURDIR}/../../dist/Mesa/include

INCSDIR=	${X11BASE}/include/GL
LDADD=		-L${X11BASE}/lib -lXext -lX11

CPP=	cpp -notraditional
DEBUG?=

CPPFLAGS+= \
	-I. \
	-I${MESA_INCLUDE} \
	-I${MESA} \
	-I${MESA}/main \
	-I${MESA}/math \
	-I${MESA}/glapi \
	-I${MESA}/tnl \
	-I${MESA}/shader \
	-I${MESA}/shader/grammar \
	-I${MESA}/shader/slang \
	-I${MESA}/shader/slang/OSDependent/Linux \
	-I${MESA}/shader/slang/OGLCompilersDLL \
	-I${MESA}/x86 \
	-I${MESA}/drivers/dri/common \
	-I${GL}/dri \
	-I${GLX} \
	-I${X11BASE}/include \
	-DCSRG_BASED  \
	-DUSE_GAS  \
	-DGLX_INDIRECT_RENDERING \
	-DGLX_USE_MESA  \
	-DXF86VIDMODE 

.if ${MACHINE_ARCH} == "i386"
CPPFLAGS += \
	-DUSE_X86_ASM \
	-DUSE_MMX_ASM \
	-DUSE_3DNOW_ASM \
	-DUSE_SSE_ASM
.elif ${MACHINE_ARCH} == "amd64"
CPPFLAGS += -D__GLX_ALIGN64
.endif

INCS= \
	gl.h \
	glext.h \
	glx.h \
	glxext.h \
	osmesa.h

# main
MAIN_SOURCES= \
	accum.c \
	api_arrayelt.c \
	api_loopback.c \
	api_noop.c \
	api_validate.c \
	arrayobj.c  \
	attrib.c \
	blend.c \
	bufferobj.c \
	buffers.c \
	clip.c \
	colortab.c \
	context.c \
	convolve.c \
	debug.c \
	depth.c \
	depthstencil.c \
	dlist.c \
	drawpix.c \
	enable.c \
	enums.c \
	eval.c \
	execmem.c \
	extensions.c \
	feedback.c \
	fbobject.c \
	fog.c \
	framebuffer.c \
	get.c \
	getstring.c \
	hash.c \
	hint.c \
	histogram.c \
	image.c \
	imports.c \
	light.c \
	lines.c \
	matrix.c \
	mipmap.c \
	mm.c \
	occlude.c \
	pixel.c \
	points.c \
	polygon.c \
	rastpos.c \
	renderbuffer.c \
	state.c \
	stencil.c \
	texcompress.c \
	texcompress_fxt1.c \
	texcompress_s3tc.c \
	texenvprogram.c \
	texformat.c \
	teximage.c \
	texobj.c \
	texrender.c \
	texstate.c \
	texstore.c \
	varray.c \
	vtxfmt.c

GLAPI_SOURCES= \
	dispatch.c \
	glapi.c \
	glthread.c

.if ${MACHINE_ARCH} == "i386"
GLAPI_SOURCES+= \
	glapi_x86.S 
.endif

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

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


# swrast
SWRAST_SOURCES= \
	s_aaline.c \
	s_aatriangle.c \
	s_accum.c \
	s_alpha.c \
	s_arbshader.c \
	s_atifragshader.c \
	s_bitmap.c \
	s_blend.c \
	s_blit.c \
	s_buffers.c \
	s_copypix.c \
	s_context.c \
	s_depth.c \
	s_drawpix.c \
	s_feedback.c \
	s_fog.c \
	s_imaging.c \
	s_lines.c \
	s_logic.c \
	s_masking.c \
	s_nvfragprog.c \
	s_points.c \
	s_readpix.c \
	s_span.c \
	s_stencil.c \
	s_texcombine.c \
	s_texfilter.c \
	s_texstore.c \
	s_triangle.c \
	s_zoom.c

# swrast_setup
SWRAST_SETUP_SOURCES= \
	ss_context.c \
	ss_triangle.c

# tnl
TNL_SOURCES= \
	t_array_api.c \
	t_array_import.c \
	t_context.c \
	t_pipeline.c \
	t_save_api.c \
	t_save_loopback.c \
	t_save_playback.c \
	t_vb_arbprogram.c \
	t_vb_arbprogram_sse.c \
	t_vb_arbshader.c\
	t_vb_program.c \
	t_vb_render.c \
	t_vb_texgen.c \
	t_vb_texmat.c \
	t_vb_vertex.c \
	t_vb_cull.c \
	t_vb_fog.c \
	t_vb_light.c \
	t_vb_normals.c \
	t_vb_points.c \
	t_vp_build.c \
	t_vertex.c \
	t_vertex_sse.c \
	t_vertex_generic.c \
	t_vtx_api.c \
	t_vtx_generic.c \
	t_vtx_x86.c \
	t_vtx_eval.c \
	t_vtx_exec.c 

# shader
SHADER_SOURCES=	\
	arbprogparse.c \
	arbprogram.c \
	atifragshader.c \
	grammar_mesa.c \
	nvfragparse.c \
	nvprogram.c \
	nvvertexec.c \
	nvvertparse.c \
	program.c \
	shaderobjects.c \
	shaderobjects_3dlabs.c

# shader/slang C
SLANG_C_SOURCES=	\
	atom.c \
	cpp.c \
	cppstruct.c \
	memory.c \
	scanner.c \
	symbols.c \
	tokens.c

# shader/slang CPP
SLANG_CPP_SOURCES= \
	slang_mesa.cpp	\
	Gen_glslang.cpp	\
	Gen_glslang_tab.cpp	\
	InfoSink.cpp	\
	Initialize.cpp	\
	Intermediate.cpp	\
	intermOut.cpp	\
	IntermTraverse.cpp	\
	parseConst.cpp	\
	ParseHelper.cpp	\
	PoolAlloc.cpp	\
	QualifierAlive.cpp	\
	RemoveTree.cpp	\
	ShaderLang.cpp	\
	SymbolTable.cpp	\
	Initialisation.cpp	\
	ossource.cpp

# shader/slang
SLANG_SOURCES= \
	slang_analyse.c	\
	slang_assemble.c	\
	slang_assemble_assignment.c	\
	slang_assemble_conditional.c	\
	slang_assemble_constructor.c	\
	slang_assemble_typeinfo.c	\
	slang_compile.c	\
	slang_compile_function.c	\
	slang_compile_operation.c	\
	slang_compile_struct.c	\
	slang_compile_variable.c	\
	slang_execute.c	\
	slang_export.c	\
	slang_library_noise.c	\
	slang_library_texsample.c	\
	slang_link.c	\
	slang_preprocess.c	\
	slang_storage.c	\
	slang_utility.c

.if ${MACHINE_ARCH} == "i386"
# x86
ASM_C_SOURCES= \
	common_x86.c \
	x86.c \
	3dnow.c \
	sse.c \
	x86sse.c \
	slang_execute_x86.c

X86_SOURCES= \
	common_x86_asm.S \
	x86_xform2.S \
	x86_xform3.S \
	x86_xform4.S \
	x86_cliptest.S \
	mmx_blend.S \
	3dnow_xform1.S \
	3dnow_xform2.S \
	3dnow_xform3.S \
	3dnow_xform4.S \
	3dnow_normal.S \
	sse_xform1.S \
	sse_xform2.S \
	sse_xform3.S \
	sse_xform4.S \
	sse_normal.S \
	read_rgba_span_x86.S \
	t_vtx_x86_gcc.S
.endif

GLX_SOURCES= \
	  glcontextmodes.c \
	  clientattrib.c \
	  compsize.c \
	  glxeval.c \
	  glxcmds.c \
	  glxext.c \
	  glxextensions.c \
	  indirect.c \
	  indirect_init.c \
	  indirect_size.c \
	  indirect_window_pos.c \
	  indirect_transpose_matrix.c \
	  indirect_vertex_array.c \
	  indirect_vertex_program.c \
	  glxpixel.c \
	  pixelstore.c \
	  render2.c \
	  renderpix.c \
	  single2.c \
	  singlepix.c \
	  vertarr.c \
	  xfont.c \
	  glx_pbuffer.c \
	  glx_query.c \
	  glx_texture_compression.c \
	  dri_glx.c

SRCS = 	$(MAIN_SOURCES)		\
	$(MATH_SOURCES)		\
	$(ARRAY_CACHE_SOURCES)	\
	$(TNL_SOURCES)		\
	$(SHADER_SOURCES)	\
	$(SWRAST_SOURCES)	\
	$(SWRAST_SETUP_SOURCES)	\
	$(ASM_C_SOURCES)	\
	$(SLANG_SOURCES)	\
	$(X86_SOURCES)		\
	$(GLAPI_SOURCES)	\
	$(GLX_SOURCES)

#	$(SLANG_C_SOURCES)


includes:
	cd ${MESA_INCLUDE}/GL; for i in ${INCS}; do \
	    j="cmp -s $$i ${DESTDIR}${INCSDIR}/GL/$$i || \
		${INSTALL} ${INSTALL_COPY} -o ${BINOWN} -g ${BINGRP} -m 444 \
		$$i ${DESTDIR}${INCSDIR}/GL"; \
		echo "\tinstalling $$i"; \
		eval "$$j"; \
	done

gen_matypes: gen_matypes.c
	$(CC) $(CPPFLAGS) $(CFLAGS) ${MESA}/x86/gen_matypes.c -o gen_matypes

matypes.h: mtypes.h t_context.h gen_matypes
	./gen_matypes > matypes.h

CLEANFILES+= gen_matypes matypes.h

common_x86_asm.o: matypes.h
3dnow_normal.o: matypes.h
3dnow_xform1.o: matypes.h
3dnow_xform2.o: matypes.h
3dnow_xform3.o: matypes.h
3dnow_xform4.o: matypes.h
mmx_blend.o: matypes.h
sse_normal.o: matypes.h
sse_xform1.o: matypes.h
sse_xform2.o: matypes.h
sse_xform3.o: matypes.h
sse_xform4.o: matypes.h
x86_cliptest.o: matypes.h
x86_xform2.o: matypes.h
x86_xform3.o: matypes.h
x86_xform4.o: matypes.h

NOPROFILE=

obj: _xenocara_obj

.include <bsd.lib.mk>
.include <bsd.xorg.mk>

.if ${MACHINE_ARCH} == powerpc || ${MACHINE_ARCH} == sparc
PICFLAG = -fPIC
.endif

# name conflicts
glxeval.c: ${GLX}/eval.c
	ln -s ${GLX}/eval.c $@

glxpixel.c: ${GLX}/pixel.c
	ln -s ${GLX}/pixel.c $@

CLEANFILES+= glxeval.c glxpixel.c

.PATH: ${MESA}/x86
.PATH: ${MESA}/x86/rtasm
.PATH: ${MESA}/array_cache
.PATH: ${MESA}/glapi
.PATH: ${MESA}/main
.PATH: ${MESA}/math
.PATH: ${MESA}/swrast
.PATH: ${MESA}/swrast_setup
.PATH: ${MESA}/tnl
.PATH: ${MESA}/shader
.PATH: ${MESA}/shader/grammar
.PATH: ${MESA}/shader/slang
.PATH: ${MESA}/shader/slang/MachineIndependent
.PATH: ${MESA}/shader/slang/MachineIndependent/preprocessor
.PATH: ${MESA}/shader/slang/OGLCompilersDLL
.PATH: ${MESA}/shader/slang/OSDependent/Linux
.PATH: ${MESA}/drivers/dri/common
.PATH: ${GLX}

.SUFFIXES: .cpp

.cpp.o:
	@echo "${COMPILE.cc} ${.IMPSRC} -o ${.TARGET}"
	@${COMPILE.cc} ${.IMPSRC} -o ${.TARGET}.o
	@${LD} -X -r ${.TARGET}.o -o ${.TARGET}
	@rm -f ${.TARGET}.o

.cpp.go:
	@echo "${COMPILE.cc} -g ${.IMPSRC} -o ${.TARGET}"
	@${COMPILE.cc} -g ${.IMPSRC} -o ${.TARGET}.o
	@${LD} -X -r ${.TARGET}.o -o ${.TARGET}
	@rm -f ${.TARGET}.o

.cpp.po:
	@echo "${COMPILE.cc} -p ${.IMPSRC} -o ${.TARGET}"
	@${COMPILE.cc} -p ${.IMPSRC} -o ${.TARGET}.o
	@${LD} -X -r ${.TARGET}.o -o ${.TARGET}
	@rm -f ${.TARGET}.o

.cpp.so:
	@echo "${COMPILE.cc} ${PICFLAG} -DPIC ${.IMPSRC} -o ${.TARGET}"
	@${COMPILE.cc} ${PICFLAG} -DPIC ${.IMPSRC} -o ${.TARGET}.o
	@${LD} -X -r ${.TARGET}.o -o ${.TARGET}
	@rm -f ${.TARGET}.o

