First attempt to enable MemorySanitizer builds on Linux with clang.

This commit is contained in:
Lukáš Hejl 2022-01-19 15:38:18 +01:00
parent ea61190c1c
commit 5b13b6f754
33 changed files with 539 additions and 25 deletions

View File

@ -33,6 +33,9 @@ option(SLIC3R_MSVC_COMPILE_PARALLEL "Compile on Visual Studio in parallel" 1)
option(SLIC3R_MSVC_PDB "Generate PDB files on MSVC in Release mode" 1)
option(SLIC3R_PERL_XS "Compile XS Perl module and enable Perl unit and integration tests" 0)
option(SLIC3R_ASAN "Enable ASan on Clang and GCC" 0)
option(SLIC3R_MSAN "Enable MemorySanitizer on Clang for Linux" 0)
option(SLIC3R_MSAN_RECOVERY "Enable recovery from an error after an initialized value is found" 1) # It is enabled by default until all reports are investigated.
option(SLIC3R_MSAN_ORIGIN_TRACKING "Enable tracking origins of uninitialized values" 0) # It causes another slows down of program execution by a factor of 1.5x-2x.
# If SLIC3R_FHS is 1 -> SLIC3R_DESKTOP_INTEGRATION is always 0, othrewise variable.
CMAKE_DEPENDENT_OPTION(SLIC3R_DESKTOP_INTEGRATION "Allow perfoming desktop integration during runtime" 1 "NOT SLIC3R_FHS" 0)
@ -249,6 +252,44 @@ if (NOT MSVC AND ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMP
endif()
if (SLIC3R_MSAN)
if (NOT CMAKE_CXX_COMPILER_ID STREQUAL Clang)
message(FATAL_ERROR "MemorySanitizer is available only in Clang.")
endif ()
if (SLIC3R_ASAN)
message(FATAL_ERROR "MemorySanitizer cannot be used at the same time as AddressSanitizer.")
endif ()
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 12)
message(WARNING "MemorySanitizer builds are tested only with CLANG 12, other versions are untested but could be working.")
endif()
add_compile_options(-nostdinc++)
add_compile_options(-stdlib=libc++)
add_compile_options(-fsanitize=memory)
add_compile_options(-fno-omit-frame-pointer)
include_directories(${CMAKE_PREFIX_PATH}/include)
include_directories(${CMAKE_PREFIX_PATH}/include/c++/v1)
link_directories(${CMAKE_PREFIX_PATH}/lib)
# Some libraries aren't correctly found without -Wl,--disable-new-dtags. https://stackoverflow.com/a/47243544
set(_msan_linker_flags "-fsanitize=memory -stdlib=libc++ -L${CMAKE_PREFIX_PATH}/lib -Wl,--disable-new-dtags -Wl,--rpath='$ORIGIN/../lib'")
if (SLIC3R_MSAN_RECOVERY)
add_compile_options(-fsanitize-recover=memory)
set(_msan_linker_flags "${_msan_linker_flags} -fsanitize-recover=memory")
endif ()
if (SLIC3R_MSAN_ORIGIN_TRACKING)
add_compile_options(-fsanitize-memory-track-origins=2)
set(_msan_linker_flags "${_msan_linker_flags} -fsanitize-memory-track-origins=2")
endif ()
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${_msan_linker_flags}")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${_msan_linker_flags}")
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${_msan_linker_flags}")
endif ()
if (SLIC3R_ASAN)
# ASAN should be available on MSVC starting with Visual Studio 2019 16.9
# https://devblogs.microsoft.com/cppblog/address-sanitizer-for-msvc-now-generally-available/
@ -634,6 +675,14 @@ else ()
install(FILES src/platform/unix/PrusaSlicer.desktop DESTINATION ${CMAKE_INSTALL_PREFIX}/resources/applications)
install(FILES src/platform/unix/PrusaGcodeviewer.desktop DESTINATION ${CMAKE_INSTALL_PREFIX}/resources/applications)
install(DIRECTORY "${SLIC3R_RESOURCES_DIR}/" DESTINATION "${CMAKE_INSTALL_PREFIX}/resources")
if (SLIC3R_MSAN)
install(CODE "set(_MSAN_COPY_FROM \"${CMAKE_PREFIX_PATH}/../lib\")")
install(CODE "set(_MSAN_COPY_TO \"${CMAKE_INSTALL_PREFIX}/lib\")")
install(SCRIPT deps/MSan_Deps/Chromium_prebuilt_libraries/copy_chromium_prebuilt_libraries.cmake)
install(CODE "set(_MSAN_COPY_FROM \"${CMAKE_PREFIX_PATH}/lib\")")
install(SCRIPT deps/MSan_Deps/install_msan_shared_libraries.cmake)
endif ()
endif ()
configure_file(${LIBDIR}/platform/unix/fhs.hpp.in ${LIBDIR_BIN}/platform/unix/fhs.hpp)

View File

@ -11,7 +11,7 @@ prusaslicer_add_cmake_project(Blosc
#URL_HASH SHA256=7463a1df566704f212263312717ab2c36b45d45cba6cd0dccebf91b2cc4b4da9
URL https://github.com/tamasmeszaros/c-blosc/archive/refs/heads/v1.17.0_tm.zip
URL_HASH SHA256=dcb48bf43a672fa3de6a4b1de2c4c238709dad5893d1e097b8374ad84b1fc3b3
DEPENDS ${ZLIB_PKG}
DEPENDS ${LIBCXX_PKG} ${ZLIB_PKG}
# Patching upstream does not work this way with git version 2.28 installed on mac worker
# PATCH_COMMAND ${GIT_EXECUTABLE} apply --ignore-space-change --whitespace=fix ${CMAKE_CURRENT_LIST_DIR}/blosc-mods.patch
CMAKE_ARGS
@ -21,6 +21,7 @@ prusaslicer_add_cmake_project(Blosc
-DBUILD_TESTS=OFF
-DBUILD_BENCHMARKS=OFF
-DPREFER_EXTERNAL_ZLIB=ON
${MSAN_CMAKE_ARGS}
)
if (MSVC)

View File

@ -35,7 +35,13 @@ elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
if (WIN32)
set(_boost_toolset "clang-win")
else()
set(_boost_toolset "clang")
if (DEP_MSAN)
configure_file(${CMAKE_CURRENT_LIST_DIR}/msan-user-config.jam boost-user-config.jam)
set(_boost_toolset clang)
set(_patch_command ${_patch_command} && ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/boost-user-config.jam ./tools/build/src/tools/user-config.jam)
else ()
set(_boost_toolset "clang")
endif()
endif()
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
set(_boost_toolset "intel")
@ -68,8 +74,15 @@ ProcessorCount(NPROC)
file(TO_NATIVE_PATH ${DESTDIR}/usr/local/ _prefix)
set(_boost_flags "")
if (UNIX)
set(_boost_flags "cflags=-fPIC;cxxflags=-fPIC")
if (UNIX)
if (DEP_MSAN)
set(_boost_flags
"cflags=-fPIC ${MSAN_CMAKE_C_FLAGS};"
"cxxflags=-fPIC ${MSAN_CMAKE_CXX_FLAGS};"
"linkflags=-fPIC ${MSAN_CMAKE_LD_FLAGS}")
else()
set(_boost_flags "cflags=-fPIC;cxxflags=-fPIC")
endif()
elseif(APPLE)
set(_boost_flags
"cflags=-fPIC -mmacosx-version-min=${DEP_OSX_TARGET};"
@ -121,6 +134,7 @@ ExternalProject_Add(
dep_Boost
URL "https://boostorg.jfrog.io/artifactory/main/release/1.75.0/source/boost_1_75_0.tar.gz"
URL_HASH SHA256=aeb26f80e80945e82ee93e5939baebdca47b9dee80a07d3144be1e1a6a66dd6a
DEPENDS ${LIBCXX_PKG}
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/Boost
CONFIGURE_COMMAND "${_bootstrap_cmd}"
PATCH_COMMAND ${_patch_command}

1
deps/Boost/msan-user-config.jam vendored Normal file
View File

@ -0,0 +1 @@
using clang : : @CMAKE_CXX_COMPILER@ ;

View File

@ -5,7 +5,9 @@ prusaslicer_add_cmake_project(
# For whatever reason, this keeps downloading forever (repeats downloads if finished)
URL https://github.com/CGAL/cgal/archive/releases/CGAL-5.0.zip
URL_HASH SHA256=c2b035bd078687b6d8c0fb6371a7443adcdb647856af9969532c4050cd5f48e5
DEPENDS dep_Boost dep_GMP dep_MPFR
DEPENDS ${LIBCXX_PKG} dep_Boost dep_GMP dep_MPFR
CMAKE_ARGS
${MSAN_CMAKE_ARGS}
)
include(GNUInstallDirs)

62
deps/CMakeLists.txt vendored
View File

@ -40,6 +40,12 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
option(DEP_WX_GTK3 "Build wxWidgets against GTK3" OFF)
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
option(DEP_MSAN "Enable MemorySanitizer on Clang for Linux" OFF)
option(DEP_MSAN_RECOVERY "Enable recovery from an error after an initialized value is found" ON) # It is enabled by default until all reports are investigated.
option(DEP_MSAN_ORIGIN_TRACKING "Enable tracking origins of uninitialized values" OFF) # It causes another slows down of program execution by a factor of 1.5x-2x.
endif()
# On developer machines, it can be enabled to speed up compilation and suppress warnings coming from IGL.
# FIXME:
# Enabling this option is not safe. IGL will compile itself with its own version of Eigen while
@ -141,18 +147,64 @@ else()
include("deps-linux.cmake")
endif()
if (DEP_MSAN)
if (NOT CMAKE_CXX_COMPILER_ID STREQUAL Clang)
message(FATAL_ERROR "MemorySanitizer is available only in Clang.")
endif ()
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 12)
message(WARNING "MemorySanitizer builds are tested only with CLANG 12, other versions are untested but could be working.")
endif()
file(MAKE_DIRECTORY ${DESTDIR}/usr/lib)
include(MSan_Deps/Libcxx/Libcxx.cmake)
include(MSan_Deps/Chromium_prebuilt_libraries/Chromium.cmake)
include(MSan_Deps/LLVM/LLVM.cmake)
include(MSan_Deps/Mesa3D/Mesa3D.cmake)
include(MSan_Deps/fontconfig/fontconfig.cmake)
set(_msan_linker_flags "-fsanitize=memory")
if (DEP_MSAN_RECOVERY)
set(_msan_linker_flags "${_msan_linker_flags} -fsanitize-recover=memory")
endif ()
if (DEP_MSAN_ORIGIN_TRACKING)
set(_msan_linker_flags "${_msan_linker_flags} -fsanitize-memory-track-origins=2")
endif ()
set(_msan_common_flags "${_msan_linker_flags} -fno-omit-frame-pointer")
set(_msan_only_cxx_flags "-nostdinc++ -stdlib=libc++ -isystem ${DESTDIR}/usr/local/include -isystem ${DESTDIR}/usr/local/include/c++/v1")
set(_msan_only_ld_flags "-nostdinc++ -stdlib=libc++ -L${DESTDIR}/usr/local/lib -Wl,--rpath=${DESTDIR}/usr/local/lib")
# For dependencies that are configure using CFLAGS, CXXFLAGS and LDFLAGS instead of CMAKE_*_FLAGS.
set(MSAN_CMAKE_C_FLAGS "${_msan_common_flags}")
set(MSAN_CMAKE_CXX_FLAGS "${_msan_common_flags} ${_msan_only_cxx_flags}")
set(MSAN_CMAKE_LD_FLAGS "${_msan_common_flags} ${_msan_only_ld_flags}")
set(_msan_all_flags "${_msan_common_flags} ${_msan_only_cxx_flags} ${_msan_only_ld_flags}")
set(MSAN_CMAKE_ARGS ${_MSAN_CMAKE_ARGS}
-DCMAKE_C_FLAGS:STRING=${MSAN_CMAKE_C_FLAGS}
-DCMAKE_CXX_FLAGS:STRING=${_msan_all_flags})
set(LIBCXX_PKG dep_Libcxx)
set(FONTCONFIG_PKG dep_fontconfig)
else ()
set(MSAN_CMAKE_ARGS "")
set(LIBCXX_PKG "")
set(FONTCONFIG_PKG "")
endif ()
set(ZLIB_PKG "")
if (NOT ZLIB_FOUND)
if (NOT ZLIB_FOUND OR DEP_MSAN)
include(ZLIB/ZLIB.cmake)
set(ZLIB_PKG dep_ZLIB)
endif ()
set(PNG_PKG "")
if (NOT PNG_FOUND)
if (NOT PNG_FOUND OR DEP_MSAN)
include(PNG/PNG.cmake)
set(PNG_PKG dep_PNG)
endif ()
set(EXPAT_PKG "")
if (NOT EXPAT_FOUND)
if (NOT EXPAT_FOUND OR DEP_MSAN)
include(EXPAT/EXPAT.cmake)
set(EXPAT_PKG dep_EXPAT)
endif ()
@ -209,6 +261,10 @@ else()
#list(APPEND _dep_list "dep_libigl")
endif()
if (DEP_MSAN)
list(APPEND _dep_list "dep_LLVM;dep_Mesa3D;dep_fontconfig;dep_Chromium_Libs")
endif ()
add_custom_target(deps ALL DEPENDS ${_dep_list})
# Note: I'm not using any of the LOG_xxx options in ExternalProject_Add() commands

View File

@ -59,7 +59,7 @@ prusaslicer_add_cmake_project(CURL
# GIT_TAG curl-7_75_0
URL https://github.com/curl/curl/archive/refs/tags/curl-7_75_0.zip
URL_HASH SHA256=a63ae025bb0a14f119e73250f2c923f4bf89aa93b8d4fafa4a9f5353a96a765a
DEPENDS ${ZLIB_PKG}
DEPENDS ${LIBCXX_PKG} ${ZLIB_PKG}
# PATCH_COMMAND ${GIT_EXECUTABLE} checkout -f -- . && git clean -df &&
# ${GIT_EXECUTABLE} apply --whitespace=fix ${CMAKE_CURRENT_LIST_DIR}/curl-mods.patch
CMAKE_ARGS
@ -67,6 +67,7 @@ prusaslicer_add_cmake_project(CURL
-DCMAKE_POSITION_INDEPENDENT_CODE=ON
-DCURL_STATICLIB=${_curl_static}
${_curl_platform_flags}
${MSAN_CMAKE_ARGS}
)
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")

View File

@ -1,6 +1,8 @@
prusaslicer_add_cmake_project(Cereal
URL "https://github.com/USCiLab/cereal/archive/v1.2.2.tar.gz"
URL_HASH SHA256=1921f26d2e1daf9132da3c432e2fd02093ecaedf846e65d7679ddf868c7289c4
DEPENDS ${LIBCXX_PKG}
CMAKE_ARGS
-DJUST_INSTALL_CEREAL=on
${MSAN_CMAKE_ARGS}
)

View File

@ -2,6 +2,9 @@ prusaslicer_add_cmake_project(EXPAT
# GIT_REPOSITORY https://github.com/nigels-com/glew.git
# GIT_TAG 3a8eff7 # 2.1.0
SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/expat
DEPENDS ${LIBCXX_PKG}
CMAKE_ARGS
${MSAN_CMAKE_ARGS}
)
if (MSVC)

View File

@ -5,6 +5,9 @@ find_package(OpenGL QUIET REQUIRED)
prusaslicer_add_cmake_project(
GLEW
SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/glew
DEPENDS ${LIBCXX_PKG}
CMAKE_ARGS
${MSAN_CMAKE_ARGS}
)
if (MSVC)

13
deps/GMP/GMP.cmake vendored
View File

@ -17,9 +17,15 @@ if (MSVC)
add_custom_target(dep_GMP SOURCES ${_output})
else ()
set(_gmp_ccflags "-O2 -DNDEBUG -fPIC -DPIC -Wall -Wmissing-prototypes -Wpointer-arith -pedantic -fomit-frame-pointer -fno-common")
set(_gmp_ccflags "-O2 -DNDEBUG -fPIC -DPIC -Wall -Wmissing-prototypes -Wpointer-arith -pedantic -fomit-frame-pointer -fno-common")
set(_gmp_cxxflags "${_gmp_ccflags}")
set(_gmp_build_tgt "${CMAKE_SYSTEM_PROCESSOR}")
if (DEP_MSAN)
set(_gmp_ccflags "${_gmp_ccflags} ${MSAN_CMAKE_C_FLAGS}")
set(_gmp_cxxflags "${_gmp_cxxflags} ${MSAN_CMAKE_CXX_FLAGS} ${MSAN_CMAKE_LD_FLAGS} ${MSAN_CMAKE_RPATH}")
endif ()
if (APPLE)
if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm")
set(_gmp_build_tgt aarch64)
@ -45,9 +51,10 @@ else ()
ExternalProject_Add(dep_GMP
URL https://gmplib.org/download/gmp/gmp-6.2.1.tar.bz2
URL_HASH SHA256=eae9326beb4158c386e39a356818031bd28f3124cf915f8c5b1dc4c7a36b4d7c
DEPENDS ${LIBCXX_PKG}
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/GMP
BUILD_IN_SOURCE ON
CONFIGURE_COMMAND env "CFLAGS=${_gmp_ccflags}" "CXXFLAGS=${_gmp_ccflags}" ./configure ${_cross_compile_arg} --enable-shared=no --enable-cxx=yes --enable-static=yes "--prefix=${DESTDIR}/usr/local" ${_gmp_build_tgt}
BUILD_IN_SOURCE ON
CONFIGURE_COMMAND env "CFLAGS=${_gmp_ccflags}" "CXXFLAGS=${_gmp_cxxflags}" ./configure ${_cross_compile_arg} --enable-shared=no --enable-cxx=yes --enable-static=yes "--prefix=${DESTDIR}/usr/local" ${_gmp_build_tgt}
BUILD_COMMAND make -j
INSTALL_COMMAND make install
)

View File

@ -1,8 +1,9 @@
prusaslicer_add_cmake_project(JPEG
URL https://github.com/libjpeg-turbo/libjpeg-turbo/archive/refs/tags/2.0.6.zip
URL_HASH SHA256=017bdc33ff3a72e11301c0feb4657cb27719d7f97fa67a78ed506c594218bbf1
DEPENDS ${ZLIB_PKG}
DEPENDS ${LIBCXX_PKG} ${ZLIB_PKG}
CMAKE_ARGS
-DENABLE_SHARED=OFF
-DENABLE_STATIC=ON
${MSAN_CMAKE_ARGS}
)

View File

@ -28,9 +28,10 @@ else ()
ExternalProject_Add(dep_MPFR
URL http://ftp.vim.org/ftp/gnu/mpfr/mpfr-3.1.6.tar.bz2 https://www.mpfr.org/mpfr-3.1.6/mpfr-3.1.6.tar.bz2 # mirrors are allowed
URL_HASH SHA256=cf4f4b2d80abb79e820e78c8077b6725bbbb4e8f41896783c899087be0e94068
DEPENDS ${LIBCXX_PKG}
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/MPFR
BUILD_IN_SOURCE ON
CONFIGURE_COMMAND env "CFLAGS=${_gmp_ccflags}" "CXXFLAGS=${_gmp_ccflags}" ./configure ${_cross_compile_arg} --prefix=${DESTDIR}/usr/local --enable-shared=no --enable-static=yes --with-gmp=${DESTDIR}/usr/local ${_gmp_build_tgt}
CONFIGURE_COMMAND env "CFLAGS=${_gmp_ccflags}" "CXXFLAGS=${_gmp_cxxflags}" ./configure ${_cross_compile_arg} --prefix=${DESTDIR}/usr/local --enable-shared=no --enable-static=yes --with-gmp=${DESTDIR}/usr/local ${_gmp_build_tgt}
BUILD_COMMAND make -j
INSTALL_COMMAND make install
DEPENDS dep_GMP

View File

@ -0,0 +1,17 @@
if (DEP_MSAN_ORIGIN_TRACKING)
set(chromium_url https://www.googleapis.com/download/storage/v1/b/chromium-browser-msan/o/linux-release%2Fmsan-chained-origins-linux-release-812431.zip?alt=media)
set(chromium_url_hash b99c3e50ab936e44f6e5b4e28b7f8bab0b01912bcb068af258f366fe1e18a6f6)
else ()
set(chromium_url https://www.googleapis.com/download/storage/v1/b/chromium-browser-msan/o/linux-release%2Fmsan-no-origins-linux-release-812433.zip?alt=media)
set(chromium_url_hash cfacfe4c2c3ee284015b74ada493cb992d4f7ac82e6325d27384d18437738c4c)
endif ()
ExternalProject_Add(dep_Chromium_Libs
URL ${chromium_url}
URL_HASH SHA256=${chromium_url_hash}
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/Chromium_Libs
BUILD_IN_SOURCE ON
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ${CMAKE_COMMAND} "-D_MSAN_COPY_FROM=./instrumented_libraries_prebuilt/msan/lib" "-D_MSAN_COPY_TO=${DESTDIR}/usr/lib" -P ${CMAKE_CURRENT_LIST_DIR}/copy_chromium_prebuilt_libraries.cmake
)

View File

@ -0,0 +1,86 @@
function(copy_chromium_prebuilt_libraries path_from path_to)
if (NOT ${ARGC} EQUAL 2)
message(FATAL_ERROR "Invalid argument count.")
endif()
set(chromium_libs_list
libatk-1.0
libatk-bridge-2.0
libatspi
libcairo
libcairo-gobject
libcairo-script-interpreter
libdbus-1
libdbus-glib-1
libdbusmenu-glib
libdbusmenu-gtk
libdbusmenu-gtk3
libdbusmenu-jsonloader
libffi
libfreetype
libgdk-3
libgdk_pixbuf-2.0
libgdk_pixbuf_xlib-2.0
libgio-2.0
libglib-2.0
libgobject-2.0
libgtk-3
libharfbuzz
libharfbuzz-gobject
libharfbuzz-icu
libjasper
libpango-1.0
libpangocairo-1.0
libpangoft2-1.0
libpangoxft-1.0
libpixman-1
libpng12
libsecret-1
libudev
libX11
libX11-xcb
libXau
libxcb
libXcomposite
libXcursor
libXdamage
libXdmcp
libXext
libXfixes
libXinerama
libXi
libXrandr
libXrender
libXss
libXtst)
set(chromium_libs_dirs_list
cairo
dbus-1.0
glib-2.0
gtk-2.0
gtk-3.0
udev)
foreach(chromium_lib ${chromium_libs_list})
file(GLOB chromium_lib_files "${path_from}/${chromium_lib}*")
if (NOT chromium_lib_files)
message(FATAL_ERROR "Library \"${chromium_lib}\" was not found.")
endif()
foreach(chromium_lib_file ${chromium_lib_files})
file(COPY ${chromium_lib_file} DESTINATION ${path_to})
message("Copying file: ${chromium_lib_file}.")
endforeach()
endforeach()
foreach(chromium_lib_dir ${chromium_libs_dirs_list})
file(GLOB lib_directory "${path_from}/${chromium_lib_dir}")
if (NOT lib_directory)
message(FATAL_ERROR "Library directory \"${chromium_lib_dir}\" was not found.")
endif()
file(COPY ${lib_directory} DESTINATION ${path_to})
message("Copying directory: ${lib_directory}.")
endforeach()
endfunction()
copy_chromium_prebuilt_libraries(${_MSAN_COPY_FROM} ${_MSAN_COPY_TO})

54
deps/MSan_Deps/LLVM/LLVM.cmake vendored Normal file
View File

@ -0,0 +1,54 @@
set(projectname LLVM)
set(_llvm_cmake_c_flags "-fPIC")
set(_llvm_cmake_cxx_flags "-nostdinc++ -isystem ${DESTDIR}/usr/local/include -isystem ${DESTDIR}/usr/local/include/c++/v1 -fPIC")
set(_llvm_cmake_exe_linker_flags "-stdlib=libc++ -Wl,--rpath=${DESTDIR}/usr/local/lib -L${DESTDIR}/usr/local/lib -fsanitize=memory -fPIC")
set(_llvm_cmake_shared_linker_flags "-stdlib=libc++ -Wl,--rpath=${DESTDIR}/usr/local/lib -L${DESTDIR}/usr/local/lib -fsanitize=memory -fPIC")
set(_llvm_cmake_module_linker_flags "-stdlib=libc++ -Wl,--rpath=${DESTDIR}/usr/local/lib -L${DESTDIR}/usr/local/lib -fsanitize=memory -fPIC")
# TODO: Build LLVM statically and link with Mesa 3D.
ExternalProject_Add(dep_LLVM
URL https://github.com/llvm/llvm-project/releases/download/llvmorg-12.0.1/llvm-project-12.0.1.src.tar.xz
URL_HASH SHA256=129cb25cd13677aad951ce5c2deb0fe4afc1e9d98950f53b51bdcfb5a73afa0e
DEPENDS dep_Libcxx
EXCLUDE_FROM_ALL ON
INSTALL_DIR ${DESTDIR}/usr/local
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/LLVM
LIST_SEPARATOR | # Use the alternate list separator because by default all ; are replaced by space
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX:STRING=${DESTDIR}/usr/local
-DCMAKE_MODULE_PATH:STRING=${PROJECT_SOURCE_DIR}/../cmake/modules
-DCMAKE_PREFIX_PATH:STRING=${DESTDIR}/usr/local
-DCMAKE_C_COMPILER:STRING=${CMAKE_C_COMPILER}
-DCMAKE_CXX_COMPILER:STRING=${CMAKE_CXX_COMPILER}
-DCMAKE_TOOLCHAIN_FILE:STRING=${CMAKE_TOOLCHAIN_FILE}
-DCMAKE_BUILD_TYPE=Release
-DLLVM_USE_SANITIZER=MemoryWithOrigins
# -DLLVM_ENABLE_PROJECTS=clang|lld|llvm-config
-DLLVM_ENABLE_PROJECTS=LLVM|llvm-config
-DLLVM_ENABLE_LIBCXX=ON
# This forces to make shared library.
-DLLVM_BUILD_LLVM_DYLIB=ON
-DLLVM_LINK_LLVM_DYLIB=ON
-DLLVM_DYLIB_COMPONENTS=all
# -DLLVM_TARGETS_TO_BUILD=X86
-DLLVM_ENABLE_PIC=ON
-DCMAKE_C_FLAGS:STRING=${_llvm_cmake_c_flags}
-DCMAKE_CXX_FLAGS:STRING=${_llvm_cmake_cxx_flags}
-DCMAKE_EXE_LINKER_FLAGS:STRING=${_llvm_cmake_exe_linker_flags}
-DCMAKE_SHARED_LINKER_FLAGS:STRING=${_llvm_cmake_shared_linker_flags}
-DCMAKE_MODULE_LINKER_FLAGS:STRING=${_llvm_cmake_module_linker_flags}
SOURCE_SUBDIR llvm
BUILD_COMMAND ${CMAKE_COMMAND} --build . --config Release --target LLVM llvm-config -- ${_build_j}
INSTALL_COMMAND ${CMAKE_COMMAND} --build . --config Release --target install-LLVM install-llvm-config install-llvm-headers
COMMAND ln -sfn "../local/lib/libLLVM.so" "${DESTDIR}/usr/lib/libLLVM.so"
COMMAND ln -sfn "../local/lib/libLLVM-12.so" "${DESTDIR}/usr/lib/libLLVM-12.so"
COMMAND ln -sfn "../local/lib/libLLVM-12.0.1.so" "${DESTDIR}/usr/lib/libLLVM-12.0.1.so"
)

28
deps/MSan_Deps/Libcxx/Libcxx.cmake vendored Normal file
View File

@ -0,0 +1,28 @@
set(_build_j "-j${NPROC}")
ExternalProject_Add(dep_Libcxx
URL https://github.com/llvm/llvm-project/releases/download/llvmorg-12.0.1/llvm-project-12.0.1.src.tar.xz
URL_HASH SHA256=129cb25cd13677aad951ce5c2deb0fe4afc1e9d98950f53b51bdcfb5a73afa0e
EXCLUDE_FROM_ALL ON
INSTALL_DIR ${DESTDIR}/usr/local
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/Libcxx
LIST_SEPARATOR | # Use the alternate list separator because by default all ; are replaced by space
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX:STRING=${DESTDIR}/usr/local
-DCMAKE_MODULE_PATH:STRING=${PROJECT_SOURCE_DIR}/../cmake/modules
-DCMAKE_PREFIX_PATH:STRING=${DESTDIR}/usr/local
-DCMAKE_C_COMPILER:STRING=${CMAKE_C_COMPILER}
-DCMAKE_CXX_COMPILER:STRING=${CMAKE_CXX_COMPILER}
-DCMAKE_TOOLCHAIN_FILE:STRING=${CMAKE_TOOLCHAIN_FILE}
-DCMAKE_BUILD_TYPE=Release
-DLLVM_ENABLE_PROJECTS=libcxx|libcxxabi
-DLLVM_USE_SANITIZER=MemoryWithOrigins
SOURCE_SUBDIR llvm
BUILD_COMMAND ${CMAKE_COMMAND} --build . --config Release --target cxx cxxabi -- ${_build_j}
INSTALL_COMMAND ${CMAKE_COMMAND} --build . --config Release --target install-cxx install-cxxabi
COMMAND ln -sfn "../local/lib/libc++.so" "${DESTDIR}/usr/lib/libc++.so"
COMMAND ln -sfn "../local/lib/libc++.so.1" "${DESTDIR}/usr/lib/libc++.so.1"
COMMAND ln -sfn "../local/lib/libc++.so.1.0" "${DESTDIR}/usr/lib/libc++.so.1.0"
COMMAND ln -sfn "../local/lib/libc++abi.so" "${DESTDIR}/usr/lib/libc++abi.so"
COMMAND ln -sfn "../local/lib/libc++abi.so.1" "${DESTDIR}/usr/lib/libc++abi.so.1"
COMMAND ln -sfn "../local/lib/libc++abi.so.1.0" "${DESTDIR}/usr/lib/libc++abi.so.1.0"
)

19
deps/MSan_Deps/Mesa3D/Mesa3D.cmake vendored Normal file
View File

@ -0,0 +1,19 @@
set(_mesa3d_cflags "-fsanitize=memory -stdlib=libc++ -fsanitize-recover=memory -fsanitize-blacklist=${CMAKE_CURRENT_LIST_DIR}/ignorelist.txt -I${DESTDIR}/usr/local/include -I${DESTDIR}/usr/local/include/c++/v1")
set(_mesa3d_cxxflags "-fsanitize=memory -stdlib=libc++ -fsanitize-recover=memory -fsanitize-blacklist=${CMAKE_CURRENT_LIST_DIR}/ignorelist.txt -I${DESTDIR}/usr/local/include -I${DESTDIR}/usr/local/include/c++/v1")
set(_mesa3d_ldflags "-fsanitize=memory -stdlib=libc++ -fsanitize-recover=memory -fsanitize-blacklist=${CMAKE_CURRENT_LIST_DIR}/ignorelist.txt -L${DESTDIR}/usr/local/lib -Wl,-rpath,${DESTDIR}/usr/local/lib")
set(_mesa3d_path "${DESTDIR}/usr/local/bin:$ENV{PATH}")
# We need to override PATH variable to make Meson find our build llvm-config and not use system one.
ExternalProject_Add(dep_Mesa3D
URL https://archive.mesa3d.org/mesa-21.3.3.tar.xz
URL_HASH SHA256=ad7f4613ea7c5d08d9fcb5025270199e6ceb9aa99fd72ee572b70342240a8121
DEPENDS dep_Libcxx dep_LLVM dep_Chromium_Libs
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/Mesa3D
BUILD_IN_SOURCE ON
CONFIGURE_COMMAND env "PATH=${_mesa3d_path}" "CFLAGS=${_mesa3d_cflags}" "CXXFLAGS=${_mesa3d_cxxflags}" "LDFLAGS=${_mesa3d_ldflags}" meson build_mesa -Dglx=gallium-xlib -Dgallium-drivers=swrast -Dplatforms=x11 -Ddri3=disabled "-Ddri-drivers=" "-Dvulkan-drivers=" -Db_sanitize=memory -Db_lundef=false -Dgles1=disabled -Dgles2=disabled -Dshared-glapi=disabled "-Dprefix=${DESTDIR}/usr/local" "-Dlibdir=${DESTDIR}/usr/local/lib"
BUILD_COMMAND ninja -C build_mesa install
INSTALL_COMMAND ln -sfn "../local/lib/libGL.so" "${DESTDIR}/usr/lib/libGL.so"
COMMAND ln -sfn "../local/lib/libGL.so.1" "${DESTDIR}/usr/lib/libGL.so.1"
COMMAND ln -sfn "../local/lib/libGL.so.1.5.0" "${DESTDIR}/usr/lib/libGL.so.1.5.0"
)

55
deps/MSan_Deps/Mesa3D/ignorelist.txt vendored Normal file
View File

@ -0,0 +1,55 @@
fun:single_output_color
fun:flush_spans
fun:subtriangle
fun:sp_setup_tri
fun:sp_vbuf_draw_arrays
fun:draw_pt_emit_linear
fun:emit
fun:fetch_pipeline_generic
fun:fetch_pipeline_linear_run
fun:vsplit_run_linear
fun:draw_pt_arrays
fun:draw_instances
fun:draw_vbo
fun:softpipe_draw_vbo
fun:_mesa_draw_arrays
fun:_mesa_DrawArrays
fun:setup_sort_vertices
fun:setup_tri_edges
fun:sp_setup_tri
fun:sp_vbuf_draw_arrays
fun:util_set_thread_affinity
fun:clamp_colors
fun:exec_run
fun:shade_quad
fun:shade_quads
fun:depth_test_quads_fallback
fun:blend_single_add_src_alpha_inv_src_alpha
fun:tgsi_exec_machine_setup_masks
fun:tgsi_exec_machine_run
fun:depth_test_quad
fun:util_format_r8g8b8a8_unorm_unpack_rgba_float
fun:sp_get_cached_tile_tex
fun:get_texel_2d
fun:sp_find_cached_tile_tex
fun:sp_get_cached_tile_tex
fun:compute_lambda_lod
fun:util_fast_log2
fun:img_filter_2d_linear
fun:sp_get_cache
fun:util_copy_rect
fun:util_format_unpack_rgba_rect
fun:u_clip_tile
fun:img_filter_2d_linear_repeat_POT
fun:micro_div
fun:img_filter_2d_ewa
fun:convert_quad_depth
fun:calc_fixed_position
fun:try_setup_line
fun:setup_fragcoord_coef
fun:clip_tri
fun:do_clip_tri
fun:emit_vertex
fun:cull_tri
fun:clip_line
fun:do_clip_line

View File

@ -0,0 +1,16 @@
set(_fontconfig_cflags "-fsanitize=memory -stdlib=libc++ -fsanitize-recover=memory -I${DESTDIR}/usr/local/include -I${DESTDIR}/usr/local/include/c++/v1")
set(_fontconfig_cxxflags "-fsanitize=memory -stdlib=libc++ -fsanitize-recover=memory -I${DESTDIR}/usr/local/include -I${DESTDIR}/usr/local/include/c++/v1")
set(_fontconfig_ldflags "-fsanitize=memory -stdlib=libc++ -fsanitize-recover=memory -L${DESTDIR}/usr/local/lib -Wl,-rpath,${DESTDIR}/usr/local/lib")
ExternalProject_Add(dep_fontconfig
URL https://www.freedesktop.org/software/fontconfig/release/fontconfig-2.13.1.tar.gz
URL_HASH SHA256=9f0d852b39d75fc655f9f53850eb32555394f36104a044bb2b2fc9e66dbbfa7f
DEPENDS dep_Libcxx
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/fontconfig
BUILD_IN_SOURCE ON
CONFIGURE_COMMAND env "CFLAGS=${_fontconfig_cflags}" "CXXFLAGS=${_fontconfig_cxxflags}" "LDFLAGS=${_fontconfig_ldflags}" ./configure --disable-docs --disable-static "--sysconfdir=/etc" "--localstatedir=/var" "--prefix=${DESTDIR}/usr/local"
INSTALL_COMMAND make install-exec && cd fontconfig && make install-fontconfigincludeHEADERS
COMMAND ln -sfn "../local/lib/libfontconfig.so" "${DESTDIR}/usr/lib/libfontconfig.so"
COMMAND ln -sfn "../local/lib/libfontconfig.so.1" "${DESTDIR}/usr/lib/libfontconfig.so.1"
COMMAND ln -sfn "../local/lib/libfontconfig.so.1.12.0" "${DESTDIR}/usr/lib/libfontconfig.so.1.12.0"
)

View File

@ -0,0 +1,34 @@
function(install_msan_shared_libraries path_from path_to)
if (NOT ${ARGC} EQUAL 2)
message(FATAL_ERROR "Invalid argument count.")
endif()
set(msan_libs_list
libc++
libc++abi
libfontconfig
libGL
libLLVM)
foreach(msan_lib ${msan_libs_list})
file(GLOB msan_lib_files "${path_from}/${msan_lib}*")
if (NOT msan_lib_files)
message(FATAL_ERROR "Library \"${msan_lib}\" was not found.")
endif()
foreach(msan_lib_file ${msan_lib_files})
file(COPY ${msan_lib_file} DESTINATION ${path_to})
message("Copying file: ${msan_lib_file}.")
endforeach()
endforeach()
foreach(msan_lib_dir ${msan_libs_dirs_list})
file(GLOB lib_directory "${path_from}/${msan_lib_dir}")
if (NOT lib_directory)
message(FATAL_ERROR "Library directory \"${msan_lib_dir}\" was not found.")
endif()
file(COPY ${lib_directory} DESTINATION ${path_to})
message("Copying directory: ${lib_directory}.")
endforeach()
endfunction()
install_msan_shared_libraries(${_MSAN_COPY_FROM} ${_MSAN_COPY_TO})

View File

@ -1,6 +1,7 @@
prusaslicer_add_cmake_project(NLopt
URL "https://github.com/stevengj/nlopt/archive/v2.5.0.tar.gz"
URL_HASH SHA256=c6dd7a5701fff8ad5ebb45a3dc8e757e61d52658de3918e38bab233e7fd3b4ae
DEPENDS ${LIBCXX_PKG}
CMAKE_ARGS
-DNLOPT_PYTHON:BOOL=OFF
-DNLOPT_OCTAVE:BOOL=OFF
@ -8,6 +9,7 @@ prusaslicer_add_cmake_project(NLopt
-DNLOPT_GUILE:BOOL=OFF
-DNLOPT_SWIG:BOOL=OFF
-DNLOPT_TESTS:BOOL=OFF
${MSAN_CMAKE_ARGS}
)
if (MSVC)

View File

@ -5,7 +5,9 @@ prusaslicer_add_cmake_project(OpenCSG
URL https://github.com/floriankirsch/OpenCSG/archive/refs/tags/opencsg-1-4-2-release.zip
URL_HASH SHA256=51afe0db79af8386e2027d56d685177135581e0ee82ade9d7f2caff8deab5ec5
PATCH_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt.in ./CMakeLists.txt
DEPENDS dep_GLEW
DEPENDS ${LIBCXX_PKG} dep_GLEW
CMAKE_ARGS
${MSAN_CMAKE_ARGS}
)
if (TARGET ${ZLIB_PKG})

View File

@ -2,7 +2,7 @@ prusaslicer_add_cmake_project(OpenEXR
# GIT_REPOSITORY https://github.com/openexr/openexr.git
URL https://github.com/AcademySoftwareFoundation/openexr/archive/refs/tags/v2.5.5.zip
URL_HASH SHA256=0307a3d7e1fa1e77e9d84d7e9a8694583fbbbfd50bdc6884e2c96b8ef6b902de
DEPENDS ${ZLIB_PKG}
DEPENDS ${LIBCXX_PKG} ${ZLIB_PKG}
GIT_TAG v2.5.5
CMAKE_ARGS
-DCMAKE_POSITION_INDEPENDENT_CODE=ON
@ -10,6 +10,7 @@ prusaslicer_add_cmake_project(OpenEXR
-DPYILMBASE_ENABLE:BOOL=OFF
-DOPENEXR_VIEWERS_ENABLE:BOOL=OFF
-DOPENEXR_BUILD_UTILS:BOOL=OFF
${MSAN_CMAKE_ARGS}
)
if (MSVC)

View File

@ -21,6 +21,7 @@ ExternalProject_Add(dep_OpenSSL
EXCLUDE_FROM_ALL ON
URL "https://github.com/openssl/openssl/archive/OpenSSL_1_1_0l.tar.gz"
URL_HASH SHA256=e2acf0cf58d9bff2b42f2dc0aee79340c8ffe2c5e45d3ca4533dd5d4f5775b1d
DEPENDS ${LIBCXX_PKG}
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/OpenSSL
BUILD_IN_SOURCE ON
CONFIGURE_COMMAND ${_conf_cmd} ${_cross_arch}
@ -30,6 +31,8 @@ ExternalProject_Add(dep_OpenSSL
no-ssl3-method
no-dynamic-engine
-Wa,--noexecstack
"${MSAN_CMAKE_C_FLAGS}"
"${MSAN_CMAKE_LD_FLAGS}"
BUILD_COMMAND make depend && make "-j${NPROC}"
INSTALL_COMMAND make install_sw
)

View File

@ -8,8 +8,8 @@ endif()
prusaslicer_add_cmake_project(OpenVDB
URL https://github.com/tamasmeszaros/openvdb/archive/refs/tags/v6.2.1-prusa3d.zip #v6.2.1 patched
URL_HASH SHA256=caf9f0c91976722883ff9cb32420ef142af22f7e625fc643b91c23d6e4172f62
DEPENDS dep_TBB dep_Blosc dep_OpenEXR dep_Boost
URL_HASH SHA256=caf9f0c91976722883ff9cb32420ef142af22f7e625fc643b91c23d6e4172f62
DEPENDS ${LIBCXX_PKG} dep_TBB dep_Blosc dep_OpenEXR dep_Boost
CMAKE_ARGS
-DCMAKE_POSITION_INDEPENDENT_CODE=ON
-DOPENVDB_BUILD_PYTHON_MODULE=OFF
@ -20,6 +20,7 @@ prusaslicer_add_cmake_project(OpenVDB
-DTBB_STATIC=${_build_static}
-DOPENVDB_BUILD_VDB_PRINT=ON
-DDISABLE_DEPENDENCY_VERSION_CHECKS=ON # Centos6 has old zlib
${MSAN_CMAKE_ARGS}
)
if (MSVC)

9
deps/PNG/PNG.cmake vendored
View File

@ -10,19 +10,24 @@ if (APPLE)
set(_patch_step PATCH_COMMAND ${PATCH_CMD} ${CMAKE_CURRENT_LIST_DIR}/PNG.patch)
endif ()
if (NOT DEP_MSAN)
set(_png_prefix -DPNG_PREFIX=prusaslicer_)
endif ()
prusaslicer_add_cmake_project(PNG
# GIT_REPOSITORY https://github.com/glennrp/libpng.git
# GIT_TAG v1.6.35
URL https://github.com/glennrp/libpng/archive/refs/tags/v1.6.35.zip
URL_HASH SHA256=3d22d46c566b1761a0e15ea397589b3a5f36ac09b7c785382e6470156c04247f
DEPENDS ${ZLIB_PKG}
DEPENDS ${LIBCXX_PKG} ${ZLIB_PKG}
"${_patch_step}"
CMAKE_ARGS
-DPNG_SHARED=OFF
-DPNG_STATIC=ON
-DPNG_PREFIX=prusaslicer_
${_png_prefix}
-DPNG_TESTS=OFF
-DDISABLE_DEPENDENCY_TRACKING=OFF
${MSAN_CMAKE_ARGS}
${_disable_neon_extension}
)

View File

@ -2,8 +2,10 @@ include(GNUInstallDirs)
prusaslicer_add_cmake_project(Qhull
URL "https://github.com/qhull/qhull/archive/v8.0.1.zip"
URL_HASH SHA256=5287f5edd6a0372588f5d6640799086a4033d89d19711023ef8229dd9301d69b
DEPENDS ${LIBCXX_PKG}
CMAKE_ARGS
-DINCLUDE_INSTALL_DIR=${CMAKE_INSTALL_INCLUDEDIR}
${MSAN_CMAKE_ARGS}
)
if (MSVC)

2
deps/TBB/TBB.cmake vendored
View File

@ -2,12 +2,14 @@ prusaslicer_add_cmake_project(
TBB
URL "https://github.com/wjakob/tbb/archive/a0dc9bf76d0120f917b641ed095360448cabc85b.tar.gz"
URL_HASH SHA256=0545cb6033bd1873fcae3ea304def720a380a88292726943ae3b9b207f322efe
DEPENDS ${LIBCXX_PKG}
CMAKE_ARGS
-DTBB_BUILD_SHARED=OFF
-DTBB_BUILD_TESTS=OFF
-DTBB_BUILD_TESTS=OFF
-DCMAKE_POSITION_INDEPENDENT_CODE=ON
-DCMAKE_DEBUG_POSTFIX=_debug
${MSAN_CMAKE_ARGS}
)
if (MSVC)

View File

@ -3,11 +3,12 @@ find_package(OpenGL QUIET REQUIRED)
prusaslicer_add_cmake_project(TIFF
URL https://gitlab.com/libtiff/libtiff/-/archive/v4.1.0/libtiff-v4.1.0.zip
URL_HASH SHA256=c56edfacef0a60c0de3e6489194fcb2f24c03dbb550a8a7de5938642d045bd32
DEPENDS ${ZLIB_PKG} ${PNG_PKG} dep_JPEG
DEPENDS ${LIBCXX_PKG} ${ZLIB_PKG} ${PNG_PKG} dep_JPEG
CMAKE_ARGS
-Dlzma:BOOL=OFF
-Dwebp:BOOL=OFF
-Djbig:BOOL=OFF
-Dzstd:BOOL=OFF
-Dpixarlog:BOOL=OFF
${MSAN_CMAKE_ARGS}
)

View File

@ -3,9 +3,11 @@ prusaslicer_add_cmake_project(ZLIB
# GIT_TAG v1.2.11
URL https://github.com/madler/zlib/archive/refs/tags/v1.2.11.zip
URL_HASH SHA256=f5cc4ab910db99b2bdbba39ebbdc225ffc2aa04b4057bc2817f1b94b6978cfc3
DEPENDS ${LIBCXX_PKG}
PATCH_COMMAND ${PATCH_CMD} ${CMAKE_CURRENT_LIST_DIR}/0001-Respect-BUILD_SHARED_LIBS.patch
CMAKE_ARGS
-DSKIP_INSTALL_FILES=ON # Prevent installation of man pages et al.
-DCMAKE_POSITION_INDEPENDENT_CODE=ON
${MSAN_CMAKE_ARGS}
)

View File

@ -9,12 +9,48 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(_wx_toolkit "-DwxBUILD_TOOLKIT=gtk${_gtk_ver}")
endif()
set(_wx_config_command "")
if (DEP_MSAN)
set(_wx_cmake_args
-DCMAKE_INSTALL_PREFIX:STRING=${DESTDIR}/usr/local
-DCMAKE_MODULE_PATH:STRING=${PROJECT_SOURCE_DIR}/../cmake/modules
-DCMAKE_PREFIX_PATH:STRING=${DESTDIR}/usr/local
-DCMAKE_DEBUG_POSTFIX:STRING=d
-DCMAKE_C_COMPILER:STRING=${CMAKE_C_COMPILER}
-DCMAKE_CXX_COMPILER:STRING=${CMAKE_CXX_COMPILER}
-DCMAKE_TOOLCHAIN_FILE:STRING=${CMAKE_TOOLCHAIN_FILE}
-DBUILD_SHARED_LIBS:BOOL=OFF
-DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
${DEP_CMAKE_OPTS}
-DwxBUILD_PRECOMP=ON
${_wx_toolkit}
"-DCMAKE_DEBUG_POSTFIX:STRING="
-DwxBUILD_DEBUG_LEVEL=0
-DwxUSE_MEDIACTRL=OFF
-DwxUSE_DETECT_SM=OFF
-DwxUSE_UNICODE=ON
-DwxUSE_OPENGL=ON
-DwxUSE_LIBPNG=sys
-DwxUSE_ZLIB=sys
-DwxUSE_REGEX=builtin
-DwxUSE_LIBXPM=builtin
-DwxUSE_LIBJPEG=sys
-DwxUSE_LIBTIFF=sys
-DwxUSE_EXPAT=sys
-DwxUSE_LIBSDL=OFF
-DwxUSE_XTEST=OFF)
set(_wx_config_command CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env "CFLAGS=${MSAN_CMAKE_C_FLAGS}" "CXXFLAGS=${MSAN_CMAKE_CXX_FLAGS}" "LDFLAGS=${MSAN_CMAKE_LD_FLAGS}" ${CMAKE_COMMAND}
${_wx_cmake_args}
"${CMAKE_GENERATOR}"
${DEP_DOWNLOAD_DIR}/dep_wxWidgets-prefix/src/dep_wxWidgets)
endif ()
prusaslicer_add_cmake_project(wxWidgets
# GIT_REPOSITORY "https://github.com/prusa3d/wxWidgets"
# GIT_TAG tm_cross_compile #${_wx_git_tag}
URL https://github.com/prusa3d/wxWidgets/archive/refs/heads/v3.1.4-patched.zip
URL_HASH SHA256=69dec874981d2fc3d90345660c27f3450d8430c483e8446edcc87b6ed18bff8f
DEPENDS ${PNG_PKG} ${ZLIB_PKG} ${EXPAT_PKG} dep_TIFF dep_JPEG
DEPENDS ${LIBCXX_PKG} ${FONTCONFIG_PKG} ${PNG_PKG} ${ZLIB_PKG} ${EXPAT_PKG} dep_TIFF dep_JPEG
CMAKE_ARGS
-DwxBUILD_PRECOMP=ON
${_wx_toolkit}
@ -33,6 +69,7 @@ prusaslicer_add_cmake_project(wxWidgets
-DwxUSE_EXPAT=sys
-DwxUSE_LIBSDL=OFF
-DwxUSE_XTEST=OFF
${_wx_config_command}
)
if (MSVC)

View File

@ -251,9 +251,15 @@ else ()
set(BIN_RESOURCES_DIR "${CMAKE_CURRENT_BINARY_DIR}/../resources")
endif ()
add_custom_command(TARGET PrusaSlicer POST_BUILD
COMMAND ln -sfn "${SLIC3R_RESOURCES_DIR}" "${BIN_RESOURCES_DIR}"
COMMENT "Symlinking the resources directory into the build tree"
VERBATIM)
COMMAND ln -sfn "${SLIC3R_RESOURCES_DIR}" "${BIN_RESOURCES_DIR}"
COMMENT "Symlinking the resources directory into the build tree"
VERBATIM)
if (SLIC3R_MSAN)
add_custom_command(TARGET PrusaSlicer POST_BUILD
COMMAND ln -sfn "${CMAKE_PREFIX_PATH}/../lib" "${CMAKE_CURRENT_BINARY_DIR}/../lib"
COMMENT "Symlinking the instrument library directory into the build tree"
VERBATIM)
endif ()
endif ()
# Slic3r binary install target