[Mesa-dev] [PATCH 16/18] android: build glsl

Chad Versace chad at chad-versace.us
Wed Aug 17 13:06:37 PDT 2011


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 08/16/2011 11:28 PM, Chia-I Wu wrote:
> This builds the static library libmesa_glsl and executable glsl_compiler
> from glsl.  glsl_compiler is only installed for engineering build.
> ---
>  Android.mk              |    1 +
>  src/glsl/Android.gen.mk |   73 +++++++++++++++++++++
>  src/glsl/Android.mk     |  161 +++++++++++++++++++++++++++++++++++++++++++++++
>  src/mesa/Android.mk     |   25 +++++++
>  4 files changed, 260 insertions(+), 0 deletions(-)
>  create mode 100644 src/glsl/Android.gen.mk
>  create mode 100644 src/glsl/Android.mk
> 
> diff --git a/Android.mk b/Android.mk
> index 0dc8fe1..f05d54f 100644
> --- a/Android.mk
> +++ b/Android.mk
> @@ -42,6 +42,7 @@ DRM_GRALLOC_TOP := hardware/drm_gralloc
>  MESA_COMMON_MK := $(MESA_TOP)/Android.common.mk
>  
>  SUBDIRS := \
> +	$(LOCAL_PATH)/src/glsl/Android.mk \
>  	$(LOCAL_PATH)/src/mesa/Android.mk \
>  	$(LOCAL_PATH)/src/egl/Android.mk \
>  	$(LOCAL_PATH)/src/gallium/Android.mk
> diff --git a/src/glsl/Android.gen.mk b/src/glsl/Android.gen.mk
> new file mode 100644
> index 0000000..61b2e4d
> --- /dev/null
> +++ b/src/glsl/Android.gen.mk
> @@ -0,0 +1,73 @@
> +ifeq ($(LOCAL_MODULE_CLASS),)
> +LOCAL_MODULE_CLASS := STATIC_LIBRARIES
> +endif
> +
> +intermediates := $(call local-intermediates-dir)
> +
> +sources := \
> +	glsl_lexer.cpp \
> +	glsl_parser.cpp \
> +	glcpp/glcpp-lex.c \
> +	glcpp/glcpp-parse.c
> +
> +ifneq ($(LOCAL_IS_HOST_MODULE),true)
> +sources += builtin_function.cpp
> +endif
> +
> +LOCAL_SRC_FILES := $(filter-out $(sources), $(LOCAL_SRC_FILES))
> +
> +LOCAL_C_INCLUDES += $(intermediates) $(intermediates)/glcpp $(MESA_TOP)/src/glsl/glcpp
> +
> +sources := $(addprefix $(intermediates)/, $(sources))
> +LOCAL_GENERATED_SOURCES += $(sources)
> +
> +define local-l-or-ll-to-c-or-cpp
> +	@mkdir -p $(dir $@)
> +	@echo "Mesa Lex: $(PRIVATE_MODULE) <= $<"
> +	$(hide) $(LEX) --nounistd -o$@ $<
> +endef
> +
> +define local-y-to-c-and-h
> +	@mkdir -p $(dir $@)
> +	@echo "Mesa Yacc: $(PRIVATE_MODULE) <= $<"
> +	$(hide) $(YACC) -o $@ $<
> +endef
> +
> +define local-yy-to-cpp-and-h
> +	@mkdir -p $(dir $@)
> +	@echo "Mesa Yacc: $(PRIVATE_MODULE) <= $<"
> +	$(hide) $(YACC) -p "_mesa_glsl_" -o $@ $<
> +	touch $(@:$1=$(YACC_HEADER_SUFFIX))
> +	echo '#ifndef '$(@F:$1=_h) > $(@:$1=.h)
> +	echo '#define '$(@F:$1=_h) >> $(@:$1=.h)
> +	cat $(@:$1=$(YACC_HEADER_SUFFIX)) >> $(@:$1=.h)
> +	echo '#endif' >> $(@:$1=.h)
> +	rm -f $(@:$1=$(YACC_HEADER_SUFFIX))
> +endef
> +
> +$(intermediates)/glsl_lexer.cpp: $(LOCAL_PATH)/glsl_lexer.ll
> +	$(call local-l-or-ll-to-c-or-cpp)
> +
> +$(intermediates)/glsl_parser.cpp: $(LOCAL_PATH)/glsl_parser.yy
> +	$(call local-yy-to-cpp-and-h,.cpp)
> +
> +$(intermediates)/glcpp/glcpp-lex.c: $(LOCAL_PATH)/glcpp/glcpp-lex.l
> +	$(call local-l-or-ll-to-c-or-cpp)
> +
> +$(intermediates)/glcpp/glcpp-parse.c: $(LOCAL_PATH)/glcpp/glcpp-parse.y
> +	$(call local-y-to-c-and-h)
> +
> +BUILTIN_COMPILER := $(BUILD_OUT_EXECUTABLES)/mesa_builtin_compiler$(BUILD_EXECUTABLE_SUFFIX)
> +
> +builtin_function_deps := \
> +	$(LOCAL_PATH)/builtins/tools/generate_builtins.py \
> +	$(LOCAL_PATH)/builtins/tools/texture_builtins.py \
> +	$(BUILTIN_COMPILER) \
> +	$(wildcard $(LOCAL_PATH)/builtins/profiles/*) \
> +       	$(wildcard $(LOCAL_PATH)/builtins/ir/*)
> +
> +$(intermediates)/builtin_function.cpp: PRIVATE_SCRIPT := $(MESA_PYTHON2) $(LOCAL_PATH)/builtins/tools/generate_builtins.py
> +$(intermediates)/builtin_function.cpp: $(builtin_function_deps)
> +	@mkdir -p $(dir $@)
> +	@echo "Gen GLSL: $(PRIVATE_MODULE) <= $(notdir $@)"
> +	$(hide) $(PRIVATE_SCRIPT) $(BUILTIN_COMPILER) > $@ || rm -f $@
> diff --git a/src/glsl/Android.mk b/src/glsl/Android.mk
> new file mode 100644
> index 0000000..5f0c83c
> --- /dev/null
> +++ b/src/glsl/Android.mk
> @@ -0,0 +1,161 @@
> +# Mesa 3-D graphics library
> +# Version:  7.12

Again, this version tag should be removed.

> +#
> +# Copyright (C) 2010-2011 Chia-I Wu <olvaffe at gmail.com>
> +# Copyright (C) 2010-2011 LunarG Inc.
> +#
> +# 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
> +# THE AUTHORS OR COPYRIGHT HOLDERS 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.
> +
> +# Android.mk for glsl

Since this file builds multiple targets, it would be much easier to read if it were
separated into blocks. I suggest something like this:

# ---------------------------------------
# Build libmesa_glsl
# ---------------------------------------

include $(CLEAR_VARS)
LOCAL_MODULE := libmesa_glsl
...
include $(BUILD_STUFF)


# ---------------------------------------
# Build glsl_compiler
# ---------------------------------------

include $(CLEAR_VARS)
LOCAL_MODULE := glsl_compiler
...
include $(BUILD_STUFF)

> +
> +LOCAL_PATH := $(call my-dir)
> +
> +# from Makefile
> +LIBGLCPP_SOURCES = \
> +	glcpp/glcpp-lex.c \
> +	glcpp/glcpp-parse.c \
> +	glcpp/pp.c
> +
> +C_SOURCES = \
> +	strtod.c \
> +	ralloc.c \
> +	$(LIBGLCPP_SOURCES)
> +
> +CXX_SOURCES = \
> +	ast_expr.cpp \
> +	ast_function.cpp \
> +	ast_to_hir.cpp \
> +	ast_type.cpp \
> +	glsl_lexer.cpp \
> +	glsl_parser.cpp \
> +	glsl_parser_extras.cpp \
> +	glsl_types.cpp \
> +	glsl_symbol_table.cpp \
> +	hir_field_selection.cpp \
> +	ir_basic_block.cpp \
> +	ir_clone.cpp \
> +	ir_constant_expression.cpp \
> +	ir.cpp \
> +	ir_expression_flattening.cpp \
> +	ir_function_can_inline.cpp \
> +	ir_function_detect_recursion.cpp \
> +	ir_function.cpp \
> +	ir_hierarchical_visitor.cpp \
> +	ir_hv_accept.cpp \
> +	ir_import_prototypes.cpp \
> +	ir_print_visitor.cpp \
> +	ir_reader.cpp \
> +	ir_rvalue_visitor.cpp \
> +	ir_set_program_inouts.cpp \
> +	ir_validate.cpp \
> +	ir_variable.cpp \
> +	ir_variable_refcount.cpp \
> +	linker.cpp \
> +	link_functions.cpp \
> +	loop_analysis.cpp \
> +	loop_controls.cpp \
> +	loop_unroll.cpp \
> +	lower_discard.cpp \
> +	lower_if_to_cond_assign.cpp \
> +	lower_instructions.cpp \
> +	lower_jumps.cpp \
> +	lower_mat_op_to_vec.cpp \
> +	lower_noise.cpp \
> +	lower_texture_projection.cpp \
> +	lower_variable_index_to_cond_assign.cpp \
> +	lower_vec_index_to_cond_assign.cpp \
> +	lower_vec_index_to_swizzle.cpp \
> +	lower_vector.cpp \
> +	opt_algebraic.cpp \
> +	opt_constant_folding.cpp \
> +	opt_constant_propagation.cpp \
> +	opt_constant_variable.cpp \
> +	opt_copy_propagation.cpp \
> +	opt_copy_propagation_elements.cpp \
> +	opt_dead_code.cpp \
> +	opt_dead_code_local.cpp \
> +	opt_dead_functions.cpp \
> +	opt_discard_simplification.cpp \
> +	opt_function_inlining.cpp \
> +	opt_if_simplification.cpp \
> +	opt_noop_swizzle.cpp \
> +	opt_redundant_jumps.cpp \
> +	opt_structure_splitting.cpp \
> +	opt_swizzle_swizzle.cpp \
> +	opt_tree_grafting.cpp \
> +	s_expression.cpp

This list needs to be factored out into sources.mk, of course, but I can do that
after you commit.

> +
> +include $(CLEAR_VARS)
> +
> +LOCAL_SRC_FILES := \
> +	$(C_SOURCES) \
> +	$(CXX_SOURCES) \
> +	builtin_function.cpp
> +
> +LOCAL_C_INCLUDES := \
> +	$(MESA_TOP)/src/mapi \
> +	$(MESA_TOP)/src/mesa
> +
> +LOCAL_MODULE := libmesa_glsl
> +
> +include $(LOCAL_PATH)/Android.gen.mk
> +include $(MESA_COMMON_MK)
> +include $(BUILD_STATIC_LIBRARY)
> +
> +include $(CLEAR_VARS)
> +
> +LOCAL_SRC_FILES := \
> +	$(C_SOURCES) \
> +	$(CXX_SOURCES) \
> +	builtin_stubs.cpp \
> +	main.cpp \
> +	standalone_scaffolding.cpp
> +
> +LOCAL_C_INCLUDES := \
> +	$(MESA_TOP)/src/mapi \
> +	$(MESA_TOP)/src/mesa
> +
> +LOCAL_STATIC_LIBRARIES := libmesa_glsl_utils
> +
> +LOCAL_MODULE := mesa_builtin_compiler
> +
> +LOCAL_MODULE_CLASS := EXECUTABLES
> +LOCAL_IS_HOST_MODULE := true
> +include $(LOCAL_PATH)/Android.gen.mk
> +include $(MESA_COMMON_MK)
> +include $(BUILD_HOST_EXECUTABLE)
> +
> +include $(CLEAR_VARS)
> +
> +LOCAL_SRC_FILES := \
> +	builtin_stubs.cpp \
> +	main.cpp \
> +	standalone_scaffolding.cpp

builtin_stubs.cpp should be removed from LOCAL_SRC_FILES. It is incorrect to link
both builtin_stubs.o and builtin_functions.o (via libmesa_glsl) into the same
executable because they redefine some of the same symbols.

I'm aware that the Makefile does this also, but I discussed it with Ken and he
confirmed that it was incorrect and that it will be fixed.

> +
> +LOCAL_C_INCLUDES := \
> +	$(MESA_TOP)/src/mapi \
> +	$(MESA_TOP)/src/mesa
> +
> +LOCAL_STATIC_LIBRARIES := libmesa_glsl libmesa_glsl_utils
> +
> +LOCAL_MODULE_TAGS := eng
> +LOCAL_MODULE := glsl_compiler
> +
> +include $(MESA_COMMON_MK)
> +include $(BUILD_EXECUTABLE)
> diff --git a/src/mesa/Android.mk b/src/mesa/Android.mk
> index c1be3d3..6ec4bfb 100644
> --- a/src/mesa/Android.mk
> +++ b/src/mesa/Android.mk
> @@ -74,3 +74,28 @@ include $(LOCAL_PATH)/Android.gen.mk
>  include $(MESA_COMMON_MK)
>  include $(BUILD_STATIC_LIBRARY)
>  endif # MESA_BUILD_GALLIUM
> +
> +# buld libmesa_glsl_utils to avoid circular dependency between mesa core and
> +# glsl
> +include $(CLEAR_VARS)
> +
> +LOCAL_SRC_FILES := \
> +	program/hash_table.c \
> +	program/symbol_table.c
> +
> +LOCAL_MODULE := libmesa_glsl_utils
> +
> +include $(MESA_COMMON_MK)
> +include $(BUILD_STATIC_LIBRARY)
> +
> +# need the host library to generate sources
> +include $(CLEAR_VARS)
> +
> +LOCAL_SRC_FILES := \
> +	program/hash_table.c \
> +	program/symbol_table.c
> +
> +LOCAL_MODULE := libmesa_glsl_utils
> +
> +include $(MESA_COMMON_MK)
> +include $(BUILD_HOST_STATIC_LIBRARY)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQIcBAEBAgAGBQJOTB9NAAoJEAIvNt057x8isWUP/1vhoylDLOV6jeaQ4BK6O4qk
jVO6wqhJEqQFezVlOgwntdY7zRGWd44hazh7eAAjnHQc+BHa05qQ4VHNBxSMTbvj
7C2UXmytwOc99bTbBkRLUiAapKh8dC36r5lZ2rKMKTJv/qFcx67WwPzlDRQI4776
IyK9stUPNd5kuVvBekI5bzgj8svqNpNOEXw21qXkL2cYOY++s3KbCcFMLqX/pYal
xEnKZYpDHKmS894Pu8U42Mlj4RS4cpD+nt80+olvOI5Aj9RwoCQS3I+4Y0nVgXk+
6xV06pclHU6iPMaIpPkVebWJfLZMnc2xq7cJAywVft4wNUJ3CAv10d20rnxs+BTg
GncUR98SuMVOYw8sQNd+6pBtD5SpWls9Q6xphrwGDwDs7ja5ut6EdjMbM+bVt8BG
tHKiP9TMULlE8KU4ShQOdY51/FaCOMczWUBxM2BV9kGxbbXJ+gyzf1sOBIU2uRc5
cd8SsczlRdU+CNSh0TxyVzU2Aj/VZtz9vTuDSLFY4WOmE6t8Gye7wb+QmHGM2DiE
Et+/9aVlzdBbVlBVSzX+DIJbcQlqi6AytH3bk3qzdTvy1uVCOKNUyHpm0IU8IWKO
ifhjv3rQDom8e+rp6wGmRZyLw1kcyRpwkVPND+x7Pezj8iMMYifjftU4UyNmcs0h
ij+OM7z9JeV/NtpAGX/w
=9x7x
-----END PGP SIGNATURE-----


More information about the mesa-dev mailing list