diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 05346f05..d880e59f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -41,4 +41,4 @@ if (Thorin_HAS_LLVM_SUPPORT) llvm_config(artic ${AnyDSL_LLVM_LINK_SHARED} core support) endif () -target_link_libraries(artic PUBLIC dl) +target_link_libraries(artic PUBLIC ${CMAKE_DL_LIBS}) diff --git a/src/emit.cpp b/src/emit.cpp index a7e6a545..5559e43e 100644 --- a/src/emit.cpp +++ b/src/emit.cpp @@ -1676,6 +1676,10 @@ const thorin::Def* FnDecl::emit(Emitter& emitter) const { } else if (auto import_attr = attrs->find("import")) { if (auto name_attr = import_attr->find("name")) cont->set_name(name_attr->as()->lit.as_string()); + if (auto depends_attr = import_attr->find("depends")) { + auto depends = depends_attr->as(); + cont->attributes().depends = depends->path.emit(emitter)->as(); + } if (auto cc_attr = import_attr->find("cc")) { auto cc = cc_attr->as()->lit.as_string(); if (cc == "device") { @@ -1687,14 +1691,11 @@ const thorin::Def* FnDecl::emit(Emitter& emitter) const { } else if (cc == "thorin") cont->set_intrinsic(); else if (cc == "plugin") - cont->attributes().intrinsic = thorin::Intrinsic::Plugin; + // any depends are guaranteed to be emitted earlier + emitter.world.link_plugin_intrinsic(cont); else if (cc == "builtin") emitter.builtin(*this, cont); } - if (auto depends_attr = import_attr->find("depends")) { - auto depends = depends_attr->as(); - cont->attributes().depends = depends->path.emit(emitter)->as(); - } } } diff --git a/src/main.cpp b/src/main.cpp index ff703ccf..dc9e3644 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -299,6 +299,10 @@ int main(int argc, char** argv) { world.set(opts.log_level); world.set(std::make_shared(std::cerr)); + for (auto plugin_to_load : opts.plugin_files) { + world.load_plugin(plugin_to_load.c_str()); + } + ast::ModDecl program; bool success = compile( opts.files, file_data, @@ -322,10 +326,6 @@ int main(int argc, char** argv) { if (!success) return EXIT_FAILURE; - for (auto plugin_to_load : opts.plugin_files) { - world.register_plugin(plugin_to_load.c_str()); - } - if (opts.opt_level == 1) world.cleanup(); if (opts.emit_c_int) {