# Mesa 3-D graphics library
# Version:  4.0
# 
# Copyright (C) 1999  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.

# MinGW makefile v1.2 for Mesa
#
#  Copyright (C) 2002 - Daniel Borca
#  Email : dborca@users.sourceforge.net
#  Web   : http://www.geocities.com/dborca


#
#  Available options:
#
#    Environment variables:
#	CPU		optimize for the given processor.
#			default = pentium
#	GLIDE		path to Glide3 SDK; used with FX.
#			default = $(TOP)/glide3
#	FX=1		build for 3dfx Glide3. Note that this disables
#			compilation of most WMesa code and requires fxMesa.
#			As a consequence, you'll need the Win32 Glide3
#			library to build any application.
#			default = no
#	ICD=1		build the installable client driver interface
#			(windows opengl driver interface)
#			default = no
#	X86=1		optimize for x86 (if possible, use MMX, SSE, 3DNow).
#			default = no
#
#    Targets:
#	all:		build everything
#	libgl:		build GL
#	clean:		remove object files
#	realclean:	remove all generated files
#



.PHONY : all libgl clean realclean

CPU ?= pentium

ifeq ($(ICD),1)
  # when -std=c99 mingw will not define WIN32
  CFLAGS = -Wall -W -Werror
else
  # I love c89
  CFLAGS = -Wall -W -pedantic
endif
CFLAGS += -O2 -ffast-math -mtune=$(CPU)

export CFLAGS

ifeq ($(wildcard $(addsuffix /rm.exe,$(subst ;, ,$(PATH)))),)
UNLINK = del $(subst /,\,$(1))
else
UNLINK = $(RM) $(1)
endif

all: libgl

libgl: lib
	$(MAKE) -f Makefile.mgw -C src/mesa

lib:
	mkdir lib

clean:
	$(MAKE) -f Makefile.mgw clean -C src/mesa

realclean: clean
	-$(call UNLINK,lib/*.a)
	-$(call UNLINK,lib/*.dll)
