示例#1
0
int main(int argc, char ** argv) {
  llvm::sys::PrintStackTraceOnErrorSignal();
  llvm::PrettyStackTraceProgram X(argc, argv);
	std::vector<std::string> arg_list;
	llvm::llvm_shutdown_obj Y;   // Call llvm_shutdown() on exit.
	std::string tmp;
	char **luac_argv;
	int luac_argc=0;
	int new_argc=0;
	int pos;
	int ret;

  // Initialize targets first.
  llvm::InitializeAllTargets();
  llvm::InitializeAllTargetMCs();
  llvm::InitializeAllAsmPrinters();
  llvm::InitializeAllAsmParsers();

	llvm::cl::SetVersionPrinter(print_version);

	llvm::cl::ParseCommandLineOptions(argc, argv, "LLVM-Lua native compiler\n");
	// Show version?
	if(ShowVersion) {
		print_version();
		return 0;
	}
	// recreate arg list.
	arg_list.push_back(argv[0]);
	for(std::vector<std::string>::iterator I=Libraries.begin(); I != Libraries.end(); I++) {
		pos = Libraries.getPosition(I - Libraries.begin());
		// keep same format -llibrary or -l library
		if(argv[pos][0] == '-' && argv[pos][1] == 'L') {
			tmp = "-L";
			tmp.append(*I);
			arg_list.push_back(tmp);
		} else {
			arg_list.push_back("-L");
			arg_list.push_back(*I);
		}
	}
	if(Bitcode) {
		arg_list.push_back("-bc");
	}
	for(std::vector<bool>::iterator I=ListOpcodes.begin(); I != ListOpcodes.end(); I++) {
		arg_list.push_back("-l");
	}
	if(!Output.empty()) {
		arg_list.push_back("-o");
		arg_list.push_back(Output);
	}
	if(ParseOnly) {
		arg_list.push_back("-p");
	}
	if(StripDebug) {
		arg_list.push_back("-s");
	}
	arg_list.insert(arg_list.end(),InputFiles.begin(), InputFiles.end());
	/* construct luac_argc, luac_argv. */
	new_argc = arg_list.size() + 1;
	luac_argv = (char **)calloc(new_argc, sizeof(char *));
	for(std::vector<std::string>::iterator I=arg_list.begin(); I != arg_list.end(); I++) {
		if(luac_argc == new_argc) break;
		luac_argv[luac_argc] = (char *)(*I).c_str();
		luac_argc++;
	}
	luac_argv[luac_argc] = NULL;

	// initialize the Lua to LLVM compiler.
	ret = llvm_compiler_main(0);
	// Run the main Lua compiler
	ret = luac_main(luac_argc, luac_argv);
	return ret;
}
示例#2
0
static int do_luac(int argc, char ** argv)
{
	return luac_main(argc, argv);
}