MSVC VST compilation fixes
This commit is contained in:
@@ -47,10 +47,6 @@ ENDIF()
|
||||
INCLUDE(VersionInfo)
|
||||
INCLUDE(DetectMachine)
|
||||
|
||||
IF(CMAKE_TOOLCHAIN_FILE MATCHES "vcpkg.cmake$")
|
||||
SET(USING_VCPKG TRUE)
|
||||
ENDIF()
|
||||
|
||||
OPTION(WANT_ALSA "Include ALSA (Advanced Linux Sound Architecture) support" ON)
|
||||
OPTION(WANT_CALF "Include CALF LADSPA plugins" ON)
|
||||
OPTION(WANT_CAPS "Include C* Audio Plugin Suite (LADSPA plugins)" ON)
|
||||
@@ -169,15 +165,15 @@ FIND_PACKAGE(Qt5Test)
|
||||
SET(QT_QTTEST_LIBRARY Qt5::Test)
|
||||
|
||||
# check for libsndfile
|
||||
IF(USING_VCPKG)
|
||||
FIND_PACKAGE(LibSndFile 1.0.18 REQUIRED)
|
||||
SET(SNDFILE_LIBRARIES sndfile-shared)
|
||||
ELSE(USING_VCPKG)
|
||||
IF(PKG_CONFIG_FOUND)
|
||||
PKG_CHECK_MODULES(SNDFILE REQUIRED sndfile>=1.0.18)
|
||||
IF(NOT SNDFILE_FOUND)
|
||||
MESSAGE(FATAL_ERROR "LMMS requires libsndfile1 and libsndfile1-dev >= 1.0.18 - please install, remove CMakeCache.txt and try again!")
|
||||
ENDIF()
|
||||
ENDIF(USING_VCPKG)
|
||||
ELSE()
|
||||
FIND_PACKAGE(LibSndFile 1.0.18 REQUIRED)
|
||||
SET(SNDFILE_LIBRARIES sndfile-shared)
|
||||
ENDIF()
|
||||
# check if we can use SF_SET_COMPRESSION_LEVEL
|
||||
IF(NOT SNDFILE_VERSION VERSION_LESS 1.0.26)
|
||||
SET(LMMS_HAVE_SF_COMPLEVEL TRUE)
|
||||
@@ -402,13 +398,13 @@ ENDIF(WANT_JACK)
|
||||
|
||||
|
||||
# check for FFTW3F-library
|
||||
IF(USING_VCPKG)
|
||||
IF(PKG_CONFIG_FOUND)
|
||||
PKG_CHECK_MODULES(FFTW3F REQUIRED fftw3f>=3.0.0)
|
||||
ELSE()
|
||||
#currently find_package for fftw is broken in vcpkg. Replace this when fixed
|
||||
FIND_PATH(FFTW3F_INCLUDE_DIRS fftw3.h)
|
||||
FIND_LIBRARY(FFTW3F_LIBRARIES fftw3f)
|
||||
ELSE(USING_VCPKG)
|
||||
PKG_CHECK_MODULES(FFTW3F REQUIRED fftw3f>=3.0.0)
|
||||
ENDIF(USING_VCPKG)
|
||||
ENDIF()
|
||||
|
||||
# check for FLTK
|
||||
FIND_PACKAGE(FLTK)
|
||||
@@ -490,13 +486,13 @@ ELSE()
|
||||
ENDIF(WANT_DEBUG_FPE)
|
||||
|
||||
# check for libsamplerate
|
||||
IF(USING_VCPKG)
|
||||
IF(PKG_CONFIG_FOUND)
|
||||
PKG_CHECK_MODULES(SAMPLERATE REQUIRED samplerate>=0.1.8)
|
||||
ELSE()
|
||||
#TODO no cmake config support. Can we check the version some other way?
|
||||
FIND_FILE(SAMPLERATE_INCLUDE_DIRS samplerate.h)
|
||||
FIND_LIBRARY(SAMPLERATE_LIBRARIES libsamplerate-0)
|
||||
ELSE(USING_VCPKG)
|
||||
PKG_CHECK_MODULES(SAMPLERATE REQUIRED samplerate>=0.1.8)
|
||||
ENDIF(USING_VCPKG)
|
||||
ENDIF()
|
||||
|
||||
# set compiler flags
|
||||
IF(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
|
||||
|
||||
@@ -29,67 +29,6 @@ SET(EXTERNALPROJECT_CMAKE_ARGS
|
||||
)
|
||||
|
||||
# build 32 bit version of RemoteVstPlugin
|
||||
IF(LMMS_BUILD_WIN32 AND NOT LMMS_BUILD_WIN64)
|
||||
ADD_SUBDIRECTORY(RemoteVstPlugin)
|
||||
ELSEIF(LMMS_BUILD_WIN64 AND MSVC)
|
||||
STRING(REPLACE " Win64" "" GENERATOR ${CMAKE_GENERATOR})
|
||||
|
||||
IF(NOT USING_VCPKG)
|
||||
GET_FILENAME_COMPONENT(QT_BIN_DIR ${QT_QMAKE_EXECUTABLE} DIRECTORY)
|
||||
SET(QT_32_PREFIX "${QT_BIN_DIR}/../../msvc${MSVC_YEAR}")
|
||||
IF(NOT (IS_DIRECTORY ${QT_32_PREFIX} AND EXISTS ${QT_32_PREFIX}/bin/qmake.exe))
|
||||
MESSAGE(SEND_ERROR "Can't build RemoteVstPlugin32, no Qt 32 bit installation found at ${QT_32_PREFIX}")
|
||||
ENDIF()
|
||||
ENDIF(NOT USING_VCPKG)
|
||||
|
||||
ExternalProject_Add(RemoteVstPlugin32
|
||||
"${EXTERNALPROJECT_ARGS}"
|
||||
CMAKE_GENERATOR ${GENERATOR}
|
||||
CMAKE_GENERATOR_TOOLSET ${CMAKE_GENERATOR_TOOLSET}
|
||||
CMAKE_ARGS
|
||||
"${EXTERNALPROJECT_CMAKE_ARGS}"
|
||||
"-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}"
|
||||
"-DCMAKE_PREFIX_PATH=${QT_32_PREFIX}"
|
||||
)
|
||||
ELSEIF(LMMS_BUILD_LINUX)
|
||||
# Use winegcc
|
||||
ExternalProject_Add(RemoteVstPlugin32
|
||||
"${EXTERNALPROJECT_ARGS}"
|
||||
CMAKE_ARGS
|
||||
"${EXTERNALPROJECT_CMAKE_ARGS}"
|
||||
"-DCMAKE_CXX_COMPILER=${WINEGCC}"
|
||||
"-DCMAKE_CXX_FLAGS=-m32 -mwindows"
|
||||
)
|
||||
ELSEIF(CMAKE_TOOLCHAIN_FILE_32)
|
||||
ExternalProject_Add(RemoteVstPlugin32
|
||||
"${EXTERNALPROJECT_ARGS}"
|
||||
CMAKE_ARGS
|
||||
"${EXTERNALPROJECT_CMAKE_ARGS}"
|
||||
"-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH_32}"
|
||||
"-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE_32}"
|
||||
)
|
||||
ELSE()
|
||||
message(SEND_ERROR "Can't build RemoteVstPlugin32, unknown environment. Please supply CMAKE_TOOLCHAIN_FILE_32 and optionally CMAKE_PREFIX_PATH_32")
|
||||
ENDIF()
|
||||
|
||||
INCLUDE("${CMAKE_CURRENT_LIST_DIR}/RemoteVstPlugin32.cmake")
|
||||
# build 64 bit version of RemoteVstPlugin
|
||||
IF(LMMS_BUILD_WIN64)
|
||||
ADD_SUBDIRECTORY(RemoteVstPlugin)
|
||||
INSTALL(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/../RemoteVstPlugin64.exe" DESTINATION "${PLUGIN_DIR}")
|
||||
ELSEIF(LMMS_BUILD_LINUX)
|
||||
ExternalProject_Add(RemoteVstPlugin64
|
||||
"${EXTERNALPROJECT_ARGS}"
|
||||
CMAKE_ARGS
|
||||
"${EXTERNALPROJECT_CMAKE_ARGS}"
|
||||
"-DCMAKE_CXX_COMPILER=${WINEGCC}"
|
||||
"-DCMAKE_CXX_FLAGS=-m64 -mwindows"
|
||||
)
|
||||
ENDIF()
|
||||
|
||||
IF(TARGET RemoteVstPlugin32)
|
||||
IF(LMMS_BUILD_LINUX)
|
||||
INSTALL(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/../RemoteVstPlugin32" "${CMAKE_CURRENT_BINARY_DIR}/../RemoteVstPlugin32.exe.so" DESTINATION "${PLUGIN_DIR}")
|
||||
ELSEIF(LMMS_BUILD_WIN32)
|
||||
INSTALL(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/../RemoteVstPlugin32.exe" DESTINATION "${PLUGIN_DIR}")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
INCLUDE("${CMAKE_CURRENT_LIST_DIR}/RemoteVstPlugin64.cmake")
|
||||
|
||||
67
plugins/vst_base/RemoteVstPlugin32.cmake
Normal file
67
plugins/vst_base/RemoteVstPlugin32.cmake
Normal file
@@ -0,0 +1,67 @@
|
||||
IF(LMMS_BUILD_WIN32 AND NOT LMMS_BUILD_WIN64)
|
||||
ADD_SUBDIRECTORY(RemoteVstPlugin)
|
||||
ELSEIF(LMMS_BUILD_WIN64 AND MSVC)
|
||||
SET(MSVC_VER ${CMAKE_CXX_COMPILER_VERSION})
|
||||
|
||||
IF(NOT CMAKE_GENERATOR_32)
|
||||
IF(MSVC_VER VERSION_GREATER 19.0 OR MSVC_VER VERSION_EQUAL 19.0)
|
||||
SET(CMAKE_GENERATOR_32 "Visual Studio 14 2015")
|
||||
SET(MSVC_YEAR 2015)
|
||||
ELSEIF(MSVC_VER VERSION_EQUAL 19.10 OR MSVC_VER VERSION_EQUAL 19.10)
|
||||
SET(CMAKE_GENERATOR_32 "Visual Studio 15 2017")
|
||||
SET(MSVC_YEAR 2017)
|
||||
ELSE()
|
||||
MESSAGE(SEND_WARNING "Can't build RemoteVstPlugin32, unknown MSVC version ${MSVC_VER} and no CMAKE_GENERATOR_32 set")
|
||||
RETURN()
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
IF(NOT QT_32_PREFIX AND NOT USING_VCPKG)
|
||||
GET_FILENAME_COMPONENT(QT_BIN_DIR ${QT_QMAKE_EXECUTABLE} DIRECTORY)
|
||||
SET(QT_32_PREFIX "${QT_BIN_DIR}/../../msvc${MSVC_YEAR}")
|
||||
ENDIF()
|
||||
|
||||
IF(NOT QT_32_PREFIX)
|
||||
MESSAGE(WARNING "Can't build RemoteVstPlugin32, QT_32_PREFIX not set")
|
||||
RETURN()
|
||||
ELSEIF(NOT (IS_DIRECTORY ${QT_32_PREFIX} AND EXISTS ${QT_32_PREFIX}/bin/qmake.exe))
|
||||
MESSAGE(WARNING "Can't build RemoteVstPlugin32, no Qt 32 bit installation found at ${QT_32_PREFIX}")
|
||||
RETURN()
|
||||
ENDIF()
|
||||
|
||||
ExternalProject_Add(RemoteVstPlugin32
|
||||
"${EXTERNALPROJECT_ARGS}"
|
||||
CMAKE_GENERATOR "${CMAKE_GENERATOR_32}"
|
||||
#CMAKE_GENERATOR_TOOLSET "${CMAKE_GENERATOR_TOOLSET}"
|
||||
CMAKE_ARGS
|
||||
"${EXTERNALPROJECT_CMAKE_ARGS}"
|
||||
"-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}"
|
||||
"-DCMAKE_PREFIX_PATH=${QT_32_PREFIX}"
|
||||
)
|
||||
ELSEIF(LMMS_BUILD_LINUX)
|
||||
# Use winegcc
|
||||
ExternalProject_Add(RemoteVstPlugin32
|
||||
"${EXTERNALPROJECT_ARGS}"
|
||||
CMAKE_ARGS
|
||||
"${EXTERNALPROJECT_CMAKE_ARGS}"
|
||||
"-DCMAKE_CXX_COMPILER=${WINEGCC}"
|
||||
"-DCMAKE_CXX_FLAGS=-m32 -mwindows"
|
||||
)
|
||||
ELSEIF(CMAKE_TOOLCHAIN_FILE_32)
|
||||
ExternalProject_Add(RemoteVstPlugin32
|
||||
"${EXTERNALPROJECT_ARGS}"
|
||||
CMAKE_ARGS
|
||||
"${EXTERNALPROJECT_CMAKE_ARGS}"
|
||||
"-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH_32}"
|
||||
"-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE_32}"
|
||||
)
|
||||
ELSE()
|
||||
message(WARNING "Can't build RemoteVstPlugin32, unknown environment. Please supply CMAKE_TOOLCHAIN_FILE_32 and optionally CMAKE_PREFIX_PATH_32")
|
||||
RETURN()
|
||||
ENDIF()
|
||||
|
||||
IF(LMMS_BUILD_LINUX)
|
||||
INSTALL(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/../RemoteVstPlugin32" "${CMAKE_CURRENT_BINARY_DIR}/../RemoteVstPlugin32.exe.so" DESTINATION "${PLUGIN_DIR}")
|
||||
ELSEIF(LMMS_BUILD_WIN32)
|
||||
INSTALL(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/../RemoteVstPlugin32.exe" DESTINATION "${PLUGIN_DIR}")
|
||||
ENDIF()
|
||||
13
plugins/vst_base/RemoteVstPlugin64.cmake
Normal file
13
plugins/vst_base/RemoteVstPlugin64.cmake
Normal file
@@ -0,0 +1,13 @@
|
||||
IF(LMMS_BUILD_WIN64)
|
||||
ADD_SUBDIRECTORY(RemoteVstPlugin)
|
||||
INSTALL(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/../RemoteVstPlugin64.exe" DESTINATION "${PLUGIN_DIR}")
|
||||
ELSEIF(LMMS_BUILD_LINUX)
|
||||
ExternalProject_Add(RemoteVstPlugin64
|
||||
"${EXTERNALPROJECT_ARGS}"
|
||||
CMAKE_ARGS
|
||||
"${EXTERNALPROJECT_CMAKE_ARGS}"
|
||||
"-DCMAKE_CXX_COMPILER=${WINEGCC}"
|
||||
"-DCMAKE_CXX_FLAGS=-m64 -mwindows"
|
||||
)
|
||||
INSTALL(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/../RemoteVstPlugin64" "${CMAKE_CURRENT_BINARY_DIR}/../RemoteVstPlugin64.exe.so" DESTINATION "${PLUGIN_DIR}")
|
||||
ENDIF()
|
||||
@@ -74,11 +74,11 @@ namespace PE
|
||||
// Utilities for reading PE file machine type
|
||||
// See specification at https://msdn.microsoft.com/library/windows/desktop/ms680547(v=vs.85).aspx
|
||||
|
||||
enum MachineType : uint16_t
|
||||
enum class MachineType : uint16_t
|
||||
{
|
||||
IMAGE_FILE_MACHINE_UNKNOWN = 0x0,
|
||||
IMAGE_FILE_MACHINE_AMD64 = 0x8664,
|
||||
IMAGE_FILE_MACHINE_I386 = 0x14c,
|
||||
unknown = 0x0,
|
||||
amd64 = 0x8664,
|
||||
i386 = 0x14c,
|
||||
};
|
||||
|
||||
class FileInfo
|
||||
@@ -135,15 +135,15 @@ VstPlugin::VstPlugin( const QString & _plugin ) :
|
||||
machineType = peInfo.machineType();
|
||||
} catch (std::runtime_error& e) {
|
||||
qCritical() << "Error while determining PE file's machine type: " << e.what();
|
||||
machineType = PE::IMAGE_FILE_MACHINE_UNKNOWN;
|
||||
machineType = PE::MachineType::unknown;
|
||||
}
|
||||
|
||||
switch(machineType)
|
||||
{
|
||||
case PE::IMAGE_FILE_MACHINE_AMD64:
|
||||
case PE::MachineType::amd64:
|
||||
tryLoad( "RemoteVstPlugin64" );
|
||||
break;
|
||||
case PE::IMAGE_FILE_MACHINE_I386:
|
||||
case PE::MachineType::i386:
|
||||
tryLoad( "RemoteVstPlugin32" );
|
||||
break;
|
||||
default:
|
||||
|
||||
Reference in New Issue
Block a user