# A simple makefile to build glsl-optimizer on linux

CPPFLAGS += -I../talloc \
	-I../mesa \
	-I../mapi \
	-I../../include \
	-I..

CXXFLAGS += -s -Wall -Os -fdata-sections -ffunction-sections
CFLAGS += -s -Wall -Os -fdata-sections -ffunction-sections

# This list gleaned from the VC project file. Update when needed
SRC = ast_array_index.cpp \
	ast_expr.cpp \
	ast_function.cpp \
	ast_to_hir.cpp \
	ast_type.cpp \
	builtin_functions.cpp \
	builtin_types.cpp \
	builtin_variables.cpp \
	glsl_lexer.cpp \
	glsl_optimizer.cpp \
	glsl_parser.cpp \
	glsl_parser_extras.cpp \
	glsl_symbol_table.cpp \
	glsl_types.cpp \
	hir_field_selection.cpp \
	ir.cpp \
	ir_basic_block.cpp \
	ir_builder.cpp \
	ir_clone.cpp \
	ir_constant_expression.cpp \
	ir_equals.cpp \
	ir_expression_flattening.cpp \
	ir_function.cpp \
	ir_function_can_inline.cpp \
	ir_function_detect_recursion.cpp \
	ir_hierarchical_visitor.cpp \
	ir_hv_accept.cpp \
	ir_import_prototypes.cpp \
	ir_print_glsl_visitor.cpp \
	ir_print_metal_visitor.cpp \
	ir_print_visitor.cpp \
	ir_rvalue_visitor.cpp \
	ir_stats.cpp \
	ir_unused_structs.cpp \
	ir_validate.cpp \
	ir_variable_refcount.cpp \
	link_atomics.cpp \
	linker.cpp \
	link_functions.cpp \
	link_interface_blocks.cpp \
	link_uniform_block_active_visitor.cpp \
	link_uniform_blocks.cpp \
	link_uniform_initializers.cpp \
	link_uniforms.cpp \
	link_varyings.cpp \
	loop_analysis.cpp \
	loop_controls.cpp \
	loop_unroll.cpp \
	lower_clip_distance.cpp \
	lower_discard.cpp \
	lower_discard_flow.cpp \
	lower_if_to_cond_assign.cpp \
	lower_instructions.cpp \
	lower_jumps.cpp \
	lower_mat_op_to_vec.cpp \
	lower_named_interface_blocks.cpp \
	lower_noise.cpp \
	lower_offset_array.cpp \
	lower_output_reads.cpp \
	lower_packed_varyings.cpp \
	lower_packing_builtins.cpp \
	lower_ubo_reference.cpp \
	lower_variable_index_to_cond_assign.cpp \
	lower_vec_index_to_cond_assign.cpp \
	lower_vec_index_to_swizzle.cpp \
	lower_vector.cpp \
	lower_vector_insert.cpp \
	lower_vertex_id.cpp \
	opt_algebraic.cpp \
	opt_array_splitting.cpp \
	opt_constant_folding.cpp \
	opt_constant_propagation.cpp \
	opt_constant_variable.cpp \
	opt_copy_propagation.cpp \
	opt_copy_propagation_elements.cpp \
	opt_cse.cpp \
	opt_dead_builtin_variables.cpp \
	opt_dead_builtin_varyings.cpp \
	opt_dead_code.cpp \
	opt_dead_code_local.cpp \
	opt_dead_functions.cpp \
	opt_flatten_nested_if_blocks.cpp \
	opt_flip_matrices.cpp \
	opt_function_inlining.cpp \
	opt_if_simplification.cpp \
	opt_minmax.cpp \
	opt_noop_swizzle.cpp \
	opt_rebalance_tree.cpp \
	opt_redundant_jumps.cpp \
	opt_structure_splitting.cpp \
	opt_swizzle_swizzle.cpp \
	opt_tree_grafting.cpp \
	opt_vectorize.cpp \
	s_expression.cpp \
	standalone_scaffolding.cpp \
	strtod.c \
	glcpp/glcpp-lex.c \
	glcpp/glcpp-parse.c \
	glcpp/pp.c \
	../mesa/main/imports.c \
	../mesa/program/prog_hash_table.c \
	../mesa/program/symbol_table.c \
	../util/hash_table.c \
	../util/ralloc.c


OBJS1 = $(SRC:.cpp=.o)
OBJS = $(OBJS1:.c=.o)

LIBNAME = libglslopt.a

.PHONY: clean all

all: $(OBJS)
	ar cr $(LIBNAME) $(OBJS)
	ranlib $(LIBNAME)

clean:
	rm -f $(OBJS) $(LIBNAME)