summaryrefslogtreecommitdiff
path: root/src/tools/lcc/etc/bytecode.c
blob: fe4178fd8165782d61440137a5da621c864e0e74 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/* quake3 bytecode target */

#include <string.h>
#include <stdio.h>
#include "../../../qcommon/q_platform.h"

#ifdef _WIN32
#define BINEXT ".exe"
#else
#define BINEXT ""
#endif

char *suffixes[] = { ".c", ".i", ".asm", ".o", ".out", 0 };
char inputs[256] = "";
char *cpp[] = { "q3cpp" BINEXT,
	"-D__STDC__=1", "-D__STRICT_ANSI__", "-D__signed__=signed", "-DQ3_VM",
	"$1", "$2", "$3", 0 };
char *include[] = { 0 };
char *com[] = { "q3rcc" BINEXT, "-target=bytecode", "$1", "$2", "$3", 0 };
char *ld[] = { 0 };
char *as[] = { 0 };

extern char *concat(char *, char *);

/*
===============
UpdatePaths

Updates the paths to q3cpp and q3rcc based on
the directory that contains q3lcc
===============
*/
void UpdatePaths( const char *lccBinary )
{
	char basepath[ 1024 ];
	char *p;

	strncpy( basepath, lccBinary, 1024 );
	p = strrchr( basepath, PATH_SEP );

	if( p )
	{
		*( p + 1 ) = '\0';

		cpp[ 0 ] = concat( basepath, "q3cpp" BINEXT );
		com[ 0 ] = concat( basepath, "q3rcc" BINEXT );
	}
}

int option(char *arg) {
	if (strncmp(arg, "-lccdir=", 8) == 0) {
		cpp[0] = concat(&arg[8], "/q3cpp" BINEXT);
		include[0] = concat("-I", concat(&arg[8], "/include"));
		com[0] = concat(&arg[8], "/q3rcc" BINEXT);
	} else if (strcmp(arg, "-p") == 0 || strcmp(arg, "-pg") == 0) {
		fprintf( stderr, "no profiling supported, %s ignored.\n", arg);
	} else if (strcmp(arg, "-b") == 0)
		;
	else if (strcmp(arg, "-g") == 0)
		fprintf( stderr, "no debugging supported, %s ignored.\n", arg);
	else if (strncmp(arg, "-ld=", 4) == 0 || strcmp(arg, "-static") == 0) {
		fprintf( stderr, "no linking supported, %s ignored.\n", arg);
	} else
		return 0;
	return 1;
}