use strict;
use warnings;
use FFI::TinyCC;
use FFI::Platypus;

my $tcc = FFI::TinyCC->new;

$tcc->compile_string(q{
  int
  calculate_square(int value)
  {
    return value*value;
  }
});

my $value = shift @ARGV;
$value = 4 unless defined $value;

my $address = $tcc->get_symbol('calculate_square');

my $ffi = FFI::Platypus->new;
$ffi->attach([$address => 'square'] => ['int'] => 'int');

print square($value), "\n";