Improved support for MinGW cross compile builds
Cross compile support for Win32 and Win64 has been unified, simplified and adapted to the new MinGW64-based build environment. This finally allows to produce working Win64 binaries.
This commit is contained in:
@@ -42,11 +42,6 @@ ENDIF(VERSION_SUFFIX)
|
||||
|
||||
INCLUDE(DetectMachine)
|
||||
|
||||
IF(LMMS_HOST_X86_64)
|
||||
SET(STRIP /opt/mingw64/bin/x86_64-pc-mingw32-strip)
|
||||
ELSE(LMMS_HOST_X86_64)
|
||||
SET(STRIP /opt/mingw32/bin/i586-pc-mingw32-strip)
|
||||
ENDIF(LMMS_HOST_X86_64)
|
||||
|
||||
OPTION(WANT_ALSA "Include ALSA (Advanced Linux Sound Architecture) support" ON)
|
||||
OPTION(WANT_CALF "Include CALF LADSPA plugins" ON)
|
||||
@@ -513,11 +508,6 @@ ENDIF(LMMS_HOST_X86 OR LMMS_HOST_X86_64)
|
||||
|
||||
IF(WIN32)
|
||||
SET(WINRC "${CMAKE_BINARY_DIR}/lmmsrc.obj")
|
||||
IF(LMMS_HOST_X86_64)
|
||||
SET(WINDRES /opt/mingw64/bin/x86_64-pc-mingw32-windres)
|
||||
ELSE(LMMS_HOST_X86_64)
|
||||
SET(WINDRES /opt/mingw32/bin/i586-pc-mingw32-windres)
|
||||
ENDIF(LMMS_HOST_X86_64)
|
||||
ADD_CUSTOM_COMMAND(OUTPUT ${WINRC}
|
||||
COMMAND ${WINDRES}
|
||||
-I${CMAKE_SOURCE_DIR}
|
||||
@@ -555,11 +545,22 @@ IF(LMMS_BUILD_WIN32)
|
||||
ADD_CUSTOM_COMMAND(TARGET lmms POST_BUILD COMMAND ${STRIP} ${CMAKE_BINARY_DIR}/lmms.exe)
|
||||
|
||||
INSTALL(TARGETS lmms RUNTIME DESTINATION .)
|
||||
IF(LMMS_BUILD_WIN64)
|
||||
INSTALL(FILES /opt/mingw64/bin/QtCore4.dll /opt/mingw64/bin/QtGui4.dll /opt/mingw64/bin/QtXml4.dll /opt/mingw64/bin/QtNetwork4.dll /opt/mingw64/bin/libsndfile-1.dll /opt/mingw64/bin/libvorbis-0.dll /opt/mingw64/bin/libvorbisenc-2.dll /opt/mingw64/bin/libvorbisfile-3.dll /opt/mingw64/bin/libogg-0.dll /opt/mingw64/bin/libfluidsynth-1.dll /opt/mingw64/bin/libfftw3f-3.dll /opt/mingw64/bin/SDL.dll DESTINATION .)
|
||||
ELSE(LMMS_BUILD_WIN64)
|
||||
INSTALL(FILES /opt/mingw32/bin/QtCore4.dll /opt/mingw32/bin/QtGui4.dll /opt/mingw32/bin/QtXml4.dll /opt/mingw32/bin/QtNetwork4.dll /opt/mingw32/bin/libz.dll /opt/mingw32/bin/libsndfile-1.dll /opt/mingw32/bin/libvorbis-0.dll /opt/mingw32/bin/libvorbisenc-2.dll /opt/mingw32/bin/libvorbisfile-3.dll /opt/mingw32/bin/libogg-0.dll /opt/mingw32/bin/libfluidsynth-1.dll /opt/mingw32/bin/libfftw3f-3.dll /opt/mingw32/bin/SDL.dll /opt/mingw32/i586-mingw32/bin/mingwm10.dll DESTINATION .)
|
||||
ENDIF(LMMS_BUILD_WIN64)
|
||||
INSTALL(FILES
|
||||
${MINGW_PREFIX}/bin/QtCore4.dll
|
||||
${MINGW_PREFIX}/bin/QtGui4.dll
|
||||
${MINGW_PREFIX}/bin/QtXml4.dll
|
||||
${MINGW_PREFIX}/bin/QtNetwork4.dll
|
||||
${MINGW_PREFIX}/bin/libsndfile-1.dll
|
||||
${MINGW_PREFIX}/bin/libvorbis-0.dll
|
||||
${MINGW_PREFIX}/bin/libvorbisenc-2.dll
|
||||
${MINGW_PREFIX}/bin/libvorbisfile-3.dll
|
||||
${MINGW_PREFIX}/bin/libogg-0.dll
|
||||
${MINGW_PREFIX}/bin/libfluidsynth-1.dll
|
||||
${MINGW_PREFIX}/bin/libfftw3f-3.dll
|
||||
${MINGW_PREFIX}/bin/SDL.dll
|
||||
${MINGW_PREFIX}/bin/libglib-2.0-0.dll
|
||||
${MINGW_PREFIX}/bin/libgthread-2.0-0.dll
|
||||
DESTINATION .)
|
||||
|
||||
ELSE(LMMS_BUILD_WIN32)
|
||||
IF(NOT LMMS_BUILD_APPLE)
|
||||
@@ -665,7 +666,7 @@ ADD_CUSTOM_TARGET(win32-pkg
|
||||
COMMAND cp /opt/mingw32/i586-pc-mingw32/bin/mingwm10.dll tmp/lmms
|
||||
COMMAND cp -L ${CMAKE_SOURCE_DIR}/COPYING tmp/lmms/LICENSE.TXT
|
||||
COMMAND cp -L ${CMAKE_SOURCE_DIR}/README tmp/lmms/README.TXT
|
||||
COMMAND /opt/mingw32/bin/i586-pc-mingw32-strip tmp/lmms/lmms.exe tmp/lmms/plugins/*.dll tmp/lmms/plugins/ladspa/*.dll
|
||||
COMMAND ${STRIP} tmp/lmms/lmms.exe tmp/lmms/plugins/*.dll tmp/lmms/plugins/ladspa/*.dll
|
||||
COMMAND mv tmp/lmms tmp/lmms-${VERSION}
|
||||
COMMAND cd tmp && zip -r -9 ../lmms-${VERSION}-bin-win32.zip lmms-${VERSION}/*
|
||||
COMMAND rm -rf tmp
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
MINGW=/opt/mingw32
|
||||
export PATH=$PATH:$MINGW/bin
|
||||
cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/modules/Win32Toolchain.cmake
|
||||
cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/modules/Win32Toolchain.cmake -DCMAKE_MODULE_PATH=`pwd`/../cmake/modules/
|
||||
|
||||
|
||||
4
build_mingw64
Executable file
4
build_mingw64
Executable file
@@ -0,0 +1,4 @@
|
||||
MINGW=/opt/mingw64
|
||||
export PATH=$PATH:$MINGW/bin
|
||||
cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/modules/Win64Toolchain.cmake -DCMAKE_MODULE_PATH=`pwd`/../cmake/modules/
|
||||
|
||||
@@ -9,21 +9,29 @@ ELSE(WIN32)
|
||||
ENDIF(WIN32)
|
||||
|
||||
MESSAGE("PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}")
|
||||
EXEC_PROGRAM( ${CMAKE_C_COMPILER} ARGS "-dumpmachine" OUTPUT_VARIABLE Machine )
|
||||
MESSAGE("Machine: ${Machine}")
|
||||
SET(LMMS_HOST_X86 FALSE)
|
||||
SET(LMMS_HOST_X86_64 FALSE)
|
||||
STRING(REGEX MATCH "i.86" IS_X86 "${Machine}")
|
||||
STRING(REGEX MATCH "86_64" IS_X86_64 "${Machine}")
|
||||
|
||||
IF(WIN32)
|
||||
IF(WIN64)
|
||||
SET(IS_X86_64 TRUE)
|
||||
SET(LMMS_BUILD_WIN64 TRUE)
|
||||
ELSE(WIN64)
|
||||
SET(IS_X86 TRUE)
|
||||
ENDIF(WIN64)
|
||||
ELSE(WIN32)
|
||||
EXEC_PROGRAM( ${CMAKE_C_COMPILER} ARGS "-dumpmachine" OUTPUT_VARIABLE Machine )
|
||||
MESSAGE("Machine: ${Machine}")
|
||||
STRING(REGEX MATCH "i.86" IS_X86 "${Machine}")
|
||||
STRING(REGEX MATCH "86_64" IS_X86_64 "${Machine}")
|
||||
ENDIF(WIN32)
|
||||
|
||||
IF(IS_X86)
|
||||
MESSAGE("-- Target host is 32 bit")
|
||||
SET(LMMS_HOST_X86 TRUE)
|
||||
ELSEIF(IS_X86_64)
|
||||
MESSAGE("-- Target host is 64 bit")
|
||||
SET(LMMS_HOST_X86_64 TRUE)
|
||||
IF(WIN32)
|
||||
SET(LMMS_BUILD_WIN64 1)
|
||||
ENDIF(WIN32)
|
||||
ELSE(IS_X86)
|
||||
MESSAGE("Can't identify target host. Assuming 32 bit platform.")
|
||||
ENDIF(IS_X86)
|
||||
|
||||
41
cmake/modules/MinGWCrossCompile.cmake
Normal file
41
cmake/modules/MinGWCrossCompile.cmake
Normal file
@@ -0,0 +1,41 @@
|
||||
# this one is important
|
||||
SET(CMAKE_SYSTEM_NAME Windows)
|
||||
#this one not so much
|
||||
SET(CMAKE_SYSTEM_VERSION 1)
|
||||
|
||||
# where is the target environment
|
||||
SET(CMAKE_FIND_ROOT_PATH ${MINGW_PREFIX})
|
||||
SET(CMAKE_INSTALL_PREFIX ${MINGW_PREFIX})
|
||||
|
||||
SET(MINGW_TOOL_PREFIX ${MINGW_PREFIX}/bin/${CMAKE_SYSTEM_PROCESSOR}-w64-mingw32-)
|
||||
|
||||
# specify the cross compiler
|
||||
SET(CMAKE_C_COMPILER ${MINGW_TOOL_PREFIX}gcc)
|
||||
SET(CMAKE_CXX_COMPILER ${MINGW_TOOL_PREFIX}g++)
|
||||
|
||||
# specify location of some tools
|
||||
SET(STRIP ${MINGW_TOOL_PREFIX}strip)
|
||||
SET(WINDRES ${MINGW_TOOL_PREFIX}windres)
|
||||
SET(PKG_CONFIG_EXECUTABLE ${MINGW_TOOL_PREFIX}pkg-config)
|
||||
|
||||
SET(QT_BINARY_DIR ${MINGW_PREFIX}/bin)
|
||||
SET(QT_LIBRARY_DIR ${MINGW_PREFIX}/lib)
|
||||
SET(QT_QTCORE_LIBRARY ${MINGW_PREFIX}/lib/libQtCore4.a)
|
||||
SET(QT_INCLUDE_DIR ${MINGW_PREFIX}/include/qt4)
|
||||
SET(QT_HEADERS_DIR ${MINGW_PREFIX}/include/qt4)
|
||||
SET(QT_QTCORE_INCLUDE_DIR ${MINGW_PREFIX}/include/qt4/QtCore)
|
||||
SET(QT_MKSPECS_DIR ${MINGW_PREFIX}/share/qt4/mkspecs)
|
||||
SET(QT_MOC_EXECUTABLE ${QT_BINARY_DIR}/moc.exe)
|
||||
SET(QT_RCC_EXECUTABLE ${QT_BINARY_DIR}/rcc.exe)
|
||||
SET(QT_QMAKE_EXECUTABLE /usr/bin/qmake)
|
||||
SET(QT_UIC_EXECUTABLE ${QT_BINARY_DIR}/uic.exe)
|
||||
|
||||
# search for programs in the build host directories
|
||||
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||
# for libraries and headers in the target directories
|
||||
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||
|
||||
INCLUDE_DIRECTORIES(${MINGW_PREFIX}/include)
|
||||
LINK_DIRECTORIES(${MINGW_PREFIX}/lib ${MINGW_PREFIX}/bin)
|
||||
|
||||
@@ -1,44 +1,10 @@
|
||||
SET(MINGW_PREFIX /opt/mingw32)
|
||||
|
||||
# this one is important
|
||||
SET(CMAKE_SYSTEM_NAME Windows)
|
||||
#this one not so much
|
||||
SET(CMAKE_SYSTEM_VERSION 1)
|
||||
|
||||
SET(CMAKE_SYSTEM_PROCESSOR i686)
|
||||
SET(CMAKE_INSTALL_PREFIX ${MINGW_PREFIX})
|
||||
|
||||
|
||||
# specify the cross compiler
|
||||
SET(CMAKE_C_COMPILER ${MINGW_PREFIX}/bin/i586-pc-mingw32-gcc)
|
||||
SET(CMAKE_CXX_COMPILER ${MINGW_PREFIX}/bin/i586-pc-mingw32-g++)
|
||||
|
||||
# where is the target environment
|
||||
SET(CMAKE_FIND_ROOT_PATH /opt/mingw32)
|
||||
|
||||
SET(QT_BINARY_DIR ${MINGW_PREFIX}/bin)
|
||||
SET(QT_LIBRARY_DIR ${MINGW_PREFIX}/lib)
|
||||
SET(QT_QTCORE_LIBRARY ${MINGW_PREFIX}/lib/libQtCore4.a)
|
||||
SET(QT_INCLUDE_DIR ${MINGW_PREFIX}/include/qt4)
|
||||
SET(QT_HEADERS_DIR ${MINGW_PREFIX}/include/qt4)
|
||||
SET(QT_QTCORE_INCLUDE_DIR ${MINGW_PREFIX}/include/qt4/QtCore)
|
||||
SET(QT_MKSPECS_DIR ${MINGW_PREFIX}/share/qt4/mkspecs)
|
||||
SET(QT_MOC_EXECUTABLE ${QT_BINARY_DIR}/moc.exe)
|
||||
SET(QT_RCC_EXECUTABLE ${QT_BINARY_DIR}/rcc.exe)
|
||||
SET(QT_QMAKE_EXECUTABLE /usr/bin/qmake)
|
||||
SET(QT_UIC_EXECUTABLE ${QT_BINARY_DIR}/uic.exe)
|
||||
|
||||
# search for programs in the build host directories
|
||||
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||
# for libraries and headers in the target directories
|
||||
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||
|
||||
SET(PKG_CONFIG_EXECUTABLE ${MINGW_PREFIX}/bin/pkg-config)
|
||||
|
||||
SET(CMAKE_C_FLAGS "-march=i686 -mtune=generic")
|
||||
SET(CMAKE_CXX_FLAGS ${CMAKE_C_FLAGS})
|
||||
|
||||
INCLUDE_DIRECTORIES(${MINGW_PREFIX}/include)
|
||||
LINK_DIRECTORIES(${MINGW_PREFIX}/lib ${MINGW_PREFIX}/bin)
|
||||
|
||||
INCLUDE(MinGWCrossCompile)
|
||||
|
||||
|
||||
@@ -1,39 +1,9 @@
|
||||
# this one is important
|
||||
SET(CMAKE_SYSTEM_NAME Windows)
|
||||
#this one not so much
|
||||
SET(CMAKE_SYSTEM_VERSION 1)
|
||||
SET(MINGW_PREFIX /opt/mingw64)
|
||||
|
||||
SET(CMAKE_SYSTEM_PROCESSOR x86_64)
|
||||
SET(CMAKE_INSTALL_PREFIX /opt/mingw64)
|
||||
|
||||
SET(CC_PREFIX /opt/mingw64)
|
||||
SET(WIN64 TRUE)
|
||||
|
||||
# specify the cross compiler
|
||||
SET(CMAKE_C_COMPILER ${CC_PREFIX}/bin/x86_64-pc-mingw32-gcc)
|
||||
SET(CMAKE_CXX_COMPILER ${CC_PREFIX}/bin/x86_64-pc-mingw32-g++)
|
||||
|
||||
# where is the target environment
|
||||
SET(CMAKE_FIND_ROOT_PATH /opt/mingw64)
|
||||
|
||||
SET(QT_BINARY_DIR ${CC_PREFIX}/bin)
|
||||
SET(QT_LIBRARY_DIR ${CC_PREFIX}/lib)
|
||||
SET(QT_QTCORE_LIBRARY ${CC_PREFIX}/lib/libQtCore4.a)
|
||||
SET(QT_INCLUDE_DIR ${CC_PREFIX}/include/qt4)
|
||||
SET(QT_QTCORE_INCLUDE_DIR ${CC_PREFIX}/include/qt4/QtCore)
|
||||
SET(QT_MKSPECS_DIR ${CC_PREFIX}/share/qt4/mkspecs)
|
||||
SET(QT_MOC_EXECUTABLE ${QT_BINARY_DIR}/moc.exe)
|
||||
SET(QT_RCC_EXECUTABLE ${QT_BINARY_DIR}/rcc.exe)
|
||||
SET(QT_QMAKE_EXECUTABLE /usr/bin/qmake)
|
||||
SET(QT_UIC_EXECUTABLE ${QT_BINARY_DIR}/uic.exe)
|
||||
|
||||
# search for programs in the build host directories
|
||||
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||
# for libraries and headers in the target directories
|
||||
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||
|
||||
SET(PKG_CONFIG_EXECUTABLE ${CC_PREFIX}/bin/pkg-config)
|
||||
|
||||
INCLUDE_DIRECTORIES(${CC_PREFIX}/include)
|
||||
LINK_DIRECTORIES(${CC_PREFIX}/lib ${CC_PREFIX}/bin)
|
||||
INCLUDE(MinGWCrossCompile)
|
||||
|
||||
|
||||
@@ -92,7 +92,7 @@ add_subdirectory(src/Samples)
|
||||
ADD_LIBRARY(ZynAddSubFxCore SHARED LocalZynAddSubFx.cpp ${MXML_SRC})
|
||||
TARGET_LINK_LIBRARIES(ZynAddSubFxCore ${ZASF_CORE_LIBS} ${FFTW3F_LIBRARIES} -lz -lpthread)
|
||||
IF(LMMS_BUILD_WIN32)
|
||||
TARGET_LINK_LIBRARIES(ZynAddSubFxCore -lwsock32)
|
||||
TARGET_LINK_LIBRARIES(ZynAddSubFxCore -lws2_32)
|
||||
INSTALL(TARGETS ZynAddSubFxCore DESTINATION ${PLUGIN_DIR})
|
||||
ELSE(LMMS_BUILD_WIN32)
|
||||
INSTALL(TARGETS ZynAddSubFxCore LIBRARY DESTINATION ${PLUGIN_DIR})
|
||||
@@ -132,7 +132,7 @@ IF(LMMS_BUILD_WIN64)
|
||||
ELSEIF(LMMS_BUILD_WIN32)
|
||||
SET(FLTK_EXTRA_FLAGS "-DCMAKE_TOOLCHAIN_FILE=${CMAKE_SOURCE_DIR}/cmake/modules/Win32Toolchain.cmake")
|
||||
ENDIF(LMMS_BUILD_WIN64)
|
||||
ADD_CUSTOM_TARGET(libfltk COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/fltk && cd ${CMAKE_CURRENT_BINARY_DIR}/fltk && ${CMAKE_COMMAND} ${CMAKE_CURRENT_SOURCE_DIR}/fltk ${FLTK_EXTRA_FLAGS} -DFLTK_USE_SYSTEM_ZLIB:BOOL=ON -DFLTK_USE_SYSTEM_JPEG:BOOL=ON -DFLTK_USE_SYSTEM_PNG:BOOL=ON -DUSE_OPENGL:BOOL=OFF -DBUILD_TESTING:BOOL=OFF -DCMAKE_BUILD_TYPE=release && ${CMAKE_BUILD_TOOL})
|
||||
ADD_CUSTOM_TARGET(libfltk COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/fltk && cd ${CMAKE_CURRENT_BINARY_DIR}/fltk && ${CMAKE_COMMAND} ${CMAKE_CURRENT_SOURCE_DIR}/fltk ${FLTK_EXTRA_FLAGS} -DCMAKE_MODULE_PATH=${CMAKE_SOURCE_DIR}/cmake/modules/ -DFLTK_USE_SYSTEM_ZLIB:BOOL=ON -DFLTK_USE_SYSTEM_JPEG:BOOL=ON -DFLTK_USE_SYSTEM_PNG:BOOL=ON -DUSE_OPENGL:BOOL=OFF -DBUILD_TESTING:BOOL=OFF -DCMAKE_BUILD_TYPE=release && ${CMAKE_BUILD_TOOL})
|
||||
|
||||
ADD_DEPENDENCIES(RemoteZynAddSubFx libfltk)
|
||||
ENDIF(LMMS_HAVE_FFTW3F)
|
||||
|
||||
@@ -241,7 +241,7 @@ struct FL_EXPORT Fl_Menu_Item {
|
||||
and casting the long to a void* and may not be
|
||||
portable to some machines.
|
||||
*/
|
||||
long argument() const {return (long)user_data_;}
|
||||
intptr_t argument() const {return (intptr_t)user_data_;}
|
||||
/**
|
||||
For convenience you can also define the callback as taking a long
|
||||
argument. This is implemented by casting this to a Fl_Callback
|
||||
|
||||
@@ -31,6 +31,8 @@
|
||||
#ifndef Fl_Widget_H
|
||||
#define Fl_Widget_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "Enumerations.H"
|
||||
|
||||
class Fl_Widget;
|
||||
@@ -592,7 +594,7 @@ public:
|
||||
|
||||
/** Gets the current user data (long) argument that is passed to the callback function.
|
||||
*/
|
||||
long argument() const {return (long)user_data_;}
|
||||
intptr_t argument() const {return (intptr_t)user_data_;}
|
||||
|
||||
/** Sets the current user data (long) argument that is passed to the callback function.
|
||||
\todo The user data value must be implemented using a \em union to avoid
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
#include <sys/types.h>
|
||||
#include "flstring.h"
|
||||
#ifdef WIN32
|
||||
#include <stdint.h>
|
||||
# include <windows.h>
|
||||
# include <shellapi.h>
|
||||
#else
|
||||
@@ -112,7 +113,7 @@ fl_open_uri(const char *uri, char *msg, int msglen) {
|
||||
#ifdef WIN32
|
||||
if (msg) snprintf(msg, msglen, "open %s", uri);
|
||||
|
||||
return (int)ShellExecute(HWND_DESKTOP, "open", uri, NULL, NULL, SW_SHOW) > 32;
|
||||
return (intptr_t)ShellExecute(HWND_DESKTOP, "open", uri, NULL, NULL, SW_SHOW) > 32;
|
||||
|
||||
#elif defined(__APPLE__)
|
||||
char *argv[3]; // Command-line arguments
|
||||
|
||||
@@ -37,6 +37,9 @@
|
||||
#define PREFETCH_READ(x) PREFETCH_RW(x,0)
|
||||
#define PREFETCH_WRITE(x) PREFETCH_RW(x,1)
|
||||
|
||||
/* workaround for conflicting declarations in GCC and MinGW headers */
|
||||
#define _aligned_malloc __aligned_malloc
|
||||
#define _aligned_free __aligned_free
|
||||
|
||||
#ifdef X86_OPTIMIZATIONS
|
||||
|
||||
|
||||
Reference in New Issue
Block a user