diff --git a/CMakeLists.txt b/CMakeLists.txt index 24fae45c6..cd1854304 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,26 +27,6 @@ if (MSVC AND SLIC3R_MSVC_COMPILE_PARALLEL) add_compile_options(/MP) endif () -# Find the Perl interpreter, add local-lib to PATH and PERL5LIB environment variables, -# so the locally installed modules (mainly the Alien::wxPerl) will be reached. -if (WIN32) - set(ENV_PATH_SEPARATOR ";") -else() - set(ENV_PATH_SEPARATOR ":") -endif() -set(ENV{PATH} "${PROJECT_SOURCE_DIR}/local-lib/bin${ENV_PATH_SEPARATOR}$ENV{PATH}") -set(PERL_INCLUDE "${PROJECT_SOURCE_DIR}/local-lib/lib/perl5${ENV_PATH_SEPARATOR}$ENV{PERL5LIB}") -message("PATH: $ENV{PATH}") -message("PERL_INCLUDE: ${PERL_INCLUDE}") -find_package(Perl REQUIRED) -if (WIN32) - # On Windows passing the PERL5LIB variable causes various problems (such as with MAX_PATH and others), - # basically I've found no good way to do it on Windows. - set(PERL5LIB_ENV_CMD "") -else() - set(PERL5LIB_ENV_CMD ${CMAKE_COMMAND} -E env PERL5LIB=${PERL_INCLUDE}) -endif() - # CMAKE_PREFIX_PATH is used to point CMake to the remaining dependencies (Boost, TBB, ...) # We pick it from environment if it is not defined in another way if(NOT DEFINED CMAKE_PREFIX_PATH) @@ -110,7 +90,7 @@ include_directories(${LIBDIR}/libslic3r ${LIBDIR}/clipper ${LIBDIR}/polypartitio if(WIN32) # BOOST_ALL_NO_LIB: Avoid the automatic linking of Boost libraries on Windows. Rather rely on explicit linking. - add_definitions(-D_USE_MATH_DEFINES -D_WIN32 -DBOOST_ALL_NO_LIB -DBOOST_USE_WINAPI_VERSION=0x601) + add_definitions(-D_USE_MATH_DEFINES -D_WIN32 -DBOOST_ALL_NO_LIB -DBOOST_USE_WINAPI_VERSION=0x601 -D_CRT_SECURE_NO_WARNINGS) endif() add_definitions(-DwxUSE_UNICODE -D_UNICODE -DUNICODE -DWXINTL_NO_GETTEXT_MACRO) @@ -120,12 +100,9 @@ if (SLIC3R_PROFILE) add_definitions(-DSLIC3R_PROFILE) endif () -# Perl specific stuff -find_package(PerlLibs REQUIRED) -set(PerlEmbed_DEBUG 1) -find_package(PerlEmbed REQUIRED) # If the Perl is compiled with optimization off, disable optimization over the whole project. -if (WIN32 AND ";${PerlEmbed_CCFLAGS};" MATCHES ";[-/]Od;") +if (0) +#if (WIN32 AND ";${PerlEmbed_CCFLAGS};" MATCHES ";[-/]Od;") message(STATUS "Perl compiled without optimization. Disabling optimization for the Slic3r build.") message("Old CMAKE_CXX_FLAGS_RELEASE: ${CMAKE_CXX_FLAGS_RELEASE}") message("Old CMAKE_CXX_FLAGS_RELWITHDEBINFO: ${CMAKE_CXX_FLAGS_RELEASE}") @@ -138,7 +115,7 @@ if (WIN32 AND ";${PerlEmbed_CCFLAGS};" MATCHES ";[-/]Od;") set(CMAKE_C_FLAGS "/MD /Od /Zi /DNDEBUG /DWIN32 /DTBB_USE_ASSERT") endif() # The following line will add -fPIC on Linux to make the XS.so rellocable. -add_definitions(${PerlEmbed_CCCDLFLAGS}) +#add_definitions(${PerlEmbed_CCCDLFLAGS}) # Find and configure boost if(SLIC3R_STATIC) diff --git a/src/slic3r.cpp b/src/slic3r.cpp index 95ba4dfb6..35ec62316 100644 --- a/src/slic3r.cpp +++ b/src/slic3r.cpp @@ -1,3 +1,17 @@ +#ifdef WIN32 + // Why? + #define _WIN32_WINNT 0x0502 + // The standard Windows includes. + #define WIN32_LEAN_AND_MEAN + #define NOMINMAX + #include + #include + // Let the NVIDIA and AMD know we want to use their graphics card + // on a dual graphics card system. + __declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001; + __declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1; +#endif /* WIN32 */ + #include "Config.hpp" #include "Geometry.hpp" #include "Model.hpp" diff --git a/src/slic3r.manifest b/src/slic3r.manifest new file mode 100644 index 000000000..c480ca337 --- /dev/null +++ b/src/slic3r.manifest @@ -0,0 +1,37 @@ + + + + Perl + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/slic3r.rc b/src/slic3r.rc new file mode 100644 index 000000000..7ae8653dd --- /dev/null +++ b/src/slic3r.rc @@ -0,0 +1,25 @@ +1 VERSIONINFO +FILEVERSION SLIC3R_RC_VERSION +PRODUCTVERSION SLIC3R_RC_VERSION +{ + BLOCK "StringFileInfo" + { + BLOCK "040904E4" + { + VALUE "CompanyName", "Prusa Research" + VALUE "FileDescription", "Slic3r Prusa Edition" + VALUE "FileVersion", "SLIC3R_BUILD_ID" + VALUE "ProductName", "Slic3r Prusa Edition" + VALUE "ProductVersion", "SLIC3R_BUILD_ID" + VALUE "InternalName", "Slic3r Prusa Edition" + VALUE "LegalCopyright", "Copyright \251 2011-2017 Alessandro Ranelucci, \251 2016 Prusa Research" + VALUE "OriginalFilename", "slic3r.exe" + } + } + BLOCK "VarFileInfo" + { + VALUE "Translation", 0x409, 1252 + } +} +2 ICON "../resources/icons/Slic3r.ico" +1 24 "slic3r.manifest" diff --git a/xs/CMakeLists.txt b/xs/CMakeLists.txt index f3afca619..4ea8bb4d2 100644 --- a/xs/CMakeLists.txt +++ b/xs/CMakeLists.txt @@ -1,5 +1,30 @@ project(XS) +# Find the Perl interpreter, add local-lib to PATH and PERL5LIB environment variables, +# so the locally installed modules (mainly the Alien::wxPerl) will be reached. +if (WIN32) + set(ENV_PATH_SEPARATOR ";") +else() + set(ENV_PATH_SEPARATOR ":") +endif() +set(ENV{PATH} "${PROJECT_SOURCE_DIR}/local-lib/bin${ENV_PATH_SEPARATOR}$ENV{PATH}") +set(PERL_INCLUDE "${PROJECT_SOURCE_DIR}/local-lib/lib/perl5${ENV_PATH_SEPARATOR}$ENV{PERL5LIB}") +message("PATH: $ENV{PATH}") +message("PERL_INCLUDE: ${PERL_INCLUDE}") +find_package(Perl REQUIRED) +if (WIN32) + # On Windows passing the PERL5LIB variable causes various problems (such as with MAX_PATH and others), + # basically I've found no good way to do it on Windows. + set(PERL5LIB_ENV_CMD "") +else() + set(PERL5LIB_ENV_CMD ${CMAKE_COMMAND} -E env PERL5LIB=${PERL_INCLUDE}) +endif() + +# Perl specific stuff +find_package(PerlLibs REQUIRED) +set(PerlEmbed_DEBUG 1) +find_package(PerlEmbed REQUIRED) + # Generate the Slic3r Perl module (XS) typemap file. set(MyTypemap ${CMAKE_CURRENT_BINARY_DIR}/typemap) add_custom_command(