static void compileFile(const char *compiler, arglist *options, const char *cfile) { char ofile[MAXPATHLEN]; char *ext; arglist *args = copyArgList(options); if ( opt_o && nolink ) { strcpy(ofile, out); } else { strcpy(ofile, cfile); if ( (ext = (char *)file_name_extension(ofile)) ) strcpy(ext, EXT_OBJ); } if ( !opt_E ) prependArgList(args, "-c"); #if defined(HOST_OS_WINDOWS) appendArgList(args, "-D__WINDOWS__"); appendArgList(args, "-D_WINDOWS"); #endif appendArgList(args, "-D__SWI_PROLOG__"); if ( !shared ) appendArgList(args, "-D__SWI_EMBEDDED__"); concatArgList(args, "-I", &includedirs); if ( opt_o || !opt_E ) { appendArgList(args, "-o"); appendArgList(args, ofile); } appendArgList(args, cfile); callprog(compiler, args); appendArgList(&ofiles, ofile); if ( !nolink ) appendArgList(&tmpfiles, ofile); freeArgList(args); }
void linkSharedObject() { char soname[MAXPATHLEN]; char *soout; if ( !soext ) soext = SO_EXT; if ( file_name_extension(out) ) { soout = out; } else { soout = replaceExtension(out, soext, soname); } #if defined(HOST_TOOLCHAIN_MSC) prependArgList(&ldoptions, "/dll"); { char tmp[MAXPATHLEN]; sprintf(tmp, "/out:%s", soout); prependArgList(&ldoptions, tmp); } concatArgList(&ldoptions, "", &ofiles); /* object files */ exportlibdirs(); if ( !nolibswipl ) { appendArgList(&ldoptions, pllib); /* swipl.lib */ addOptionString(pllibs); } concatArgList(&ldoptions, "", &libs); /* libraries */ concatArgList(&ldoptions, "", &lastlibs); /* libraries */ #else /* !defined(HOST_TOOLCHAIN_MSC) */ #ifdef __CYGWIN__ prependArgList(&ldoptions, SO_LDFLAGS); prependArgList(&ldoptions, soout); prependArgList(&ldoptions, "-o"); /* -o ctmp */ concatArgList(&ldoptions, "", &ofiles); /* object files */ if ( !nolibswipl ) { appendArgList(&ldoptions, pllib); /* -lswipl */ addOptionString(pllibs); } concatArgList(&ldoptions, "-L", &libdirs); /* library directories */ concatArgList(&ldoptions, "", &libs); /* libraries */ concatArgList(&ldoptions, "", &lastlibs); /* libraries */ #else /*__CYGWIN__*/ #ifdef SO_FORMAT_LDFLAGS /* must specify output too */ { char tmp[MAXPATHLEN]; tmp[0] = UNQUOTED; sprintf(&tmp[1], SO_FORMAT_LDFLAGS); prependArgList(&ldoptions, tmp); } #else prependArgList(&ldoptions, SO_LDFLAGS); prependArgList(&ldoptions, soout); prependArgList(&ldoptions, "-o"); /* -o ctmp */ #endif /*SO_FORMAT_LDFLAGS*/ concatArgList(&ldoptions, "", &ofiles); /* object files */ concatArgList(&ldoptions, "-L", &libdirs); /* library directories */ concatArgList(&ldoptions, "", &libs); /* libraries */ #ifdef O_SHARED_KERNEL if ( !nolibswipl ) #endif { appendArgList(&ldoptions, pllib); /* -lswipl */ } concatArgList(&ldoptions, "", &lastlibs); /* libraries */ #ifdef __BEOS__ appendArgList(&ldoptions, plexe); /* last is executable */ #endif #endif /*__CYGWIN__*/ #endif /* !defined(HOST_TOOLCHAIN_MSC) */ callprog(ld, &ldoptions); }