diff --git a/ClangAstParser/src/pt/up/fe/specs/clang/ClangAstWebResource.java b/ClangAstParser/src/pt/up/fe/specs/clang/ClangAstWebResource.java index ed95b332c..55a3d0e1d 100644 --- a/ClangAstParser/src/pt/up/fe/specs/clang/ClangAstWebResource.java +++ b/ClangAstParser/src/pt/up/fe/specs/clang/ClangAstWebResource.java @@ -39,7 +39,7 @@ static WebResourceProvider create(String resourceUrl) { WebResourceProvider WIN_DLL1 = create("windows/libwinpthread-1.dll"); WebResourceProvider WIN_DLL2 = create("windows/zlib1.dll"); - WebResourceProvider LINUX_EXE = create("linux_ubuntu_18/clang_ast", "v12.0.7"); + WebResourceProvider LINUX_EXE = create("linux_ubuntu_18/clang-plugin.so", "16"); // Disabled while we do not have an updated Odroid WebResourceProvider LINUX_ARMV7_EXE = create("linux_ubuntu_14_armv7/clang_ast", "v4.2.19"); diff --git a/ClangAstParser/src/pt/up/fe/specs/clang/codeparser/ParallelCodeParser.java b/ClangAstParser/src/pt/up/fe/specs/clang/codeparser/ParallelCodeParser.java index aebbb112b..913963191 100644 --- a/ClangAstParser/src/pt/up/fe/specs/clang/codeparser/ParallelCodeParser.java +++ b/ClangAstParser/src/pt/up/fe/specs/clang/codeparser/ParallelCodeParser.java @@ -34,6 +34,7 @@ import pt.up.fe.specs.clang.ClangAstKeys; import pt.up.fe.specs.clang.ClangResources; +import pt.up.fe.specs.clang.LibcMode; import pt.up.fe.specs.clang.dumper.ClangAstData; import pt.up.fe.specs.clang.dumper.ClangAstDumper; import pt.up.fe.specs.clang.dumper.ClangAstParser; @@ -118,6 +119,10 @@ public App parse(List inputSources, List compilerOptions, ClavaCon // Prepare resources before execution // ClangResources clangResources = new ClangResources(get(SHOW_CLANG_DUMP)); ClangResources clangResources = new ClangResources(this); + if (SpecsSystem.isLinux()) { + set(ClangAstKeys.LIBC_CXX_MODE, LibcMode.SYSTEM); + ClavaLog.debug(() -> "In Linux, ClangAstDumper is a plugin. LIBC_CXX_MODE is reset to SYSTEM."); + } var clangFiles = clangResources.getClangFiles(version, get(ClangAstKeys.LIBC_CXX_MODE)); // File clangExecutable = clangResources.prepareResources(version); // List builtinIncludes = clangResources.prepareIncludes(clangExecutable, diff --git a/ClangAstParser/src/pt/up/fe/specs/clang/dumper/ClangAstDumper.java b/ClangAstParser/src/pt/up/fe/specs/clang/dumper/ClangAstDumper.java index 5ecaeb531..b2d837882 100644 --- a/ClangAstParser/src/pt/up/fe/specs/clang/dumper/ClangAstDumper.java +++ b/ClangAstParser/src/pt/up/fe/specs/clang/dumper/ClangAstDumper.java @@ -145,15 +145,37 @@ private ClangAstData parsePrivate(File sourceFile, String id, Standard standard, LocalOptionsKeys.getProvider().getStoreDefinition()); List arguments = new ArrayList<>(); - arguments.add(clangExecutable.getAbsolutePath()); + if (SpecsPlatforms.isLinux()) { + arguments.add("clang-16"); + arguments.add("-c"); + + arguments.add("-Xclang"); + arguments.add("-load"); + arguments.add("-Xclang"); + arguments.add(clangExecutable.getAbsolutePath()); + arguments.add("-Xclang"); + arguments.add("-plugin"); + arguments.add("-Xclang"); + arguments.add("DumpAst"); + arguments.add("-Xclang"); + arguments.add("-plugin-arg-DumpAst"); + arguments.add("-Xclang"); + arguments.add("-file-id=" + id); + arguments.add("-Xclang"); + arguments.add("-plugin-arg-DumpAst"); + arguments.add("-Xclang"); + arguments.add("-system-threshold=" + systemIncludesThreshold); + } else { + arguments.add(clangExecutable.getAbsolutePath()); - arguments.add(sourceFile.getAbsolutePath()); + arguments.add(sourceFile.getAbsolutePath()); - arguments.add("-id=" + id); + arguments.add("-id=" + id); - arguments.add("-system-header-threshold=" + systemIncludesThreshold); + arguments.add("-system-header-threshold=" + systemIncludesThreshold); - arguments.add("--"); + arguments.add("--"); + } var extension = SpecsIo.getExtension(sourceFile); boolean isOpenCL = extension.equals("cl"); @@ -223,23 +245,28 @@ else if (SourceType.isHeader(sourceFile)) { arguments.add(standard.isCxx() ? "c++" : "c"); } + if (SpecsPlatforms.isLinux()) { + arguments.add(sourceFile.getAbsolutePath()); + } else { + List systemIncludes = new ArrayList<>(); - // Add includes bundled with program - // (only on Windows, it is expected that a Linux system has its own headers for libc/libc++) - // if (Platforms.isWindows()) { - // systemIncludes.addAll(clangAstParser.prepareIncludes(clangExecutable, usePlatformLibc)); - systemIncludes.addAll(builtinIncludes); - // } - - // Add custom includes - systemIncludes.addAll(localData.get(LocalOptionsKeys.SYSTEM_INCLUDES).getStringList()); - - // Add local system includes - // for (String systemInclude : localData.get(LocalOptionsKeys.SYSTEM_INCLUDES)) { - for (String systemInclude : systemIncludes) { - arguments.add("-isystem"); - arguments.add(systemInclude); + // Add includes bundled with program + // (only on Windows, it is expected that a Linux system has its own headers for libc/libc++) + // if (Platforms.isWindows()) { + // systemIncludes.addAll(clangAstParser.prepareIncludes(clangExecutable, usePlatformLibc)); + systemIncludes.addAll(builtinIncludes); + // } + + // Add custom includes + systemIncludes.addAll(localData.get(LocalOptionsKeys.SYSTEM_INCLUDES).getStringList()); + + // Add local system includes + // for (String systemInclude : localData.get(LocalOptionsKeys.SYSTEM_INCLUDES)) { + for (String systemInclude : systemIncludes) { + arguments.add("-isystem"); + arguments.add(systemInclude); + } } arguments.addAll(ArgumentsParser.newCommandLine().parse(config.get(ClavaOptions.FLAGS)));