summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authork0kubun <k0kubun@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-07-25 13:54:00 +0000
committerk0kubun <k0kubun@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-07-25 13:54:00 +0000
commit40bb70c7ebd53598582653f94d438e2b34ec627f (patch)
treeca922d573c9fc7da5867518b94dc642ca905162a
parentf10582d8e7a16bca5b954e173ed6a66acf092f36 (diff)
mjit.c: completely separate compile_c_to_so
by whether on mswin or not. This is needed because I'm going to renew the compilation process for unix, keeping mswin builds as it is, at first. This commit is not changing the behavior at all. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64051 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--mjit.c62
1 files changed, 38 insertions, 24 deletions
diff --git a/mjit.c b/mjit.c
index 3d5b74b..3a5d8fb 100644
--- a/mjit.c
+++ b/mjit.c
@@ -741,34 +741,18 @@ make_pch(void)
#define append_str(p, str) append_str2(p, str, sizeof(str)-1)
#define append_lit(p, str) append_str2(p, str, rb_strlen_lit(str))
-/* Compile C file to so. It returns 1 if it succeeds. */
+#ifdef _MSC_VER
+
+/* Compile C file to so. It returns 1 if it succeeds. (mswin) */
static int
compile_c_to_so(const char *c_file, const char *so_file)
{
int exit_code;
- const char *files[] = {
-#ifndef _MSC_VER
- "-o",
-#endif
- NULL, NULL,
-#ifdef __clang__
- "-include-pch", NULL,
-#endif
-#ifdef _WIN32
-# ifdef _MSC_VER
- "-link",
-# endif
- libruby_pathflag,
-#endif
- NULL,
- };
+ const char *files[] = { NULL, NULL, "-link", libruby_pathflag, NULL };
char **args;
-#ifdef _MSC_VER
char *p;
int solen;
-#endif
-#ifdef _MSC_VER
solen = strlen(so_file);
files[0] = p = (char *)malloc(sizeof(char) * (rb_strlen_lit("-Fe") + solen + 1));
if (p == NULL)
@@ -777,13 +761,44 @@ compile_c_to_so(const char *c_file, const char *so_file)
p = append_str2(p, so_file, solen);
*p = '\0';
files[1] = c_file;
+ args = form_args(5, CC_LDSHARED_ARGS, CC_CODEFLAG_ARGS,
+ files, CC_LIBS, CC_DLDFLAGS_ARGS);
+ if (args == NULL)
+ return FALSE;
+
+ exit_code = exec_process(cc_path, args);
+ free(args);
+ free((char *)files[0]);
+
+ if (exit_code != 0)
+ verbose(2, "compile_c_to_so: compile error: %d", exit_code);
+ return exit_code == 0;
+}
+
#else
+
+/* Compile C file to so. It returns 1 if it succeeds. (non-mswin) */
+static int
+compile_c_to_so(const char *c_file, const char *so_file)
+{
+ int exit_code;
+ const char *files[] = {
+ "-o", NULL, NULL,
+# ifdef __clang__
+ "-include-pch", NULL,
+# endif
+# ifdef _WIN32
+ libruby_pathflag,
+# endif
+ NULL,
+ };
+ char **args;
+
# ifdef __clang__
files[4] = pch_file;
# endif
files[2] = c_file;
files[1] = so_file;
-#endif
args = form_args(5, CC_LDSHARED_ARGS, CC_CODEFLAG_ARGS,
files, CC_LIBS, CC_DLDFLAGS_ARGS);
if (args == NULL)
@@ -791,15 +806,14 @@ compile_c_to_so(const char *c_file, const char *so_file)
exit_code = exec_process(cc_path, args);
free(args);
-#ifdef _MSC_VER
- free((char *)files[0]);
-#endif
if (exit_code != 0)
verbose(2, "compile_c_to_so: compile error: %d", exit_code);
return exit_code == 0;
}
+#endif
+
static void *
load_func_from_so(const char *so_file, const char *funcname, struct rb_mjit_unit *unit)
{