aboutsummaryrefslogtreecommitdiffstats
path: root/test/CAPI
diff options
context:
space:
mode:
Diffstat (limited to 'test/CAPI')
-rw-r--r--test/CAPI/CMakeLists.txt20
-rw-r--r--test/CAPI/lit.local.cfg1
-rw-r--r--test/CAPI/standalone-capi-test.c49
3 files changed, 70 insertions, 0 deletions
diff --git a/test/CAPI/CMakeLists.txt b/test/CAPI/CMakeLists.txt
new file mode 100644
index 0000000..eaa6cfc
--- /dev/null
+++ b/test/CAPI/CMakeLists.txt
@@ -0,0 +1,20 @@
+# Here we create a single aggregate shared library with the parts of the CAPI
+# that we want to bundle together. Then we link a simple C executable
+# against it to demonstrate that it does have the fully self contained
+# core MLIR library and our own standalone dialect.
+add_mlir_aggregate(StandaloneCAPITestLib
+ SHARED
+ EMBED_LIBS
+ MLIRCAPIIR
+ # TODO: Remove this in favor of showing fine grained dialect registration
+ # (once available).
+ MLIRCAPIRegisterEverything
+ StandaloneCAPI
+)
+
+add_llvm_executable(standalone-capi-test
+ standalone-capi-test.c
+)
+llvm_update_compile_flags(standalone-capi-test)
+target_link_libraries(standalone-capi-test
+ PRIVATE StandaloneCAPITestLib)
diff --git a/test/CAPI/lit.local.cfg b/test/CAPI/lit.local.cfg
new file mode 100644
index 0000000..f08a0de
--- /dev/null
+++ b/test/CAPI/lit.local.cfg
@@ -0,0 +1 @@
+config.suffixes.add('.c')
diff --git a/test/CAPI/standalone-capi-test.c b/test/CAPI/standalone-capi-test.c
new file mode 100644
index 0000000..54f3ca7
--- /dev/null
+++ b/test/CAPI/standalone-capi-test.c
@@ -0,0 +1,49 @@
+//===- standalone-cap-demo.c - Simple demo of C-API -----------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM
+// Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// RUN: standalone-capi-test 2>&1 | FileCheck %s
+
+#include <stdio.h>
+
+#include "Standalone-c/Dialects.h"
+#include "mlir-c/IR.h"
+#include "mlir-c/RegisterEverything.h"
+
+static void registerAllUpstreamDialects(MlirContext ctx) {
+ MlirDialectRegistry registry = mlirDialectRegistryCreate();
+ mlirRegisterAllDialects(registry);
+ mlirContextAppendDialectRegistry(ctx, registry);
+ mlirDialectRegistryDestroy(registry);
+}
+
+int main(int argc, char **argv) {
+ MlirContext ctx = mlirContextCreate();
+ // TODO: Create the dialect handles for the builtin dialects and avoid this.
+ // This adds dozens of MB of binary size over just the standalone dialect.
+ registerAllUpstreamDialects(ctx);
+ mlirDialectHandleRegisterDialect(mlirGetDialectHandle__standalone__(), ctx);
+
+ MlirModule module = mlirModuleCreateParse(
+ ctx, mlirStringRefCreateFromCString("%0 = arith.constant 2 : i32\n"
+ "%1 = standalone.foo %0 : i32\n"));
+ if (mlirModuleIsNull(module)) {
+ printf("ERROR: Could not parse.\n");
+ mlirContextDestroy(ctx);
+ return 1;
+ }
+ MlirOperation op = mlirModuleGetOperation(module);
+
+ // CHECK: %[[C:.*]] = arith.constant 2 : i32
+ // CHECK: standalone.foo %[[C]] : i32
+ mlirOperationDump(op);
+
+ mlirModuleDestroy(module);
+ mlirContextDestroy(ctx);
+ return 0;
+}