st/egl: Fix udev linkage when egl_dri2 is not build
[profile/ivi/mesa.git] / src / gallium / targets / egl / Makefile
1 # src/gallium/targets/egl/Makefile
2 #
3 # This is the Makefile for EGL Gallium driver package.  The package consists of
4 #
5 #   egl_gallium.so - EGL driver
6 #   pipe_<HW>.so   - pipe drivers
7 #   st_<API>.so    - client API state trackers
8 #
9 # The following variables are examined
10 #
11 #   EGL_PLATFORMS       - platforms to support
12 #   GALLIUM_WINSYS_DIRS - pipe drivers to support
13 #   EGL_CLIENT_APIS     - state trackers to support
14 #
15
16 TOP = ../../../..
17 include $(TOP)/configs/current
18
19 ST_PREFIX := st_
20 PIPE_PREFIX := pipe_
21
22 common_CPPFLAGS := \
23         -I$(TOP)/include \
24         -I$(TOP)/src/gallium/auxiliary \
25         -I$(TOP)/src/gallium/drivers \
26         -I$(TOP)/src/gallium/include \
27         -I$(TOP)/src/gallium/winsys \
28         $(LIBDRM_CFLAGS)
29
30 common_SYS :=
31 common_LIBS := \
32         $(TOP)/src/gallium/drivers/identity/libidentity.a \
33         $(TOP)/src/gallium/drivers/trace/libtrace.a \
34         $(TOP)/src/gallium/drivers/rbug/librbug.a \
35         $(GALLIUM_AUXILIARIES)
36
37 # EGL driver
38 egl_CPPFLAGS := \
39         -I$(TOP)/src/gallium/state_trackers/egl \
40         -I$(TOP)/src/egl/main \
41         -DPIPE_PREFIX=\"$(PIPE_PREFIX)\" -DST_PREFIX=\"$(ST_PREFIX)\"
42 egl_SYS := -lm $(DLOPEN_LIBS) -lEGL
43 egl_LIBS := $(TOP)/src/gallium/state_trackers/egl/libegl.a
44
45 ifneq ($(findstring x11, $(EGL_PLATFORMS)),)
46 egl_SYS += -lX11 -lXext -lXfixes $(LIBDRM_LIB)
47 egl_LIBS += $(TOP)/src/gallium/winsys/sw/xlib/libws_xlib.a
48 endif
49 ifneq ($(findstring wayland, $(EGL_PLATFORMS)),)
50 egl_SYS += $(WAYLAND_LIBS) $(LIBDRM_LIB)
51 egl_LIBS += $(TOP)/src/gallium/winsys/sw/wayland/libws_wayland.a
52 egl_LIBS += $(TOP)/src/egl/wayland/wayland-drm/libwayland-drm.a
53 endif
54 ifneq ($(findstring drm, $(EGL_PLATFORMS)),)
55 egl_SYS += $(LIBUDEV_LIBS) $(LIBDRM_LIB)
56 endif
57 ifneq ($(findstring fbdev, $(EGL_PLATFORMS)),)
58 egl_LIBS += $(TOP)/src/gallium/winsys/sw/fbdev/libfbdev.a
59 endif
60
61 # EGL_RENDERABLE_TYPE is a compile time attribute
62 ifneq ($(filter $(GL_LIB), $(EGL_CLIENT_APIS)),)
63 egl_CPPFLAGS += $(API_DEFINES)
64 endif
65 ifneq ($(filter $(VG_LIB), $(EGL_CLIENT_APIS)),)
66 egl_CPPFLAGS += -DFEATURE_VG=1
67 endif
68 egl_CPPFLAGS := $(sort $(egl_CPPFLAGS))
69
70 # i915 pipe driver
71 i915_CPPFLAGS :=
72 i915_SYS := -ldrm_intel
73 i915_LIBS := \
74         $(TOP)/src/gallium/winsys/i915/drm/libi915drm.a \
75         $(TOP)/src/gallium/drivers/i915/libi915.a
76
77 # i965 pipe driver
78 i965_CPPFLAGS :=
79 i965_SYS := -ldrm_intel
80 i965_LIBS := \
81         $(TOP)/src/gallium/winsys/i965/drm/libi965drm.a \
82         $(TOP)/src/gallium/drivers/i965/libi965.a \
83         $(TOP)/src/gallium/winsys/sw/wrapper/libwsw.a
84
85 # nouveau pipe driver
86 nouveau_CPPFLAGS :=
87 nouveau_SYS := -ldrm_nouveau
88 nouveau_LIBS := \
89         $(TOP)/src/gallium/winsys/nouveau/drm/libnouveaudrm.a \
90         $(TOP)/src/gallium/drivers/nvfx/libnvfx.a \
91         $(TOP)/src/gallium/drivers/nv50/libnv50.a \
92         $(TOP)/src/gallium/drivers/nvc0/libnvc0.a \
93         $(TOP)/src/gallium/drivers/nouveau/libnouveau.a
94
95 # r300 pipe driver
96 r300_CPPFLAGS :=
97 r300_SYS := -ldrm
98 r300_LIBS := \
99         $(TOP)/src/gallium/winsys/radeon/drm/libradeonwinsys.a \
100         $(TOP)/src/gallium/drivers/r300/libr300.a
101
102 # r600 pipe driver
103 r600_CPPFLAGS :=
104 r600_SYS := -ldrm -ldrm_radeon
105 r600_LIBS := \
106         $(TOP)/src/gallium/winsys/r600/drm/libr600winsys.a \
107         $(TOP)/src/gallium/drivers/r600/libr600.a
108
109 # vmwgfx pipe driver
110 vmwgfx_CPPFLAGS :=
111 vmwgfx_SYS :=
112 vmwgfx_LIBS := \
113         $(TOP)/src/gallium/winsys/svga/drm/libsvgadrm.a \
114         $(TOP)/src/gallium/drivers/svga/libsvga.a
115
116 # swrast (pseudo) pipe driver
117 swrast_CPPFLAGS := -DGALLIUM_SOFTPIPE -DGALLIUM_RBUG -DGALLIUM_TRACE
118 swrast_SYS := -lm
119 swrast_LIBS := $(TOP)/src/gallium/drivers/softpipe/libsoftpipe.a
120
121 # LLVM
122 ifeq ($(MESA_LLVM),1)
123 common_SYS += $(LLVM_LIBS)
124 swrast_CPPFLAGS += -DGALLIUM_LLVMPIPE
125 swrast_LIBS += $(TOP)/src/gallium/drivers/llvmpipe/libllvmpipe.a
126 LDFLAGS += $(LLVM_LDFLAGS)
127 endif
128
129 # OpenGL state tracker
130 GL_CPPFLAGS := -I$(TOP)/src/mesa $(API_DEFINES)
131 ifeq ($(SHARED_GLAPI),1)
132 GL_SYS := $(DRI_LIB_DEPS) -l$(GLAPI_LIB)
133 else
134 # cannot link to $(GL_LIB) as the app might want GL or GLES
135 GL_SYS := $(DRI_LIB_DEPS)
136 endif
137 GL_LIBS := $(TOP)/src/mesa/libmesagallium.a
138
139 # OpenVG state tracker
140 OpenVG_CPPFLAGS := -I$(TOP)/src/gallium/state_trackers/vega
141 OpenVG_SYS := -lm -l$(VG_LIB)
142 OpenVG_LIBS := $(TOP)/src/gallium/state_trackers/vega/libvega.a
143
144
145 OUTPUT_PATH := $(TOP)/$(LIB_DIR)/egl
146
147 # determine the outputs
148 ifneq ($(findstring i915/drm,$(GALLIUM_WINSYS_DIRS)),)
149 OUTPUTS += i915
150 endif
151 ifneq ($(findstring i965/drm,$(GALLIUM_WINSYS_DIRS)),)
152 OUTPUTS += i965
153 endif
154 ifneq ($(findstring nouveau/drm,$(GALLIUM_WINSYS_DIRS)),)
155 OUTPUTS += nouveau
156 endif
157 ifneq ($(findstring radeon/drm,$(GALLIUM_WINSYS_DIRS)),)
158 OUTPUTS += r300
159 endif
160 ifneq ($(findstring r600/drm,$(GALLIUM_WINSYS_DIRS)),)
161 OUTPUTS += r600
162 endif
163 ifneq ($(findstring svga/drm,$(GALLIUM_WINSYS_DIRS)),)
164 OUTPUTS += vmwgfx
165 endif
166 OUTPUTS += swrast
167 OUTPUTS := $(addprefix $(PIPE_PREFIX), $(OUTPUTS))
168
169 # EGL driver and state trackers
170 OUTPUTS += egl_gallium $(addprefix $(ST_PREFIX), $(EGL_CLIENT_APIS))
171
172 OUTPUTS := $(addsuffix .so, $(OUTPUTS))
173 OUTPUTS := $(addprefix $(OUTPUT_PATH)/, $(OUTPUTS))
174
175 default: $(OUTPUTS)
176
177 define mklib
178 $(MKLIB) -o $(notdir $@) -noprefix -linker '$(CC)' \
179         -L$(TOP)/$(LIB_DIR) -ldflags '$(LDFLAGS)' \
180         -install $(OUTPUT_PATH) $(MKLIB_OPTIONS) $< \
181         -Wl,--start-group $(common_LIBS) $($(1)_LIBS) -Wl,--end-group \
182         $(common_SYS) $($(1)_SYS)
183 endef
184
185 define mklib-cxx
186 $(MKLIB) -o $(notdir $@) -noprefix -linker '$(CXX)' \
187         -L$(TOP)/$(LIB_DIR) -ldflags '$(LDFLAGS)' \
188         -cplusplus -install $(OUTPUT_PATH) $(MKLIB_OPTIONS) $< \
189         -Wl,--start-group $(common_LIBS) $($(1)_LIBS) -Wl,--end-group \
190         $(common_SYS) $($(1)_SYS)
191 endef
192
193 # EGL driver
194 $(OUTPUT_PATH)/egl_gallium.so: egl.o $(egl_LIBS)
195         $(call mklib,egl)
196
197 # pipe drivers
198 $(OUTPUT_PATH)/$(PIPE_PREFIX)i915.so: pipe_i915.o $(i915_LIBS)
199         $(call mklib,i915)
200
201 $(OUTPUT_PATH)/$(PIPE_PREFIX)i965.so: pipe_i965.o $(i965_LIBS)
202         $(call mklib,i965)
203
204 $(OUTPUT_PATH)/$(PIPE_PREFIX)nouveau.so: pipe_nouveau.o $(nouveau_LIBS)
205         $(call mklib,nouveau)
206
207 $(OUTPUT_PATH)/$(PIPE_PREFIX)r300.so: pipe_r300.o $(r300_LIBS)
208         $(call mklib,r300)
209
210 $(OUTPUT_PATH)/$(PIPE_PREFIX)r600.so: pipe_r600.o $(r600_LIBS)
211         $(call mklib,r600)
212
213 $(OUTPUT_PATH)/$(PIPE_PREFIX)vmwgfx.so: pipe_vmwgfx.o $(vmwgfx_LIBS)
214         $(call mklib,vmwgfx)
215
216 $(OUTPUT_PATH)/$(PIPE_PREFIX)swrast.so: pipe_swrast.o $(swrast_LIBS)
217         $(call mklib,swrast)
218
219 # state trackers
220 $(OUTPUT_PATH)/$(ST_PREFIX)$(GL_LIB).so: st_GL.o $(GL_LIBS)
221         $(call mklib-cxx,GL)
222
223 $(OUTPUT_PATH)/$(ST_PREFIX)$(VG_LIB).so: st_OpenVG.o $(OpenVG_LIBS)
224         $(call mklib,OpenVG)
225
226 egl.o: egl.c
227         $(CC) -c -o $@ $< $(common_CPPFLAGS) $(egl_CPPFLAGS) $(DEFINES) $(CFLAGS)
228
229 pipe_%.o: pipe_%.c
230         $(CC) -c -o $@ $< $(common_CPPFLAGS) $($*_CPPFLAGS) $(DEFINES) $(CFLAGS)
231
232 st_%.o: st_%.c
233         $(CC) -c -o $@ $< $(common_CPPFLAGS) $($*_CPPFLAGS) $(DEFINES) $(CFLAGS)
234
235 install: $(OUTPUTS)
236         $(INSTALL) -d $(DESTDIR)$(EGL_DRIVER_INSTALL_DIR)
237         for out in $(OUTPUTS); do \
238                 $(MINSTALL) -m 755 "$$out" $(DESTDIR)$(EGL_DRIVER_INSTALL_DIR); \
239         done
240
241 clean:
242         rm -f *.o