glsl: build without bison

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8739>
This commit is contained in:
Ella-0 2021-01-27 14:16:08 +00:00 committed by Marge Bot
parent e7977b8c49
commit a18ac347cf
7 changed files with 96 additions and 40 deletions

View File

@ -1724,6 +1724,8 @@ else
asan_c_args = ['-DBUILT_WITH_ASAN=0']
endif
yacc_is_bison = true
if build_machine.system() == 'windows'
# Prefer the winflexbison versions, they're much easier to install and have
# better windows support.
@ -1746,7 +1748,12 @@ if build_machine.system() == 'windows'
prog_bison = find_program('bison', 'yacc', required : with_any_opengl)
endif
else
prog_bison = find_program('bison', required : with_any_opengl)
prog_bison = find_program('bison', required : false)
if not prog_bison.found()
prog_bison = find_program('byacc', required : with_any_opengl)
yacc_is_bison = false
endif
# Disable deprecated keyword warnings, since we have to use them for
# old-bison compat. See discussion in

View File

@ -18,14 +18,24 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
bison_command = []
if yacc_is_bison
bison_command = [
prog_bison, '-o', '@OUTPUT0@', '-p', 'glcpp_parser_',
'--defines=@OUTPUT1@', '@INPUT@',
]
else
bison_command = [
prog_bison, '-o', '@OUTPUT0@', '-p', 'glcpp_parser_',
'-H', '@OUTPUT1@', '@INPUT@',
]
endif
glcpp_parse = custom_target(
'glcpp-parse.[ch]',
input : 'glcpp-parse.y',
output : ['glcpp-parse.c', 'glcpp-parse.h'],
command : [
prog_bison, '-o', '@OUTPUT0@', '-p', 'glcpp_parser_',
'--defines=@OUTPUT1@', '@INPUT@',
],
command : bison_command
)
glcpp_lex = custom_target(

View File

@ -20,14 +20,24 @@
subdir('glcpp')
bison_command = []
if yacc_is_bison
bison_command = [
prog_bison, '-o', '@OUTPUT0@', '-p', '_mesa_glsl_', '--defines=@OUTPUT1@',
'@INPUT@',
]
else
bison_command = [
prog_bison, '-o', '@OUTPUT0@', '-p', '_mesa_glsl_', '-H', '@OUTPUT1@',
'@INPUT@',
]
endif
glsl_parser = custom_target(
'glsl_parser',
input : 'glsl_parser.yy',
output : ['glsl_parser.cpp', 'glsl_parser.h'],
command : [
prog_bison, '-o', '@OUTPUT0@', '-p', '_mesa_glsl_', '--defines=@OUTPUT1@',
'@INPUT@',
],
command : bison_command
)
glsl_lexer_cpp = custom_target(

View File

@ -40,7 +40,6 @@
/* glibc < 2.27 defines OVERFLOW in /usr/include/math.h. */
#undef OVERFLOW
void yyerror (char *);
int yyparse(void);
int yylex(void);
char *lex_text(void);

View File

@ -28,6 +28,14 @@
#include <strings.h>
#include "i965_asm.h"
#undef yyerror
#ifdef YYBYACC
struct YYLTYPE;
void yyerror (struct YYLTYPE *, char *);
#else
void yyerror (char *);
#endif
#undef ALIGN16
#define YYLTYPE YYLTYPE
@ -467,11 +475,11 @@ add_label(struct brw_codegen *p, const char* label_name, enum instr_label_type t
%token <llint> LONG
%token NULL_TOKEN
%precedence SUBREGNUM
%nonassoc SUBREGNUM
%left PLUS MINUS
%precedence DOT
%precedence EMPTYEXECSIZE
%precedence LPAREN
%nonassoc DOT
%nonassoc EMPTYEXECSIZE
%nonassoc LPAREN
%type <integer> execsize simple_int exp
%type <llint> exp2
@ -1470,7 +1478,7 @@ simple_int:
rellocation:
relativelocation
| %empty { $$ = 0; }
| /* empty */ { $$ = 0; }
;
relativelocation:
@ -1482,7 +1490,7 @@ relativelocation:
jumplabel:
JUMP_LABEL { $$ = $1; }
| %empty { $$ = NULL; }
| /* empty */ { $$ = NULL; }
;
jumplabeltarget:
@ -1778,7 +1786,7 @@ exp:
subregnum:
DOT exp { $$ = $2; }
| %empty %prec SUBREGNUM { $$ = 0; }
| /* empty */ %prec SUBREGNUM { $$ = 0; }
;
directgenreg:
@ -2001,7 +2009,7 @@ immval:
/* Regions */
dstregion:
%empty
/* empty */
{
$$ = BRW_HORIZONTAL_STRIDE_1;
}
@ -2020,7 +2028,7 @@ indirectregion:
;
region:
%empty
/* empty */
{
$$ = stride($$, 0, 1, 0);
}
@ -2111,7 +2119,7 @@ imm_type:
;
writemask:
%empty
/* empty */
{
$$ = WRITEMASK_XYZW;
}
@ -2122,27 +2130,27 @@ writemask:
;
writemask_x:
%empty { $$ = 0; }
/* empty */ { $$ = 0; }
| X { $$ = 1 << BRW_CHANNEL_X; }
;
writemask_y:
%empty { $$ = 0; }
/* empty */ { $$ = 0; }
| Y { $$ = 1 << BRW_CHANNEL_Y; }
;
writemask_z:
%empty { $$ = 0; }
/* empty */ { $$ = 0; }
| Z { $$ = 1 << BRW_CHANNEL_Z; }
;
writemask_w:
%empty { $$ = 0; }
/* empty */ { $$ = 0; }
| W { $$ = 1 << BRW_CHANNEL_W; }
;
swizzle:
%empty
/* empty */
{
$$ = BRW_SWIZZLE_NOOP;
}
@ -2165,7 +2173,7 @@ chansel:
/* Instruction prediction and modifiers */
predicate:
%empty
/* empty */
{
brw_push_insn_state(p);
brw_set_default_predicate_control(p, BRW_PREDICATE_NONE);
@ -2182,13 +2190,13 @@ predicate:
;
predstate:
%empty { $$ = 0; }
/* empty */ { $$ = 0; }
| PLUS { $$ = 0; }
| MINUS { $$ = 1; }
;
predctrl:
%empty { $$ = BRW_PREDICATE_NORMAL; }
/* empty */ { $$ = BRW_PREDICATE_NORMAL; }
| DOT X { $$ = BRW_PREDICATE_ALIGN16_REPLICATE_X; }
| DOT Y { $$ = BRW_PREDICATE_ALIGN16_REPLICATE_Y; }
| DOT Z { $$ = BRW_PREDICATE_ALIGN16_REPLICATE_Z; }
@ -2209,12 +2217,12 @@ predctrl:
/* Source Modification */
negate:
%empty { $$ = 0; }
/* empty */ { $$ = 0; }
| MINUS { $$ = 1; }
;
abs:
%empty { $$ = 0; }
/* empty */ { $$ = 0; }
| ABS { $$ = 1; }
;
@ -2235,7 +2243,7 @@ cond_mod:
;
condModifiers:
%empty { $$ = BRW_CONDITIONAL_NONE; }
/* empty */ { $$ = BRW_CONDITIONAL_NONE; }
| ZERO
| EQUAL
| NOT_ZERO
@ -2250,13 +2258,13 @@ condModifiers:
;
saturate:
%empty { $$ = BRW_INSTRUCTION_NORMAL; }
/* empty */ { $$ = BRW_INSTRUCTION_NORMAL; }
| SATURATE { $$ = BRW_INSTRUCTION_SATURATE; }
;
/* Execution size */
execsize:
%empty %prec EMPTYEXECSIZE
/* empty */ %prec EMPTYEXECSIZE
{
$$ = 0;
}
@ -2271,7 +2279,7 @@ execsize:
/* Instruction options */
instoptions:
%empty
/* empty */
{
memset(&$$, 0, sizeof($$));
}
@ -2295,7 +2303,7 @@ instoption_list:
$$ = $1;
add_instruction_option(&$$, $2);
}
| %empty
| /* empty */
{
memset(&$$, 0, sizeof($$));
}
@ -2334,8 +2342,13 @@ instoption:
extern int yylineno;
#ifdef YYBYACC
void
yyerror(YYLTYPE *ltype, char *msg)
#else
void
yyerror(char *msg)
#endif
{
fprintf(stderr, "%s: %d: %s at \"%s\"\n",
input_filename, yylineno, msg, lex_text());

View File

@ -161,14 +161,24 @@ if with_tools.contains('intel-ui')
)
endif
bison_command = []
if yacc_is_bison
bison_command = [
prog_bison, '@INPUT@', '--defines=@OUTPUT1@',
'--output=@OUTPUT0@'
]
else
bison_command = [
prog_bison, '-H', '@OUTPUT1@',
'-o', '@OUTPUT0@', '@INPUT@'
]
endif
i965_gram_tab = custom_target(
'i965_gram.tab.[ch]',
input : 'i965_gram.y',
output : ['i965_gram.tab.c', 'i965_gram.tab.h'],
command : [
prog_bison, '@INPUT@', '--defines=@OUTPUT1@',
'--output=@OUTPUT0@'
]
command : bison_command
)
i965_lex_yy_c = custom_target(

View File

@ -18,6 +18,13 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
bison_command = []
if yacc_is_bison
bison_command = [prog_bison, '-o', '@OUTPUT0@', '--defines=@OUTPUT1@', '@INPUT@']
else
bison_command = [prog_bison, '-o', '@OUTPUT0@', '-H', '@OUTPUT1@', '@INPUT@']
endif
mesa_lex = custom_target(
'mesa_lex',
input : 'program_lexer.l',
@ -29,5 +36,5 @@ program_parse_tab = custom_target(
'program_parse_tab.[ch]',
input : 'program_parse.y',
output : ['program_parse.tab.c', 'program_parse.tab.h'],
command : [prog_bison, '-o', '@OUTPUT0@', '--defines=@OUTPUT1@', '@INPUT@'],
command : bison_command,
)