Esempio n. 1
0
/* compile - compile src into dst, return status */
static int compile(char *src, char *dst) {
	compose(com, clist, append(src, 0), append(dst, 0));
	return callsys(av);
}
Esempio n. 2
0
static int
asm_exec(const char *infile, const char *outfile)
{
	list_t *l;
	const char *file;
	int rv;

	if (opt.prog_asm == NULL)
		error("No assembler is defined");

	l = list_alloc();

	list_add_file(l, opt.prog_asm, &progdirs, X_OK);

	Wflag_add(l, W_ASM);

	list_add_list(l, opt.Wa);

	{
		-p gnu
		-f <type>
#if defined(USE_YASM)
		av[na++] = "-p";
		av[na++] = "gnu";

		av[na++] = "-f";
#if defined(os_win32)
		av[na++] = "win32";
#elif defined(os_darwin)
		av[na++] = "macho";
#else
		av[na++] = "elf";
#endif
#endif

#if defined(os_sunos) && defined(mach_sparc64)
		av[na++] = "-m64";
#endif

#if defined(os_darwin)
		if (Bstatic)
			av[na++] = "-static";
#endif

#if !defined(USE_YASM)
		if (vflag)
			av[na++] = "-v";
#endif
		if (kflag)
			av[na++] = "-k";

#ifdef os_darwin
		av[na++] = "-arch";
#if mach_amd64
		av[na++] = amd64_i386 ? "i386" : "x86_64";
#else
		av[na++] = "i386";
#endif
#else
#ifdef mach_amd64
		if (amd64_i386)
			av[na++] = "--32";
#endif
#endif

		av[na++] = "-o";
		if (outfile && cflag)
			ermfile = av[na++] = outfile;
		else if (cflag)
			ermfile = av[na++] = olist[i] = setsuf(clist[i], 'o');
		else
			ermfile = av[na++] = olist[i] = gettmp();
		av[na++] = assource;
		av[na++] = 0;

		if (callsys(as, av)) {
			cflag++;
			eflag++;
			cunlink(tmp4);
			continue;
		}
	}

	if (infile != NULL)
		list_add(l, infile);
	else if (outfile != NULL)
		list_add(l, "-");

	if (outfile != NULL) {
		list_add(l, "-o");
		list_add(l, outfile);
	}

	rv = list_exec(l);
	list_free(l);
	return rv;
}