From a010472b31dfb367b21d5bea25200ad144c62b7c Mon Sep 17 00:00:00 2001 From: n-a-c-h <> Date: Tue, 13 Dec 2005 19:22:16 +0000 Subject: [PATCH] Can now compile objects internally if desired. MSVC and GCC handling cleaned up a bit. --- zsnes/src/parsegen.cpp | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/zsnes/src/parsegen.cpp b/zsnes/src/parsegen.cpp index a075df2a..c11e587d 100644 --- a/zsnes/src/parsegen.cpp +++ b/zsnes/src/parsegen.cpp @@ -49,6 +49,14 @@ typedef int ssize_t; #define SLASH_STR "/" #endif +#ifdef _MSC_VER //MSVC +#define COMPILE_EXE(exe, c) "cl /nologo /Fe"exe " "c +#define COMPILE_OBJ(obj, c) "cl /nologo /Fo"obj " "c +#else +#define COMPILE_EXE(exe, c) "gcc -o "exe " "c " -s" +#define COMPILE_OBJ(obj, c) "gcc -o "obj " -c "c +#endif + #define LINE_LENGTH 2048*10 char line[LINE_LENGTH]; @@ -235,12 +243,7 @@ ssize_t enhanced_atoi(const char *str) << "}\n\n"; out_stream.close(); -#ifdef _MSC_VER //MSVC - system("cl /nologo /Feeatio.exe eatio.c"); -#else - system("gcc -o eatio.exe eatio.c -s"); -#endif - + system(COMPILE_EXE("eatio.exe", "eatio.c")); system("."SLASH_STR"eatio.exe"); remove("eatio.c"); @@ -1344,6 +1347,7 @@ void parser_generate(istream& psr_stream, ostream& c_stream, ostream& cheader_st int main(size_t argc, const char **argv) { const char *cheader_file = 0; + bool compile = false; size_t param_pos = 1; for (; param_pos < argc; param_pos++) @@ -1357,6 +1361,10 @@ int main(size_t argc, const char **argv) param_pos++; cheader_file = argv[param_pos]; } + else if (!strcmp(argv[param_pos], "-compile")) + { + compile = true; + } else { break; @@ -1383,7 +1391,8 @@ int main(size_t argc, const char **argv) return(1); } - const char *psr_file = argv[param_pos+1], *c_file = argv[param_pos]; + const char *psr_file = argv[param_pos+1], *c_file = compile ? "psrtemp.c" : argv[param_pos]; + const char *obj_file = compile ? argv[param_pos] : 0; int ret_val = 0; ifstream psr_stream(psr_file); @@ -1428,6 +1437,15 @@ int main(size_t argc, const char **argv) ret_val |= 4; } - return(0); + if (!ret_val && compile) + { + puts(COMPILE_OBJ("psrtemp.obj", "psrtemp.c")); + system(COMPILE_OBJ("psrtemp.obj", "psrtemp.c")); + remove("psrtemp.c"); + printf("Renaming psrtemp.obj to %s\n", obj_file); + rename("psrtemp.obj", obj_file); + } + + return(ret_val); }