@@ -23,6 +23,7 @@ include("code_loading.jl")
2323include (" optimize.jl" )
2424include (" quirks.jl" )
2525
26+ fix_name (s) = string (" julia_" , GPUCompiler. safe_name (s))
2627
2728"""
2829 compile(f, types, path::String = tempname()) --> (compiled_f, path)
@@ -91,12 +92,13 @@ single method (the method determined by `types`).
9192"""
9293function compile (f, _tt, path:: String = tempname ();
9394 mixtape = NoContext (),
94- name = GPUCompiler . safe_name (repr (f)),
95+ name = fix_name (repr (f)),
9596 filename = " obj" ,
9697 strip_llvm = false ,
9798 strip_asm = true ,
9899 opt_level= 3 ,
99100 kwargs... )
101+
100102 tt = Base. to_tuple_type (_tt)
101103 isconcretetype (tt) || error (" input type signature $_tt is not concrete" )
102104
114116
115117"""
116118```julia
117- generate_obj(f, tt, path::String = tempname(), name = GPUCompiler.safe_name (repr(f)), filenamebase::String="obj";
119+ generate_obj(f, tt, path::String = tempname(), name = fix_name (repr(f)), filenamebase::String="obj";
118120 \t mixtape = NoContext(),
119121 \t strip_llvm = false,
120122 \t strip_asm = true,
@@ -148,7 +150,7 @@ shell> tree \$path
1481500 directories, 1 file
149151```
150152"""
151- function generate_obj (f, tt, external = true , path:: String = tempname (), name = GPUCompiler . safe_name (repr (f)), filenamebase:: String = " obj" ;
153+ function generate_obj (f, tt, external = true , path:: String = tempname (), name = fix_name (repr (f)), filenamebase:: String = " obj" ;
152154 mixtape = NoContext (),
153155 strip_llvm = false ,
154156 strip_asm = true ,
@@ -158,12 +160,9 @@ function generate_obj(f, tt, external = true, path::String = tempname(), name =
158160 mkpath (path)
159161 obj_path = joinpath (path, " $filenamebase .o" )
160162 # Get LLVM to generated a module of code for us. We don't want GPUCompiler's optimization passes.
161- job = CompilerJob (NativeCompilerTarget (target... ),
162- FunctionSpec (f, tt, false , name),
163- StaticCompilerParams (;
164- opt = true ,
165- mixtape = mixtape,
166- optlevel = Base. JLOptions (). opt_level))
163+ params = StaticCompilerParams (opt = true , mixtape = mixtape, optlevel = Base. JLOptions (). opt_level)
164+ config = GPUCompiler. CompilerConfig (NativeCompilerTarget (target... ), params, name = name, kernel = false )
165+ job = GPUCompiler. CompilerJob (GPUCompiler. methodinstance (typeof (f), tt), config)
167166
168167 mod, meta = GPUCompiler. JuliaContext () do context
169168 GPUCompiler. codegen (:llvm , job; strip= strip_llvm, only_entry= false , validate= false , optimize= false , ctx= context)
@@ -259,7 +258,7 @@ shell> ./hello
259258Hello, world!
260259```
261260"""
262- function compile_executable (f:: Function , types= (), path:: String = " ./" , name= GPUCompiler . safe_name (repr (f));
261+ function compile_executable (f:: Function , types= (), path:: String = " ./" , name= fix_name (repr (f));
263262 filename= name,
264263 cflags= ` ` ,
265264 kwargs...
@@ -315,7 +314,7 @@ julia> ccall(("julia_test", "test.dylib"), Float64, (Int64,), 100_000)
3153145.2564961094956075
316315```
317316"""
318- function compile_shlib (f:: Function , types= (), path:: String = " ./" , name= GPUCompiler . safe_name (repr (f));
317+ function compile_shlib (f:: Function , types= (), path:: String = " ./" , name= fix_name (repr (f));
319318 filename= name,
320319 cflags= ` ` ,
321320 kwargs...
@@ -396,19 +395,19 @@ julia> test(100_000)
396395function generate_shlib_fptr (path:: String , name, filename:: String = name)
397396 lib_path = joinpath (abspath (path), " $filename .$(Libdl. dlext) " )
398397 ptr = Libdl. dlopen (lib_path, Libdl. RTLD_LOCAL)
399- fptr = Libdl. dlsym (ptr, " julia_ $ name" )
398+ fptr = Libdl. dlsym (ptr, name)
400399 @assert fptr != C_NULL
401400 fptr
402401end
403402# As above, but also compile (maybe remove this method in the future?)
404- function generate_shlib_fptr (f, tt, path:: String = tempname (), name = GPUCompiler . safe_name (repr (f)), filename:: String = name;
403+ function generate_shlib_fptr (f, tt, path:: String = tempname (), name = fix_name (repr (f)), filename:: String = name;
405404 temp:: Bool = true ,
406405 kwargs... )
407406
408407 generate_shlib (f, tt, false , path, name; kwargs... )
409408 lib_path = joinpath (abspath (path), " $filename .$(Libdl. dlext) " )
410409 ptr = Libdl. dlopen (lib_path, Libdl. RTLD_LOCAL)
411- fptr = Libdl. dlsym (ptr, " julia_ $ name" )
410+ fptr = Libdl. dlsym (ptr, name)
412411 @assert fptr != C_NULL
413412 if temp
414413 atexit (()-> rm (path; recursive= true ))
@@ -436,7 +435,7 @@ shell> ./hello
436435Hello, world!
437436```
438437"""
439- function generate_executable (f, tt, path= tempname (), name= GPUCompiler . safe_name (repr (f)), filename= string (name);
438+ function generate_executable (f, tt, path= tempname (), name= fix_name (repr (f)), filename= string (name);
440439 cflags= ` ` ,
441440 kwargs...
442441 )
@@ -456,18 +455,18 @@ function generate_executable(f, tt, path=tempname(), name=GPUCompiler.safe_name(
456455 # Compile!
457456 if Sys. isapple ()
458457 # Apple no longer uses _start, so we can just specify a custom entry
459- entry = " _julia_ $name "
458+ entry = " _ $name "
460459 run (` $cc -e $entry $cflags $obj_path -o $exec_path ` )
461460 else
462461 # Write a minimal wrapper to avoid having to specify a custom entry
463462 wrapper_path = joinpath (path, " wrapper.c" )
464463 f = open (wrapper_path, " w" )
465- print (f, """ int julia_ $name (int argc, char** argv);
464+ print (f, """ int $name (int argc, char** argv);
466465 void* __stack_chk_guard = (void*) $(rand (UInt) >> 1 ) ;
467466
468467 int main(int argc, char** argv)
469468 {
470- julia_ $name (argc, argv);
469+ $name (argc, argv);
471470 return 0;
472471 }""" )
473472 close (f)
@@ -517,7 +516,7 @@ julia> ccall(("julia_test", "example/test.dylib"), Float64, (Int64,), 100_000)
5175165.2564961094956075
518517```
519518"""
520- function generate_shlib (f:: Function , tt, external:: Bool = true , path:: String = tempname (), name= GPUCompiler . safe_name (repr (f)), filename= name;
519+ function generate_shlib (f:: Function , tt, external:: Bool = true , path:: String = tempname (), name= fix_name (repr (f)), filename= name;
521520 cflags= ` ` ,
522521 kwargs...
523522 )
@@ -568,15 +567,15 @@ function native_code_typed(@nospecialize(func), @nospecialize(types); kwargs...)
568567end
569568
570569# Return an LLVM module
571- function native_llvm_module (f, tt, name = GPUCompiler . safe_name (repr (f)); kwargs... )
570+ function native_llvm_module (f, tt, name = fix_name (repr (f)); kwargs... )
572571 job, kwargs = native_job (f, tt, true ; name, kwargs... )
573572 m, _ = GPUCompiler. JuliaContext () do context
574573 GPUCompiler. codegen (:llvm , job; strip= true , only_entry= false , validate= false , ctx= context)
575574 end
576575 return m
577576end
578577
579- function native_code_native (@nospecialize (f), @nospecialize (tt), name = GPUCompiler . safe_name (repr (f)); kwargs... )
578+ function native_code_native (@nospecialize (f), @nospecialize (tt), name = fix_name (repr (f)); kwargs... )
580579 job, kwargs = native_job (f, tt, true ; name, kwargs... )
581580 GPUCompiler. code_native (stdout , job; kwargs... )
582581end
@@ -587,7 +586,7 @@ function native_llvm_module(funcs::Array; demangle = false, kwargs...)
587586 mod = native_llvm_module (f,tt, kwargs... )
588587 if length (funcs) > 1
589588 for func in funcs[2 : end ]
590- @show f,tt = func
589+ f,tt = func
591590 tmod = native_llvm_module (f,tt, kwargs... )
592591 link! (mod,tmod)
593592 end
@@ -613,10 +612,10 @@ function generate_obj(funcs::Array, external, path::String = tempname(), filenam
613612 strip_asm = true ,
614613 opt_level= 3 ,
615614 kwargs... )
616- f,tt = funcs[1 ]
615+ f, tt = funcs[1 ]
617616 mkpath (path)
618617 obj_path = joinpath (path, " $filenamebase .o" )
619- fakejob, kwargs = native_job (f,tt, external, kwargs... )
618+ fakejob, kwargs = native_job (f, tt, external, kwargs... )
620619 mod = native_llvm_module (funcs; demangle = demangle, kwargs... )
621620 obj, _ = GPUCompiler. emit_asm (fakejob, mod; strip= strip_asm, validate= false , format= LLVM. API. LLVMObjectFile)
622621 open (obj_path, " w" ) do io
0 commit comments