llcppg Design ===== ## Usage ```sh llcppg [config-file] ``` If `config-file` is not specified, a `llcppg.cfg` file is used in current directory. The configuration file format is as follows: ```json { "name": "inih", "cflags": "$(pkg-config --cflags inireader)", "include": [ "INIReader.h", "AnotherHeaderFile.h" ], "libs": "$(pkg-config --libs inireader)", "trimPrefixes": ["Ini", "INI"], "cplusplus":true } ``` ## Steps 1. llcppsymg: Generate symbol table for a C/C++ library 2. Manually modify the desired Go symbols in symbol table 3. llcppsigfetch: Fetch information of C/C++ symbols 4. gogensig: Generate a go package by information of symbols ### llcppsymg ```sh llcppsymg config-file llcppsymg - # read config from stdin ``` It generates a symbol table file named `llcppg.symb.json`. Its file format is as follows: ```json [ { "mangle": "_ZN9INIReaderC1EPKcm", "c++": "INIReader::INIReader(char const*, unsigned long)", "go": "(*Reader).Init__0" } ] ``` ### llcppsigfetch ```sh llcppsigfetch config-file llcppsigfetch - # read config from stdin ``` It fetches information of C/C++ symbols and print to stdout. Its format is as follows: ```json [ { "path": "/path/to/file.h", "doc": { "decls": [], "macros": [], "includes": [ { "path": "incfile.h" } ] } } ] ``` ### gogensig ```sh gogensig ast-file gogensig - # read AST from stdin ```