Tweak command line args to support -q and update docs

This commit is contained in:
Bruce Hill 2024-12-19 15:02:39 -05:00
parent b0faa5adc2
commit ef546696e8
3 changed files with 66 additions and 39 deletions

61
tomo.1
View File

@ -1,69 +1,78 @@
.\" Automatically generated by Pandoc 3.1.8
.\" Automatically generated by Pandoc 3.1.11.1
.\"
.TH "TOMO" "1" "June 11, 2024" "" ""
.SH NAME
tomo - The programming language of tomorrow.
tomo \- The programming language of tomorrow.
.SH SYNOPSIS
.TP
Run the REPL:
\f[B]tomo\f[R]
.TP
Run a program:
\f[B]tomo\f[R] \f[I]program.tm\f[R] [[\f[B]--\f[R]] \f[I]args\&...\f[R]]
\f[B]tomo\f[R] \f[I]program.tm\f[R] [[\f[B]\-\-\f[R]]
\f[I]args\&...\f[R]]
.TP
Transpile tomo files to C files:
\f[B]tomo\f[R] \f[B]-t\f[R] \f[I]file1.tm\f[R] \f[I]file2.tm\f[R]\&...
\f[B]tomo\f[R] \f[B]\-t\f[R] \f[I]file1.tm\f[R] \f[I]file2.tm\f[R]\&...
.TP
Compile files to static object files:
\f[B]tomo\f[R] \f[B]-c\f[R] \f[I]file1.tm\f[R] \f[I]file2.tm\f[R]\&...
\f[B]tomo\f[R] \f[B]\-c\f[R] \f[I]file1.tm\f[R] \f[I]file2.tm\f[R]\&...
.TP
Compile file to an executable:
\f[B]tomo\f[R] \f[B]-e\f[R] \f[I]file1.tm\f[R]
\f[B]tomo\f[R] \f[B]\-e\f[R] \f[I]file1.tm\f[R]
.TP
Build a shared library:
\f[B]tomo\f[R] \f[B]-s=\f[R]\f[I]mylib.1.2.3\f[R] \f[I]file1.tm\f[R]
\f[B]tomo\f[R] \f[B]\-s=\f[R]\f[I]mylib.1.2.3\f[R] \f[I]file1.tm\f[R]
\f[I]file2.tm\f[R]\&...
.SH DESCRIPTION
Tomo is a programming language that is statically typed, compiled,
small, and garbage-collected, with concise syntax and built-in support
for high-performance, low-overhead datastructures.
small, and garbage\-collected, with concise syntax and built\-in support
for high\-performance, low\-overhead datastructures.
It compiles by first outputting C code, which is then compiled using a C
compiler of your choice.
.SH OPTIONS
.TP
\f[B]-h\f[R], \f[B]--help\f[R]
\f[B]\-h\f[R], \f[B]\-\-help\f[R]
Print the usage and exit.
.TP
\f[B]-t\f[R]
\f[B]\-t\f[R]
Transpile the input files to C code without compiling them.
.TP
\f[B]-c\f[R]
\f[B]\-c\f[R]
Compile the input files to static objects, rather than running them.
.TP
\f[B]-e\f[R]
\f[B]\-e\f[R]
Compile the input file to an executable.
.TP
\f[B]-L\f[R]
\f[B]\-L\f[R]
Compile the input files to a library \f[B].so\f[R] file and header.
.TP
\f[B]-I\f[R]
\f[B]\-I\f[R]
Install the compiled executable or library.
.TP
\f[B]\-C\f[R]
Print transpiled C code to the console.
.TP
\f[B]\-\-c\-compiler\f[R]
Set which C compiler is used.
.TP
\f[B]\-f\f[R], \f[B]\-\-autoformat\f[R]
Set which autoformat program is used.
.TP
\f[B]\-v\f[R], \f[B]\-\-verbose\f[R]
Print extra verbose output.
.TP
\f[B]\-q\f[R], \f[B]\-\-quiet\f[R]
Be extra quiet and do not print what the compiler is doing, only program
output.
.SS ENVIRONMENT VARIABLES
Some options can be configured by setting environment variables.
.TP
\f[B]VERBOSE=0|1|2\f[R]
Set the verbosity level.
.TP
\f[B]CC=\f[R]\f[I]c-compiler\f[R]
\f[B]CC=\f[R]\f[I]c\-compiler\f[R]
Set which C compiler is used.
.TP
\f[B]O=\f[R]\f[I]optimization-level\f[R]
Set which optimization level is passed to the C compiler.
Valid values are those accepted by your compiler\[cq]s \f[B]-O\f[R]
flag.
.TP
\f[B]AUTOFMT=\f[R]\f[I]autoformatter\f[R]
The program used to autoformat generated C code.
Default: \f[B]indent -kr -l100 -nbbo -nut -sob\f[R]
Default: \f[B]indent \-kr \-l100 \-nbbo \-nut \-sob\f[R]
.SH AUTHORS
Bruce Hill (\f[I]bruce\[at]bruce-hill.com\f[R]).
Bruce Hill (\f[I]bruce\[at]bruce\-hill.com\f[R]).

View File

@ -53,19 +53,27 @@ C code, which is then compiled using a C compiler of your choice.
`-I`
: Install the compiled executable or library.
`-C`
: Print transpiled C code to the console.
`--c-compiler`
: Set which C compiler is used.
`-f`, `--autoformat`
: Set which autoformat program is used.
`-v`, `--verbose`
: Print extra verbose output.
`-q`, `--quiet`
: Be extra quiet and do not print what the compiler is doing, only program output.
## ENVIRONMENT VARIABLES
Some options can be configured by setting environment variables.
`VERBOSE=0|1|2`
: Set the verbosity level.
`CC=`*c-compiler*
: Set which C compiler is used.
`O=`*optimization-level*
: Set which optimization level is passed to the C compiler. Valid values are
those accepted by your compiler's `-O` flag.
`AUTOFMT=`*autoformatter*
: The program used to autoformat generated C code. Default: `indent -kr -l100 -nbbo -nut -sob`

22
tomo.c
View File

@ -33,6 +33,7 @@
static OptionalArray_t files = NONE_ARRAY,
args = NONE_ARRAY;
static OptionalBool_t verbose = false,
quiet = false,
show_codegen = false,
stop_at_transpile = false,
stop_at_obj_compilation = false,
@ -83,7 +84,9 @@ int main(int argc, char *argv[])
" --verbose|-v: verbose output\n"
" --install|-I: install the executable or library\n"
" --c-compiler <compiler>: the C compiler to use (default: cc)\n"
" --optimization|-O <level>: set optimization level");
" --optimization|-O <level>: set optimization level\n"
" --quiet|-q: quiet output\n"
);
Text_t help = Texts(Text("\x1b[1mtomo\x1b[m: a compiler for the Tomo programming language"), Text("\n\n"), usage);
tomo_parse_args(
argc, argv, usage, help,
@ -110,6 +113,8 @@ int main(int argc, char *argv[])
{"c-compiler", false, &Text$info, &cc},
{"optimization", false, &Text$info, &optimization},
{"O", false, &Text$info, &optimization},
{"quiet", false, &Bool$info, &quiet},
{"q", false, &Bool$info, &quiet},
);
if (uninstall) {
@ -306,7 +311,8 @@ void build_library(Text_t lib_dir_name)
if (!WIFEXITED(status) || WEXITSTATUS(status) != 0)
exit(EXIT_FAILURE);
printf("\x1b[2mCompiled to lib%k.so\x1b[m\n", &lib_dir_name);
if (!quiet || verbose)
printf("\x1b[2mCompiled to lib%k.so\x1b[m\n", &lib_dir_name);
prog = run_cmd("objcopy --redefine-syms=symbol_renames.txt 'lib%k.so'", &lib_dir_name);
status = pclose(prog);
@ -491,7 +497,8 @@ void transpile_header(env_t *base_env, Text_t filename, bool force_retranspile)
if (pclose(prog) == -1)
errx(1, "Failed to run autoformat program on header file: %k", &autofmt);
printf("\x1b[2mTranspiled to %k\x1b[m\n", &h_filename);
if (!quiet || verbose)
printf("\x1b[2mTranspiled to %k\x1b[m\n", &h_filename);
if (show_codegen)
system(heap_strf("bat -P %k", &h_filename));
@ -532,7 +539,8 @@ void transpile_code(env_t *base_env, Text_t filename, bool force_retranspile)
if (pclose(out) == -1)
errx(1, "Failed to output autoformatted C code to %k: %k", &c_filename, &autofmt);
printf("\x1b[2mTranspiled to %k\x1b[m\n", &c_filename);
if (!quiet || verbose)
printf("\x1b[2mTranspiled to %k\x1b[m\n", &c_filename);
if (show_codegen)
system(heap_strf("bat -P %k", &c_filename));
@ -557,7 +565,8 @@ void compile_object_file(Text_t filename, bool force_recompile)
if (!WIFEXITED(status) || WEXITSTATUS(status) != 0)
exit(EXIT_FAILURE);
printf("\x1b[2mCompiled to %k\x1b[m\n", &obj_file);
if (!quiet || verbose)
printf("\x1b[2mCompiled to %k\x1b[m\n", &obj_file);
}
Text_t compile_executable(env_t *base_env, Text_t filename, Array_t object_files, Array_t extra_ldlibs)
@ -592,7 +601,8 @@ Text_t compile_executable(env_t *base_env, Text_t filename, Array_t object_files
if (!WIFEXITED(status) || WEXITSTATUS(status) != 0)
exit(EXIT_FAILURE);
printf("\x1b[2mCompiled executable: %k\x1b[m\n", &bin_name);
if (!quiet || verbose)
printf("\x1b[2mCompiled executable: %k\x1b[m\n", &bin_name);
return bin_name;
}