12bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg/*===-- main.c - tool for testing libLLVM and llvm-c API ------------------===*\
22bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg|*                                                                            *|
32bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg|*                     The LLVM Compiler Infrastructure                       *|
42bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg|*                                                                            *|
52bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg|* This file is distributed under the University of Illinois Open Source      *|
62bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg|* License. See LICENSE.TXT for details.                                      *|
72bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg|*                                                                            *|
82bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg|*===----------------------------------------------------------------------===*|
92bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg|*                                                                            *|
102bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg|* Main file for llvm-c-tests. "Parses" arguments and dispatches.             *|
112bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg|*                                                                            *|
122bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg\*===----------------------------------------------------------------------===*/
132bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg
142bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg#include "llvm-c-test.h"
152bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg#include "llvm-c/BitReader.h"
162bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg#include "llvm-c/Core.h"
172bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg#include <stdio.h>
182bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg#include <stdlib.h>
192bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg#include <string.h>
202bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg
212bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborgstatic void print_usage(void) {
222bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg  fprintf(stderr, "llvm-c-test command\n\n");
232bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg  fprintf(stderr, " Commands:\n");
242bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg  fprintf(stderr, "  * --module-dump\n");
252bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg  fprintf(stderr, "    Read bytecode from stdin - print disassembly\n\n");
262bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg  fprintf(stderr, "  * --module-list-functions\n");
272bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg  fprintf(stderr,
282bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg          "    Read bytecode from stdin - list summary of functions\n\n");
292bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg  fprintf(stderr, "  * --module-list-globals\n");
302bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg  fprintf(stderr, "    Read bytecode from stdin - list summary of globals\n\n");
312bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg  fprintf(stderr, "  * --targets-list\n");
322bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg  fprintf(stderr, "    List available targets\n\n");
332bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg  fprintf(stderr, "  * --object-list-sections\n");
342bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg  fprintf(stderr, "    Read object file form stdin - list sections\n\n");
352bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg  fprintf(stderr, "  * --object-list-symbols\n");
362bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg  fprintf(stderr,
372bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg          "    Read object file form stdin - list symbols (like nm)\n\n");
382bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg  fprintf(stderr, "  * --disassemble\n");
392bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg  fprintf(stderr, "    Read lines of triple, hex ascii machine code from stdin "
402bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg                  "- print disassembly\n\n");
412bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg  fprintf(stderr, "  * --calc\n");
422bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg  fprintf(
432bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg      stderr,
442bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg      "    Read lines of name, rpn from stdin - print generated module\n\n");
452bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg}
462bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg
472bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborgint main(int argc, char **argv) {
482bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg  LLVMPassRegistryRef pr = LLVMGetGlobalPassRegistry();
492bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg
502bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg  LLVMInitializeCore(pr);
512bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg
522bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg  if (argc == 2 && !strcmp(argv[1], "--module-dump")) {
532bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg    return module_dump();
542bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg  } else if (argc == 2 && !strcmp(argv[1], "--module-list-functions")) {
552bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg    return module_list_functions();
562bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg  } else if (argc == 2 && !strcmp(argv[1], "--module-list-globals")) {
572bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg    return module_list_globals();
582bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg  } else if (argc == 2 && !strcmp(argv[1], "--targets-list")) {
592bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg    return targets_list();
602bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg  } else if (argc == 2 && !strcmp(argv[1], "--object-list-sections")) {
612bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg    return object_list_sections();
622bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg  } else if (argc == 2 && !strcmp(argv[1], "--object-list-symbols")) {
632bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg    return object_list_symbols();
642bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg  } else if (argc == 2 && !strcmp(argv[1], "--disassemble")) {
652bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg    return disassemble();
662bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg  } else if (argc == 2 && !strcmp(argv[1], "--calc")) {
672bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg    return calc();
682bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg  } else {
692bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg    print_usage();
702bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg  }
712bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg
722bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg  return 1;
732bef1a6b25d938210547cd0f5ba4a08abdad2583Anders Waldenborg}
74