Slic3r/xs/Build.PL

60 lines
2.1 KiB
Perl

#!/usr/bin/perl -w
use strict;
use warnings;
use ExtUtils::CppGuess;
use Module::Build::WithXSpp;
# _GLIBCXX_USE_C99 : to get the long long type for g++
# HAS_BOOL : stops Perl/lib/CORE/handy.h from doing "# define bool char" for MSVC
# NOGDI : prevents inclusion of wingdi.h which defines functions Polygon() and Polyline() in global namespace
my @cflags = qw(-D_GLIBCXX_USE_C99 -DHAS_BOOL -DNOGDI -DSLIC3RXS);
if ($ENV{SLIC3R_DEBUG}) {
# only on newer GCCs: -ftemplate-backtrace-limit=0
push @cflags, qw(-DSLIC3R_DEBUG -g);
}
if (ExtUtils::CppGuess->new->is_gcc) {
# check whether we're dealing with a buggy GCC version
# see https://github.com/alexrj/Slic3r/issues/1965
if (`cc --version` =~ / 4\.7\.[012]/) {
push @cflags, qw(-O1 -fcaller-saves -fcrossjumping -fcse-follow-jumps -fdevirtualize -fexpensive-optimizations -fgcse -findirect-inlining -finline-small-functions -fipa-cp -fipa-sra -foptimize-register-move -foptimize-sibling-calls -foptimize-strlen -fpartial-inlining -fpeephole2 -free -fregmove -freorder-blocks -freorder-functions -frerun-cse-after-loop -fschedule-insns2 -fstrict-aliasing -fstrict-overflow -fthread-jumps -ftree-builtin-call-dce -ftree-pre -ftree-switch-conversion -ftree-tail-merge -ftree-vrp);
}
}
my $build = Module::Build::WithXSpp->new(
module_name => 'Slic3r::XS',
dist_abstract => 'XS code for Slic3r',
build_requires => {qw(
ExtUtils::ParseXS 3.18
ExtUtils::Typemap 1.00
ExtUtils::Typemaps::Default 1.03
ExtUtils::XSpp 0.17
Module::Build 0.3601
Test::More 0
)},
configure_requires => {qw(
ExtUtils::CppGuess 0.07
Module::Build 0.38
Module::Build::WithXSpp 0.13
)},
extra_compiler_flags => \@cflags,
# Provides extra C typemaps that are auto-merged
extra_typemap_modules => {
'ExtUtils::Typemaps::Default' => '1.03',
},
# for MSVC builds
early_includes => [qw(
cstring
cstdlib
ostream
sstream
)]
);
$build->create_build_script;
__END__