Skip to content

Commit

Permalink
partial windows compatibility
Browse files Browse the repository at this point in the history
  • Loading branch information
vtjnash committed Nov 29, 2013
1 parent 9ac166d commit dfbf414
Show file tree
Hide file tree
Showing 7 changed files with 29 additions and 28 deletions.
4 changes: 4 additions & 0 deletions Make.inc
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,9 @@ ifneq ($(ARCH), ppc64)
endif
endif

ifeq ($(OS),WINNT)
LIBUNWIND=
else
ifeq ($(USE_SYSTEM_LIBUNWIND), 1)
ifneq ($(OS),Darwin)
LIBUNWIND=-lunwind-generic -lunwind
Expand All @@ -251,6 +254,7 @@ else
LIBUNWIND=$(BUILD)/$(JL_LIBDIR)/libunwind-generic.a $(BUILD)/$(JL_LIBDIR)/libunwind.a
endif
endif
endif

ifeq ($(USE_SYSTEM_LLVM), 1)
LLVM_CONFIG ?= llvm-config$(EXE)
Expand Down
5 changes: 4 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,10 @@ $(BUILD)/$(JL_PRIVATE_LIBDIR)/sys%o: $(BUILD)/$(JL_PRIVATE_LIBDIR)/sys%bc
$(call spawn,$(LLVM_LLC)) -filetype=obj -relocation-model=pic -o $@ $<

$(BUILD)/$(JL_PRIVATE_LIBDIR)/sys%$(SHLIB_EXT): $(BUILD)/$(JL_PRIVATE_LIBDIR)/sys%o
@$(CXX) -g -shared -fPIC -L$(BUILD)/$(JL_PRIVATE_LIBDIR) -L$(BUILD)/$(JL_LIBDIR) -o $@ $< -Wl,-undefined,dynamic_lookup -lgrisu -lrandom -lgmp -lpcre -lmpfr $(LIBBLAS) $(LIBLAPACK) $(LIBM) $(LIBUNWIND)
$(CXX) -g -shared -fPIC -L$(BUILD)/$(JL_PRIVATE_LIBDIR) -L$(BUILD)/$(JL_LIBDIR) -o $@ $< \
-Wl,-undefined,dynamic_lookup -Wl,--unresolved-symbols,ignore-all \
-lgrisu -lrandom -lgmp -lpcre -lmpfr $(LIBBLAS) $(LIBLAPACK) $(LIBM) $(LIBUNWIND) \
$$([ $(OS) = WINNT ] && echo -ljulia -lssp)

$(BUILD)/$(JL_PRIVATE_LIBDIR)/sys0.bc:
@$(QUIET_JULIA) cd base && \
Expand Down
6 changes: 2 additions & 4 deletions src/ccall.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -368,11 +368,9 @@ static native_sym_arg_t interpret_symbol_arg(jl_value_t *arg, jl_codectx_t *ctx,
f_name = jl_string_data(ptr);
if (f_name != NULL) {
// just symbol, default to JuliaDLHandle
#ifdef _OS_WINDOWS_
//TODO: store the f_lib name instead of fptr
fptr = jl_dlsym_win32(f_name);
#else
// will look in process symbol table
#ifdef _OS_WINDOWS_
f_lib = jl_dlfind_win32(f_name);
#endif
}
else if (jl_is_cpointer_type(jl_typeof(ptr))) {
Expand Down
33 changes: 14 additions & 19 deletions src/dlload.c
Original file line number Diff line number Diff line change
Expand Up @@ -181,25 +181,20 @@ DLLEXPORT void *jl_dlsym(uv_lib_t *handle, char *symbol)

#ifdef _OS_WINDOWS_
//Look for symbols in win32 libraries
void *jl_dlsym_win32(char *f_name)
char *jl_dlfind_win32(char *f_name)
{
void *fptr = jl_dlsym_e(jl_exe_handle, f_name);
if (!fptr) {
fptr = jl_dlsym_e(jl_dl_handle, f_name);
if (!fptr) {
fptr = jl_dlsym_e(jl_kernel32_handle, f_name);
if (!fptr) {
fptr = jl_dlsym_e(jl_ntdll_handle, f_name);
if (!fptr) {
fptr = jl_dlsym_e(jl_crtdll_handle, f_name);
if (!fptr) {
fptr = jl_dlsym(jl_winsock_handle, f_name);
}
}
}
}
}
return fptr;
if (jl_dlsym_e(jl_exe_handle, f_name))
return NULL;
if (jl_dlsym_e(jl_dl_handle, f_name))
return NULL;
if (jl_dlsym_e(jl_kernel32_handle, f_name))
return "kernel32";
if (jl_dlsym_e(jl_ntdll_handle, f_name))
return "ntdll";
if (jl_dlsym_e(jl_crtdll_handle, f_name))
return "msvcrt";
if (jl_dlsym(jl_winsock_handle, f_name))
return "ws2_32";
return NULL;
}

#endif
2 changes: 1 addition & 1 deletion src/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -790,7 +790,7 @@ DLLEXPORT void jl_install_sigint_handler()
//printf("sigint installed\n");
}


extern int asprintf(char **str, const char *fmt, ...);
extern void * __stack_chk_guard;

DLLEXPORT int julia_trampoline(int argc, char **argv, int (*pmain)(int ac,char *av[]), char *build_path)
Expand Down
1 change: 1 addition & 0 deletions src/julia.expmap
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@
jl_exception_occurred;
jl_exception_clear;
jl_tuple;
jl_type_error_rt;
jl_typeof_str;
jl_typename_str;
jl_array_eltype;
Expand Down
6 changes: 3 additions & 3 deletions src/julia.h
Original file line number Diff line number Diff line change
Expand Up @@ -869,8 +869,8 @@ void NORETURN jl_errorf(const char *fmt, ...);
void jl_too_few_args(const char *fname, int min);
void jl_too_many_args(const char *fname, int max);
void jl_type_error(const char *fname, jl_value_t *expected, jl_value_t *got);
void jl_type_error_rt(const char *fname, const char *context,
jl_value_t *ty, jl_value_t *got);
DLLEXPORT void jl_type_error_rt(const char *fname, const char *context,
jl_value_t *ty, jl_value_t *got);
jl_value_t *jl_no_method_error(jl_function_t *f, jl_value_t **args, size_t na);
void jl_check_type_tuple(jl_tuple_t *t, jl_sym_t *name, const char *ctx);

Expand Down Expand Up @@ -959,7 +959,7 @@ DLLEXPORT void *jl_dlsym_e(uv_lib_t *handle, char *symbol);
DLLEXPORT void *jl_dlsym(uv_lib_t *handle, char *symbol);
DLLEXPORT uv_lib_t *jl_wrap_raw_dl_handle(void *handle);
void *jl_dlsym_e(uv_lib_t *handle, char *symbol); //supress errors
void *jl_dlsym_win32(char *name);
char *jl_dlfind_win32(char *name);
DLLEXPORT int add_library_mapping(char *lib, void *hnd);

// event loop
Expand Down

0 comments on commit dfbf414

Please sign in to comment.