The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

#!perl
use strict;
use SPVM();
SPVM::Builder::Util::getopt
'h|help' => \my $help,
'v|version' => \my $show_version,
'o|output=s' => \my $output_file,
'B|build-dir=s' => \my $build_dir,
'I|include-dir=s' => \my @include_dirs,
'q|quiet' => \my $quiet,
'f|force' => \my $force,
'c|config=s' => \my $config_file,
'r|required-resources' => \my $print_required_resources,
;
if ($help) {
print SPVM::Builder::Util::extract_usage;
}
elsif ($show_version) {
my $version_string = "spvmcc v$SPVM::VERSION";
print "$version_string\n";
}
else {
my $module_name = shift;
unless (defined $module_name) {
die SPVM::Builder::Util::extract_usage;
}
my @original_include_dirs = @include_dirs;
push @include_dirs, map { "$_/SPVM" } @INC;
unshift @INC, map { $_ =~ s/[\\\/]SPVM$//; $_; } @original_include_dirs;
my $build_exe = SPVM::Builder::Exe->new(
module_name => $module_name,
build_dir => $build_dir,
include_dirs => \@include_dirs,
output_file => $output_file,
quiet => $quiet,
force => $force,
config_file => $config_file,
);
if ($print_required_resources) {
my $lines = $build_exe->get_required_resource_json_lines;
print "$_\n" for @$lines;
}
else {
$build_exe->build_exe_file;
}
}
=encoding utf8
=head1 Name
spvmcc - Generating Excutable File
=head1 Description
The spvmcc command is a SPVM compiler and linker to generate an executable file.
=head1 Usage
usage: spvmcc [<options>] <module name>
spvmcc -I lib/SPVM -o myapp Myapp
options:
-h, --help Shows this message
-v, --version Shows the version
-o, --output The output file name
-I, --include-dir <directory> Adds a include directory
-B, --build-dir <directory> Building diretory
-q, --quiet Stops the output of messages
-f, --force Forces the compile and link
-c, --config The config file
-r, --required-resources Prints required resources in JSON lines
=head1 Copyright & License
Copyright 2023 Yuki Kimoto. All Rights Reserved.
MIT License.