# src/gallium/targets/Makefile.xorg

# Template makefile for gallium xorg drivers.
#
# Usage:
#   The minimum that the including makefile needs to define
#   is TOP, LIBNAME and one of of the *_SOURCES.
#
# Optional defines:
#   DRIVER_INCLUDES are appended to the list of includes directories.
#   DRIVER_DEFINES is not used for makedepend, but for compilation.
#   DRIVER_PIPES are pipe drivers and modules that the driver depends on.
#   DRIVER_LINKS are flags given to the linker.

### Basic defines ###

OBJECTS = $(C_SOURCES:.c=.o) \
	$(CPP_SOURCES:.cpp=.o) \
	$(ASM_SOURCES:.S=.o)

INCLUDES = \
	$(shell pkg-config --cflags-only-I pixman-1 xorg-server libdrm xproto) \
	-I$(TOP)/src/gallium/include \
	-I$(TOP)/src/gallium/drivers \
	-I$(TOP)/src/gallium/auxiliary \
	-I$(TOP)/src/gallium/winsys \
	$(DRIVER_INCLUDES)

LIBNAME_STAGING = $(TOP)/$(LIB_DIR)/gallium/$(TARGET)

ifeq ($(MESA_LLVM),1)
LD = $(CXX)
LDFLAGS += $(LLVM_LDFLAGS)
USE_CXX=1
DRIVER_PIPES += $(TOP)/src/gallium/drivers/llvmpipe/libllvmpipe.a
DRIVER_LINKS += $(LLVM_LIBS) -lm -ldl
endif


##### TARGETS #####

default: depend $(TOP)/$(LIB_DIR)/gallium $(LIBNAME) $(LIBNAME_STAGING)

$(LIBNAME): $(OBJECTS) Makefile ../Makefile.xorg $(LIBS) $(DRIVER_PIPES)
	$(MKLIB) -linker '$(CC)' -noprefix -o $@ $(LDFLAGS) $(OBJECTS) $(DRIVER_PIPES) $(GALLIUM_AUXILIARIES) $(DRIVER_LINKS)

depend: $(C_SOURCES) $(CPP_SOURCES) $(ASM_SOURCES) $(SYMLINKS) $(GENERATED_SOURCES)
	rm -f depend
	touch depend
	$(MKDEP) $(MKDEP_OPTIONS) $(INCLUDES) $(C_SOURCES) $(CPP_SOURCES) $(ASM_SOURCES) $(GENERATED_SOURCES) 2> /dev/null

$(LIBNAME_STAGING): $(LIBNAME)
	$(INSTALL) $(LIBNAME) $(TOP)/$(LIB_DIR)/gallium

$(TOP)/$(LIB_DIR)/gallium:
	mkdir -p $@

clean:
	rm -f $(OBJECTS) $(GENERATED_SOURCES) $(LIBNAME).a depend depend.bak

install:
	$(INSTALL) -d $(DESTDIR)/$(XORG_DRIVER_INSTALL_DIR)
	$(MINSTALL) -m 755 $(LIBNAME) $(DESTDIR)/$(XORG_DRIVER_INSTALL_DIR)


##### RULES #####

%.s: %.c
	$(CC) -S $(INCLUDES) $(CFLAGS) $(DRIVER_DEFINES) $< -o $@

%.o: %.c
	$(CC) -c $(INCLUDES) $(CFLAGS) $(DRIVER_DEFINES) $< -o $@

%.o: %.cpp
	$(CXX) -c $(INCLUDES) $(CXXFLAGS) $(DRIVER_DEFINES) $< -o $@

%.o: %.S
	$(CC) -c $(INCLUDES) $(CFLAGS) $(DRIVER_DEFINES)  $< -o $@

sinclude depend

.PHONY: default clean install
