From 4ff993e2a44974201e3ff1f26071e883ab826aa0 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Sat, 28 Apr 2018 11:00:08 +0200 Subject: [PATCH] Update CircleCI to Ubuntu 18.04 --- .circleci/config.yml | 22 +++-- .travis/linux.win32.script.sh | 2 +- .travis/linux.win64.script.sh | 2 +- cmake/build_mingw32.sh | 19 ---- cmake/build_mingw64.sh | 17 ---- cmake/build_win32.sh | 40 ++++++++ cmake/build_win64.sh | 3 + cmake/modules/DetectMachine.cmake | 2 +- cmake/modules/FindWine.cmake | 8 +- cmake/modules/MinGWCrossCompile.cmake | 98 ------------------- cmake/modules/Win32Toolchain.cmake | 10 -- cmake/modules/Win64Toolchain.cmake | 16 --- cmake/toolchains/MSYS-32.cmake | 2 + cmake/toolchains/MSYS-64.cmake | 6 ++ cmake/toolchains/Ubuntu-MinGW-W64-32.cmake | 2 + cmake/toolchains/Ubuntu-MinGW-W64-64.cmake | 2 + .../toolchains/Ubuntu-MinGW-X-Trusty-32.cmake | 3 + .../toolchains/Ubuntu-MinGW-X-Trusty-64.cmake | 6 ++ cmake/toolchains/common/MSYS.cmake | 34 +++++++ .../toolchains/common/Ubuntu-MinGW-W64.cmake | 17 ++++ .../common/Ubuntu-MinGW-X-Trusty.cmake | 58 +++++++++++ cmake/toolchains/common/Win32.cmake | 4 + cmake/toolchains/common/Win64.cmake | 7 ++ cmake/toolchains/common/WinCrossCompile.cmake | 9 ++ plugins/zynaddsubfx/CMakeLists.txt | 4 +- src/CMakeLists.txt | 2 +- src/core/MixerWorkerThread.cpp | 4 +- 27 files changed, 219 insertions(+), 180 deletions(-) delete mode 100755 cmake/build_mingw32.sh delete mode 100755 cmake/build_mingw64.sh create mode 100755 cmake/build_win32.sh create mode 100755 cmake/build_win64.sh delete mode 100644 cmake/modules/MinGWCrossCompile.cmake delete mode 100644 cmake/modules/Win32Toolchain.cmake delete mode 100644 cmake/modules/Win64Toolchain.cmake create mode 100644 cmake/toolchains/MSYS-32.cmake create mode 100644 cmake/toolchains/MSYS-64.cmake create mode 100644 cmake/toolchains/Ubuntu-MinGW-W64-32.cmake create mode 100644 cmake/toolchains/Ubuntu-MinGW-W64-64.cmake create mode 100644 cmake/toolchains/Ubuntu-MinGW-X-Trusty-32.cmake create mode 100644 cmake/toolchains/Ubuntu-MinGW-X-Trusty-64.cmake create mode 100644 cmake/toolchains/common/MSYS.cmake create mode 100644 cmake/toolchains/common/Ubuntu-MinGW-W64.cmake create mode 100644 cmake/toolchains/common/Ubuntu-MinGW-X-Trusty.cmake create mode 100644 cmake/toolchains/common/Win32.cmake create mode 100644 cmake/toolchains/common/Win64.cmake create mode 100644 cmake/toolchains/common/WinCrossCompile.cmake diff --git a/.circleci/config.yml b/.circleci/config.yml index c2d4a190e..4b370aed9 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -32,16 +32,17 @@ shared: # Commmon environment variables common_environment: &common_environment QT5: True - CMAKE_OPTS: -DWANT_QT5=ON -DUSE_WERROR=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo -DUSE_CCACHE=ON + CMAKE_OPTS: -DUSE_WERROR=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo -DUSE_CCACHE=ON CCACHE_MAXSIZE: 500M CCACHE_LOGFILE: /tmp/artifacts/ccache.log + MAKEFLAGS: -j6 jobs: mingw32: environment: <<: *common_environment docker: - - image: lmmsci/linux.mingw32:14.04 + - image: lmmsci/linux.mingw32:18.04 steps: - checkout - *init @@ -50,15 +51,16 @@ jobs: name: Building command: | mkdir build && cd build - ../cmake/build_mingw32.sh - make -j6 + ../cmake/build_win32.sh + make lmms + make - *ccache_stats - *save_cache mingw64: environment: <<: *common_environment docker: - - image: lmmsci/linux.mingw64:14.04 + - image: lmmsci/linux.mingw64:18.04 steps: - checkout - *init @@ -67,13 +69,13 @@ jobs: name: Building command: | mkdir build && cd build - ../cmake/build_mingw64.sh - make -j6 + ../cmake/build_win64.sh + make - *ccache_stats - *save_cache linux.gcc: docker: - - image: lmmsci/linux.gcc:14.04 + - image: lmmsci/linux.gcc:18.04 environment: <<: *common_environment steps: @@ -85,7 +87,7 @@ jobs: command: mkdir build && cd build && cmake .. $CMAKE_OPTS -DCMAKE_INSTALL_PREFIX=./install - run: name: Build - command: cd build && make -j6 + command: cd build && make - run: name: Build tests command: cd build && make tests @@ -122,4 +124,4 @@ workflows: - mingw32 - mingw64 - linux.gcc - - shellcheck \ No newline at end of file + - shellcheck diff --git a/.travis/linux.win32.script.sh b/.travis/linux.win32.script.sh index 2ee9342c0..d89cf1b75 100755 --- a/.travis/linux.win32.script.sh +++ b/.travis/linux.win32.script.sh @@ -3,4 +3,4 @@ set -e export CMAKE_OPTS="$CMAKE_FLAGS -DUSE_WERROR=ON" -../cmake/build_mingw32.sh +../cmake/build_win32.sh diff --git a/.travis/linux.win64.script.sh b/.travis/linux.win64.script.sh index 1815c7319..931e23d8d 100755 --- a/.travis/linux.win64.script.sh +++ b/.travis/linux.win64.script.sh @@ -3,4 +3,4 @@ set -e export CMAKE_OPTS="$CMAKE_FLAGS -DUSE_WERROR=ON" -../cmake/build_mingw64.sh +../cmake/build_win64.sh diff --git a/cmake/build_mingw32.sh b/cmake/build_mingw32.sh deleted file mode 100755 index 3c784017d..000000000 --- a/cmake/build_mingw32.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env bash - -# Accomodate both linux windows mingw locations -MINGW=/mingw32 -if [ -z "$MSYSCON" ]; then - MINGW=/opt$MINGW -else - CMAKE_OPTS="$CMAKE_OPTS -DLMMS_BUILD_MSYS=1" -fi - -export PATH=$MINGW/bin:$PATH -export CFLAGS="-march=pentium3 -mtune=generic -mpreferred-stack-boundary=5 -mfpmath=sse" -export CXXFLAGS="$CFLAGS" - -CMAKE_OPTS="-DCMAKE_PREFIX_PATH=$MINGW $CMAKE_OPTS" -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" - -# shellcheck disable=SC2086 -cmake "$DIR/.." -DCMAKE_TOOLCHAIN_FILE="$DIR/../cmake/modules/Win32Toolchain.cmake" -DCMAKE_MODULE_PATH="$DIR/../cmake/modules/" $CMAKE_OPTS diff --git a/cmake/build_mingw64.sh b/cmake/build_mingw64.sh deleted file mode 100755 index 2409c2b98..000000000 --- a/cmake/build_mingw64.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env bash - -# Accomodate both linux windows mingw locations -MINGW=/mingw64 -if [ -z "$MSYSCON" ]; then - MINGW=/opt$MINGW -else - CMAKE_OPTS="$CMAKE_OPTS -DLMMS_BUILD_MSYS=1" -fi - -export PATH=$MINGW/bin:$PATH -CMAKE_OPTS="-DCMAKE_PREFIX_PATH=$MINGW $CMAKE_OPTS" - -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" - -# shellcheck disable=SC2086 -cmake "$DIR/.." -DCMAKE_TOOLCHAIN_FILE="$DIR/../cmake/modules/Win64Toolchain.cmake" -DCMAKE_MODULE_PATH="$DIR/../cmake/modules/" $CMAKE_OPTS diff --git a/cmake/build_win32.sh b/cmake/build_win32.sh new file mode 100755 index 000000000..e647f7c09 --- /dev/null +++ b/cmake/build_win32.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env bash +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +# Accomodate both linux windows mingw locations +if [ -z "$ARCH" ]; then + ARCH=32 +fi + +MINGW=/mingw$ARCH + +if [ -z "$MSYSCON" ]; then + MINGW=/opt$MINGW + + DISTRO=$(lsb_release -si) + DISTRO_VERSION=$(lsb_release -sr) + + if [ "$DISTRO" != "Ubuntu" ]; then + echo "This script only supports Ubuntu" + exit 1 + fi + + if [ "$DISTRO_VERSION" == "14.04" ]; then + TOOLCHAIN="$DIR/toolchains/Ubuntu-MinGW-X-Trusty-$ARCH.cmake" + else + TOOLCHAIN="$DIR/toolchains/Ubuntu-MinGW-W64-$ARCH.cmake" + fi +else + CMAKE_OPTS="$CMAKE_OPTS -DLMMS_BUILD_MSYS=1" +fi + +export PATH=$MINGW/bin:$PATH +export CXXFLAGS="$CFLAGS" +if [ "$ARCH" == "32" ]; then + export CFLAGS="-march=pentium3 -mtune=generic -mpreferred-stack-boundary=5 -mfpmath=sse" +fi + +CMAKE_OPTS="-DCMAKE_PREFIX_PATH=$MINGW $CMAKE_OPTS" + +# shellcheck disable=SC2086 +cmake "$DIR/.." -DCMAKE_TOOLCHAIN_FILE="$TOOLCHAIN" -DCMAKE_MODULE_PATH="$DIR/../cmake/modules/" $CMAKE_OPTS diff --git a/cmake/build_win64.sh b/cmake/build_win64.sh new file mode 100755 index 000000000..8dabe09f8 --- /dev/null +++ b/cmake/build_win64.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +ARCH=64 "$DIR/build_win32.sh" diff --git a/cmake/modules/DetectMachine.cmake b/cmake/modules/DetectMachine.cmake index 850ee8052..14efad76a 100644 --- a/cmake/modules/DetectMachine.cmake +++ b/cmake/modules/DetectMachine.cmake @@ -10,7 +10,7 @@ ELSE() SET(LMMS_BUILD_LINUX 1) ENDIF(WIN32) -# See build_mingwXX.sh for LMMS_BUILD_MSYS +# See build_winXX.sh for LMMS_BUILD_MSYS MESSAGE("PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}") SET(LMMS_HOST_X86 FALSE) diff --git a/cmake/modules/FindWine.cmake b/cmake/modules/FindWine.cmake index e4079d0ea..939961c12 100644 --- a/cmake/modules/FindWine.cmake +++ b/cmake/modules/FindWine.cmake @@ -7,11 +7,13 @@ # WINE_DEFINITIONS - Compiler switches required for using wine # -LIST(APPEND CMAKE_PREFIX_PATH /opt/wine-stable /opt/wine-devel /opt/wine-staging) +LIST(APPEND CMAKE_PREFIX_PATH /opt/wine-stable /opt/wine-devel /opt/wine-staging /usr/lib/wine/) FIND_PATH(WINE_INCLUDE_DIR windows/windows.h PATH_SUFFIXES wine) FIND_LIBRARY(WINE_LIBRARY NAMES wine PATH_SUFFIXES wine i386-linux-gnu/wine) -FIND_PROGRAM(WINE_CXX NAMES wineg++ winegcc winegcc64 winegcc32) +FIND_PROGRAM(WINE_CXX + NAMES wineg++ winegcc winegcc64 winegcc32 winegcc-stable + PATHS /usr/lib/wine) SET(WINE_INCLUDE_DIRS ${WINE_INCLUDE_DIR} ) SET(WINE_LIBRARIES ${WINE_LIBRARY} ) @@ -37,6 +39,6 @@ FOREACH(FLAG ${WINEBUILD_FLAGS}) ENDFOREACH() include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(Wine DEFAULT_MSG WINE_LIBRARIES WINE_INCLUDE_DIRS) +find_package_handle_standard_args(Wine DEFAULT_MSG WINE_CXX WINE_LIBRARIES WINE_INCLUDE_DIRS) mark_as_advanced(WINE_INCLUDE_DIR WINE_LIBRARY) diff --git a/cmake/modules/MinGWCrossCompile.cmake b/cmake/modules/MinGWCrossCompile.cmake deleted file mode 100644 index d6d86d231..000000000 --- a/cmake/modules/MinGWCrossCompile.cmake +++ /dev/null @@ -1,98 +0,0 @@ -# Required by cmake if `uname -s` is inadaquate -SET(CMAKE_SYSTEM_NAME Windows) -SET(CMAKE_SYSTEM_VERSION 1) - -# The target environment -SET(CMAKE_FIND_ROOT_PATH ${MINGW_PREFIX}) -SET(CMAKE_INSTALL_PREFIX ${MINGW_PREFIX}) - -# Windows msys mingw ships with a mostly-suitable preconfigured environment -IF(LMMS_BUILD_MSYS) - SET(STRIP ${MINGW_PREFIX}/bin/strip) - SET(WINDRES ${MINGW_PREFIX}/bin/windres) - SET(CMAKE_RC_COMPILER ${WINDRES}) - SET(CMAKE_C_COMPILER ${MINGW_PREFIX}/bin/gcc) - SET(CMAKE_CXX_COMPILER ${MINGW_PREFIX}/bin/g++) - - # For 32-bit vst support - IF(WIN64) - # Specify the 32-bit cross compiler - SET(CMAKE_C_COMPILER32 ${MINGW_PREFIX32}/bin/gcc) - SET(CMAKE_CXX_COMPILER32 ${MINGW_PREFIX32}/bin/g++) - ENDIF() - - # Msys compiler does not support @CMakeFiles/Include syntax - SET(CMAKE_C_USE_RESPONSE_FILE_FOR_INCLUDES OFF) - SET(CMAKE_CXX_USE_RESPONSE_FILE_FOR_INCLUDES OFF) - - # Variable to assist override Qt debug libraries with release versions - SET(QT_OVERRIDE_LIBRARIES - optimized;${MINGW_PREFIX}/bin/QtGui4.dll; - optimized;${MINGW_PREFIX}/bin/QtCore4.dll; - optimized;${MINGW_PREFIX}/bin/QtXml4.dll; - debug;${MINGW_PREFIX}/bin/QtGui4.dll; - debug;${MINGW_PREFIX}/bin/QtCore4.dll; - debug;${MINGW_PREFIX}/bin/QtXml4.dll; - ) - IF(LMMS_BUILD_MSYS AND CMAKE_BUILD_TYPE STREQUAL "Debug") - # Override Qt debug libraries with release versions - SET(QT_LIBRARIES "${QT_OVERRIDE_LIBRARIES}") - ENDIF() -# Linux mingw requires explicitly defined tools to prevent clash with native system tools -ELSE() - 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++) - SET(CMAKE_RC_COMPILER ${MINGW_TOOL_PREFIX}gcc) - - # Mingw tools - SET(STRIP ${MINGW_TOOL_PREFIX}strip) - SET(WINDRES ${MINGW_TOOL_PREFIX}windres) - SET(PKG_CONFIG_EXECUTABLE ${MINGW_TOOL_PREFIX}pkg-config) - - # 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) - - # For 32-bit vst support - IF(WIN64) - # Specify the 32-bit cross compiler - SET(MINGW_TOOL_PREFIX32 ${MINGW_PREFIX32}/bin/${CMAKE_SYSTEM_PROCESSOR32}-w64-mingw32-) - SET(CMAKE_C_COMPILER32 ${MINGW_TOOL_PREFIX32}gcc) - SET(CMAKE_CXX_COMPILER32 ${MINGW_TOOL_PREFIX32}g++) - ENDIF() - - INCLUDE_DIRECTORIES(${MINGW_PREFIX}/include) -ENDIF() - -LINK_DIRECTORIES(${MINGW_PREFIX}/lib ${MINGW_PREFIX}/bin) - -# Qt tools -SET(QT_BINARY_DIR ${MINGW_PREFIX}/bin) -SET(QT_QMAKE_EXECUTABLE ${QT_BINARY_DIR}/qmake) - -# Echo modified cmake vars to screen for debugging purposes -IF(NOT DEFINED ENV{MINGW_DEBUG_INFO}) - MESSAGE("") - MESSAGE("Custom cmake vars: (blank = system default)") - MESSAGE("-----------------------------------------") - MESSAGE("* CMAKE_C_COMPILER : ${CMAKE_C_COMPILER}") - MESSAGE("* CMAKE_CXX_COMPILER : ${CMAKE_CXX_COMPILER}") - MESSAGE("* CMAKE_RC_COMPILER : ${CMAKE_RC_COMPILER}") - MESSAGE("* WINDRES : ${WINDRES}") - MESSAGE("* PKG_CONFIG_EXECUTABLE : ${PKG_CONFIG_EXECUTABLE}") - MESSAGE("* MINGW_TOOL_PREFIX32 : ${MINGW_TOOL_PREFIX32}") - MESSAGE("* CMAKE_C_COMPILER32 : ${CMAKE_C_COMPILER32}") - MESSAGE("* CMAKE_CXX_COMPILER32 : ${CMAKE_CXX_COMPILER32}") - MESSAGE("* STRIP : ${STRIP}") - MESSAGE("* QT_BINARY_DIR : ${QT_BINARY_DIR}") - MESSAGE("* QT_QMAKE_EXECUTABLE : ${QT_QMAKE_EXECUTABLE}") - MESSAGE("") - # So that the debug info only appears once - SET(ENV{MINGW_DEBUG_INFO} SHOWN) -ENDIF() - diff --git a/cmake/modules/Win32Toolchain.cmake b/cmake/modules/Win32Toolchain.cmake deleted file mode 100644 index 60e8d3a47..000000000 --- a/cmake/modules/Win32Toolchain.cmake +++ /dev/null @@ -1,10 +0,0 @@ -IF(LMMS_BUILD_MSYS) - SET(MINGW_PREFIX /mingw32) -ELSE() - SET(MINGW_PREFIX /opt/mingw32) -ENDIF() - -SET(CMAKE_SYSTEM_PROCESSOR i686) - -INCLUDE(MinGWCrossCompile) - diff --git a/cmake/modules/Win64Toolchain.cmake b/cmake/modules/Win64Toolchain.cmake deleted file mode 100644 index 2b569e7ac..000000000 --- a/cmake/modules/Win64Toolchain.cmake +++ /dev/null @@ -1,16 +0,0 @@ -IF(LMMS_BUILD_MSYS) - SET(MINGW_PREFIX /mingw64) - SET(MINGW_PREFIX32 /mingw32) -ELSE() - SET(MINGW_PREFIX /opt/mingw64) - SET(MINGW_PREFIX32 /opt/mingw32) -ENDIF() - -SET(CMAKE_SYSTEM_PROCESSOR x86_64) -SET(CMAKE_SYSTEM_PROCESSOR32 i686) - -SET(WIN64 TRUE) - - -INCLUDE(MinGWCrossCompile) - diff --git a/cmake/toolchains/MSYS-32.cmake b/cmake/toolchains/MSYS-32.cmake new file mode 100644 index 000000000..d016e3ffd --- /dev/null +++ b/cmake/toolchains/MSYS-32.cmake @@ -0,0 +1,2 @@ +INCLUDE(common/Win32) +SET(LMMS_BUILD_MSYS 1) diff --git a/cmake/toolchains/MSYS-64.cmake b/cmake/toolchains/MSYS-64.cmake new file mode 100644 index 000000000..bce085b2d --- /dev/null +++ b/cmake/toolchains/MSYS-64.cmake @@ -0,0 +1,6 @@ +INCLUDE(MSYS-32) +INCLUDE(Win64) +SET(LMMS_BUILD_MSYS 1) + +SET(MINGW_PREFIX /mingw64) +SET(MINGW_PREFIX32 /mingw32) diff --git a/cmake/toolchains/Ubuntu-MinGW-W64-32.cmake b/cmake/toolchains/Ubuntu-MinGW-W64-32.cmake new file mode 100644 index 000000000..6f7ec6f23 --- /dev/null +++ b/cmake/toolchains/Ubuntu-MinGW-W64-32.cmake @@ -0,0 +1,2 @@ +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/common/Win32.cmake) +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/common/Ubuntu-MinGW-W64.cmake) diff --git a/cmake/toolchains/Ubuntu-MinGW-W64-64.cmake b/cmake/toolchains/Ubuntu-MinGW-W64-64.cmake new file mode 100644 index 000000000..e10ae7311 --- /dev/null +++ b/cmake/toolchains/Ubuntu-MinGW-W64-64.cmake @@ -0,0 +1,2 @@ +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/common/Win64.cmake) +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/common/Ubuntu-MinGW-W64.cmake) diff --git a/cmake/toolchains/Ubuntu-MinGW-X-Trusty-32.cmake b/cmake/toolchains/Ubuntu-MinGW-X-Trusty-32.cmake new file mode 100644 index 000000000..0103d35e7 --- /dev/null +++ b/cmake/toolchains/Ubuntu-MinGW-X-Trusty-32.cmake @@ -0,0 +1,3 @@ +SET(MINGW_PREFIX /opt/mingw32) + +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/common/Ubuntu-MinGW-X-Trusty.cmake) diff --git a/cmake/toolchains/Ubuntu-MinGW-X-Trusty-64.cmake b/cmake/toolchains/Ubuntu-MinGW-X-Trusty-64.cmake new file mode 100644 index 000000000..705e41eae --- /dev/null +++ b/cmake/toolchains/Ubuntu-MinGW-X-Trusty-64.cmake @@ -0,0 +1,6 @@ +SET(MINGW_PREFIX /opt/mingw64) +SET(MINGW_PREFIX32 /opt/mingw32) + +SET(WIN64 TRUE) + +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/common/Ubuntu-MinGW-X-Trusty.cmake) diff --git a/cmake/toolchains/common/MSYS.cmake b/cmake/toolchains/common/MSYS.cmake new file mode 100644 index 000000000..d31f60e6d --- /dev/null +++ b/cmake/toolchains/common/MSYS.cmake @@ -0,0 +1,34 @@ +# The target environment +SET(CMAKE_FIND_ROOT_PATH ${MINGW_PREFIX}) +SET(CMAKE_INSTALL_PREFIX ${MINGW_PREFIX}) + +# Windows msys mingw ships with a mostly-suitable preconfigured environment +SET(STRIP ${MINGW_PREFIX}/bin/strip) +SET(CMAKE_RC_COMPILER ${MINGW_PREFIX}/bin/windres) +SET(CMAKE_C_COMPILER ${MINGW_PREFIX}/bin/gcc) +SET(CMAKE_CXX_COMPILER ${MINGW_PREFIX}/bin/g++) + +# For 32-bit vst support +IF(WIN64) + # Specify the 32-bit cross compiler + SET(CMAKE_C_COMPILER32 ${MINGW_PREFIX32}/bin/gcc) + SET(CMAKE_CXX_COMPILER32 ${MINGW_PREFIX32}/bin/g++) +ENDIF() + +# Msys compiler does not support @CMakeFiles/Include syntax +SET(CMAKE_C_USE_RESPONSE_FILE_FOR_INCLUDES OFF) +SET(CMAKE_CXX_USE_RESPONSE_FILE_FOR_INCLUDES OFF) + +# Variable to assist override Qt debug libraries with release versions +SET(QT_OVERRIDE_LIBRARIES + optimized;${MINGW_PREFIX}/bin/QtGui4.dll; + optimized;${MINGW_PREFIX}/bin/QtCore4.dll; + optimized;${MINGW_PREFIX}/bin/QtXml4.dll; + debug;${MINGW_PREFIX}/bin/QtGui4.dll; + debug;${MINGW_PREFIX}/bin/QtCore4.dll; + debug;${MINGW_PREFIX}/bin/QtXml4.dll; +) +IF(LMMS_BUILD_MSYS AND CMAKE_BUILD_TYPE STREQUAL "Debug") + # Override Qt debug libraries with release versions + SET(QT_LIBRARIES "${QT_OVERRIDE_LIBRARIES}") +ENDIF() \ No newline at end of file diff --git a/cmake/toolchains/common/Ubuntu-MinGW-W64.cmake b/cmake/toolchains/common/Ubuntu-MinGW-W64.cmake new file mode 100644 index 000000000..acb2cbf91 --- /dev/null +++ b/cmake/toolchains/common/Ubuntu-MinGW-W64.cmake @@ -0,0 +1,17 @@ +# Toolchain for Ubuntu MinGw compiler shipped with the mingw-w64 and +# g++-mingw-w64 packages +SET(TOOLCHAIN_PREFIX ${CMAKE_SYSTEM_PROCESSOR}-w64-mingw32) +set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc) +set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++) +set(CMAKE_RC_COMPILER ${TOOLCHAIN_PREFIX}-windres) + +set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX}) +SET(PKG_CONFIG_EXECUTABLE /usr/bin/${TOOLCHAIN_PREFIX}-pkg-config) + +IF(WIN64) + SET(TOOLCHAIN_PREFIX32 ${CMAKE_SYSTEM_PROCESSOR32}-w64-mingw32) + SET(CMAKE_C_COMPILER32 ${TOOLCHAIN_PREFIX32}-gcc) + SET(CMAKE_CXX_COMPILER32 ${TOOLCHAIN_PREFIX32}-g++) +ENDIF() + +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/WinCrossCompile.cmake) diff --git a/cmake/toolchains/common/Ubuntu-MinGW-X-Trusty.cmake b/cmake/toolchains/common/Ubuntu-MinGW-X-Trusty.cmake new file mode 100644 index 000000000..1dabc3555 --- /dev/null +++ b/cmake/toolchains/common/Ubuntu-MinGW-X-Trusty.cmake @@ -0,0 +1,58 @@ +IF(WIN64) + INCLUDE(${CMAKE_CURRENT_LIST_DIR}/Win64.cmake) +ELSE() + INCLUDE(${CMAKE_CURRENT_LIST_DIR}/Win32.cmake) +ENDIF() +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/WinCrossCompile.cmake) + +# The target environment +SET(CMAKE_FIND_ROOT_PATH ${MINGW_PREFIX}) +SET(CMAKE_INSTALL_PREFIX ${MINGW_PREFIX}) + +# Linux mingw requires explicitly defined tools to prevent clash with native system tools +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++) +SET(CMAKE_RC_COMPILER ${MINGW_TOOL_PREFIX}windres) + +# Mingw tools +SET(STRIP ${MINGW_TOOL_PREFIX}strip) +SET(PKG_CONFIG_EXECUTABLE ${MINGW_TOOL_PREFIX}pkg-config) + +# For 32-bit vst support +IF(WIN64) + # Specify the 32-bit cross compiler + SET(MINGW_TOOL_PREFIX32 ${MINGW_PREFIX32}/bin/${CMAKE_SYSTEM_PROCESSOR32}-w64-mingw32-) + SET(CMAKE_C_COMPILER32 ${MINGW_TOOL_PREFIX32}gcc) + SET(CMAKE_CXX_COMPILER32 ${MINGW_TOOL_PREFIX32}g++) +ENDIF() + +INCLUDE_DIRECTORIES(${MINGW_PREFIX}/include) + +LINK_DIRECTORIES(${MINGW_PREFIX}/lib ${MINGW_PREFIX}/bin) + +# Qt tools +SET(QT_BINARY_DIR ${MINGW_PREFIX}/bin) +SET(QT_QMAKE_EXECUTABLE ${QT_BINARY_DIR}/qmake) + +# Echo modified cmake vars to screen for debugging purposes +IF(NOT DEFINED ENV{MINGW_DEBUG_INFO}) + MESSAGE("") + MESSAGE("Custom cmake vars: (blank = system default)") + MESSAGE("-----------------------------------------") + MESSAGE("* CMAKE_C_COMPILER : ${CMAKE_C_COMPILER}") + MESSAGE("* CMAKE_CXX_COMPILER : ${CMAKE_CXX_COMPILER}") + MESSAGE("* CMAKE_RC_COMPILER : ${CMAKE_RC_COMPILER}") + MESSAGE("* PKG_CONFIG_EXECUTABLE : ${PKG_CONFIG_EXECUTABLE}") + MESSAGE("* MINGW_TOOL_PREFIX32 : ${MINGW_TOOL_PREFIX32}") + MESSAGE("* CMAKE_C_COMPILER32 : ${CMAKE_C_COMPILER32}") + MESSAGE("* CMAKE_CXX_COMPILER32 : ${CMAKE_CXX_COMPILER32}") + MESSAGE("* STRIP : ${STRIP}") + MESSAGE("* QT_BINARY_DIR : ${QT_BINARY_DIR}") + MESSAGE("* QT_QMAKE_EXECUTABLE : ${QT_QMAKE_EXECUTABLE}") + MESSAGE("") + # So that the debug info only appears once + SET(ENV{MINGW_DEBUG_INFO} SHOWN) +ENDIF() diff --git a/cmake/toolchains/common/Win32.cmake b/cmake/toolchains/common/Win32.cmake new file mode 100644 index 000000000..5a6fb103c --- /dev/null +++ b/cmake/toolchains/common/Win32.cmake @@ -0,0 +1,4 @@ +SET(CMAKE_SYSTEM_NAME Windows) +SET(CMAKE_SYSTEM_VERSION 1) + +SET(CMAKE_SYSTEM_PROCESSOR i686) diff --git a/cmake/toolchains/common/Win64.cmake b/cmake/toolchains/common/Win64.cmake new file mode 100644 index 000000000..155a658f4 --- /dev/null +++ b/cmake/toolchains/common/Win64.cmake @@ -0,0 +1,7 @@ +SET(CMAKE_SYSTEM_NAME Windows) +SET(CMAKE_SYSTEM_VERSION 1) + +SET(CMAKE_SYSTEM_PROCESSOR x86_64) +SET(CMAKE_SYSTEM_PROCESSOR32 i686) + +SET(WIN64 TRUE) diff --git a/cmake/toolchains/common/WinCrossCompile.cmake b/cmake/toolchains/common/WinCrossCompile.cmake new file mode 100644 index 000000000..a2d6ff2e9 --- /dev/null +++ b/cmake/toolchains/common/WinCrossCompile.cmake @@ -0,0 +1,9 @@ +# Required by cmake if `uname -s` is inadaquate +SET(CMAKE_SYSTEM_NAME Windows) +SET(CMAKE_SYSTEM_VERSION 1) + +# 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) \ No newline at end of file diff --git a/plugins/zynaddsubfx/CMakeLists.txt b/plugins/zynaddsubfx/CMakeLists.txt index 43ebd7181..ff9d7219d 100644 --- a/plugins/zynaddsubfx/CMakeLists.txt +++ b/plugins/zynaddsubfx/CMakeLists.txt @@ -20,7 +20,7 @@ IF(LMMS_HOST_X86 OR LMMS_HOST_X86_64) ENDIF(LMMS_HOST_X86 OR LMMS_HOST_X86_64) # build ZynAddSubFX with full optimizations -SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -Wno-write-strings -Wno-deprecated-declarations -fpermissive") +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -Wno-misleading-indentation -Wno-write-strings -Wno-deprecated-declarations -fpermissive") IF(LMMS_BUILD_WIN32) # link system-libraries @@ -151,7 +151,7 @@ ADD_DEPENDENCIES(zynaddsubfx ZynAddSubFxCore) IF(WIN32) SET(WINRC "${CMAKE_CURRENT_BINARY_DIR}/zynaddsubfxrc.obj") ADD_CUSTOM_COMMAND(OUTPUT "${WINRC}" - COMMAND "${WINDRES}" + COMMAND "${CMAKE_RC_COMPILER}" "-I\"${CMAKE_CURRENT_SOURCE_DIR}\"" "-o\"${CMAKE_CURRENT_BINARY_DIR}/zynaddsubfxrc.obj\"" "-i\"${CMAKE_CURRENT_BINARY_DIR}/zynaddsubfx.rc\"" diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a6105abf8..1453584ef 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -34,7 +34,7 @@ IF(WIN32 AND MSVC) ELSEIF(WIN32) SET(WINRC "${CMAKE_BINARY_DIR}/lmmsrc.obj") ADD_CUSTOM_COMMAND(OUTPUT "${WINRC}" - COMMAND "${WINDRES}" + COMMAND "${CMAKE_RC_COMPILER}" "-I\"${CMAKE_SOURCE_DIR}\"" "-o\"${CMAKE_BINARY_DIR}/lmmsrc.obj\"" "-i\"${CMAKE_BINARY_DIR}/lmms.rc\"" diff --git a/src/core/MixerWorkerThread.cpp b/src/core/MixerWorkerThread.cpp index ca31226b0..ef10dbdf0 100644 --- a/src/core/MixerWorkerThread.cpp +++ b/src/core/MixerWorkerThread.cpp @@ -24,9 +24,11 @@ #include "MixerWorkerThread.h" -#include "denormals.h" +#include #include #include + +#include "denormals.h" #include "ThreadableJob.h" #include "Mixer.h"