From 53abd65d2e2a7de3c5f5f4b6c422dd81aca939eb Mon Sep 17 00:00:00 2001 From: Tobias Doerffel Date: Tue, 22 Jul 2008 14:42:34 +0000 Subject: [PATCH] initial support for mingw-cross-compiling git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@1356 0778d3d1-df1d-0410-868b-ea421aaaa00d --- CMakeLists.txt | 43 ++++++++++++++++++----- ChangeLog | 11 ++++++ build_mingw32 | 5 ++- cmake/modules/BuildPlugin.cmake | 9 +++-- cmake/modules/Win32Toolchain.cmake | 35 ++++++++++++++++++ include/audio_sdl.h | 4 +-- plugins/ladspa_effect/caps/CMakeLists.txt | 5 ++- plugins/ladspa_effect/tap/CMakeLists.txt | 5 ++- plugins/vst_effect/CMakeLists.txt | 5 +-- src/core/midi/midi_winmm.cpp | 2 +- 10 files changed, 101 insertions(+), 23 deletions(-) create mode 100644 cmake/modules/Win32Toolchain.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 6b70e5def..f106687c0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,13 +5,15 @@ PROJECT(lmms) SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules) SET(CMAKE_BUILD_TYPE relwithdebinfo) -CMAKE_POLICY(SET CMP0005 NEW) +IF(COMMAND CMAKE_POLICY) + CMAKE_POLICY(SET CMP0005 NEW) + CMAKE_POLICY(SET CMP0003 NEW) +ENDIF(COMMAND CMAKE_POLICY) INCLUDE(AddFileDependencies) INCLUDE(CheckIncludeFiles) INCLUDE(FindPkgConfig) - SET(VERSION_MAJOR "0") SET(VERSION_MINOR "4") SET(VERSION_PATCH "0") @@ -40,8 +42,18 @@ OPTION(WANT_STK "Include Stk (Synthesis Toolkit) support" ON) OPTION(WANT_SYSTEM_SR "Use system's libsamplerate" ON) OPTION(WANT_TAP "Include Tom's Audio Processing (LADSPA plugins)" ON) OPTION(WANT_VST "Include VST support" ON) +OPTION(WANT_WINMM "Include WinMM MIDI support" OFF) OPTION(WANT_PCH "Use precompiled headers" OFF) +IF(LMMS_BUILD_WIN32) + SET(WANT_ALSA OFF) + SET(WANT_JACK OFF) + SET(WANT_PULSEAUDIO OFF) + SET(WANT_STK OFF) + SET(WANT_SYSTEM_SR OFF) + SET(WANT_WINMM ON) + SET(LMMS_HAVE_WINMM TRUE) +ENDIF(LMMS_BUILD_WIN32) MESSAGE("PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}") EXEC_PROGRAM( uname ARGS "-m"OUTPUT_VARIABLE Machine ) @@ -122,6 +134,13 @@ IF(WANT_SDL) SET(LMMS_HAVE_SDL TRUE) ENDIF(SDL_FOUND) ENDIF(WANT_SDL) +IF(NOT LMMS_HAVE_SDL) + SET(SDL_INCLUDE_DIR "") +ELSE(NOT LMMS_HAVE_SDL) + IF(NOT SDL_INCLUDE_DIR) + SET(SDL_INCLUDE_DIR ${CMAKE_FIND_ROOT_PATH}/include) + ENDIF(NOT SDL_INCLUDE_DIR) +ENDIF(NOT LMMS_HAVE_SDL) # check for Stk @@ -140,10 +159,12 @@ IF(WANT_PULSEAUDIO) FIND_PACKAGE(PulseAudio) IF(PULSEAUDIO_FOUND) SET(LMMS_HAVE_PULSEAUDIO TRUE) - ELSE(PULSEAUDIO_FOUND) - SET(PULSEAUDIO_INCLUDE_DIR "") ENDIF(PULSEAUDIO_FOUND) ENDIF(WANT_PULSEAUDIO) +IF(NOT LMMS_HAVE_PULSEAUDIO) + SET(PULSEAUDIO_INCLUDE_DIR "") + SET(PULSEAUDIO_LIBRARIES "") +ENDIF(NOT LMMS_HAVE_PULSEAUDIO) # check for OGG/Vorbis-libraries @@ -169,10 +190,14 @@ IF(WANT_ALSA) SET(LMMS_HAVE_ALSA TRUE) ENDIF(ALSA_FOUND) ENDIF(WANT_ALSA) +IF(NOT LMMS_HAVE_ALSA) + SET(ASOUND_LIBRARY "") +ENDIF(NOT LMMS_HAVE_ALSA) # check for JACK IF(WANT_JACK) + MESSAGE(FATAL_ERROR "${WANT_JACK}") PKG_CHECK_MODULES(JACK jack>=0.77) IF(JACK_FOUND) SET(LMMS_HAVE_JACK TRUE) @@ -271,6 +296,10 @@ ADD_FILE_DEPENDENCIES(${ER_H} ${lmms_MOC_out}) ADD_CUSTOM_COMMAND(OUTPUT ${ER_H} COMMAND ${BIN2RES} ARGS ${lmms_EMBEDDED_RESOURCES} > ${ER_H} DEPENDS ${BIN2RES}) +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-attributes") +IF(NOT WIN32) + SET(CMAKE_CURRENT_SOURCE_DIR "${CMAKE_CXX_FLAGS} -fPIC") +ENDIF(NOT WIN32) # make sub-directories ADD_SUBDIRECTORY(plugins) @@ -286,10 +315,6 @@ LINK_DIRECTORIES( ${ASOUND_LIBRARY_DIR} ${JACK_LIBRARY_DIRS} ${SAMPLERATE_LIBRAR LINK_LIBRARIES(${QT_LIBRARIES} ${ASOUND_LIBRARY} ${SDL_LIBRARY} ${PULSEAUDIO_LIBRARIES} ${JACK_LIBRARIES} ${OGGVORBIS_LIBRARIES} ${SAMPLERATE_LIBRARIES} ${SNDFILE_LIBRARIES}) ADD_EXECUTABLE(lmms ${lmms_SOURCES} ${lmms_INCLUDES} ${LIBSAMPLERATE_SOURCES} ${ER_H} ${lmms_UI_out}) -SET_TARGET_PROPERTIES(lmms PROPERTIES COMPILE_FLAGS "-D_FORTIFY_SOURCE=0") -IF(NOT WIN32) - SET_TARGET_PROPERTIES(lmms PROPERTIES COMPILE_FLAGS "-fPIC") -ENDIF(NOT WIN32) INSTALL(TARGETS lmms RUNTIME DESTINATION bin) @@ -335,7 +360,7 @@ MESSAGE( "-------------------------\n" "* ALSA : ${LMMS_HAVE_ALSA}\n" "* OSS : ${LMMS_HAVE_OSS}\n" -"* WinMM : ${LMMS_BUILD_WIN32}\n" +"* WinMM : ${LMMS_HAVE_WINMM}\n" ) MESSAGE( diff --git a/ChangeLog b/ChangeLog index 3ca4e97f2..ab2a032ba 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,16 @@ 2008-07-22 Tobias Doerffel + * cmake/modules/Win32Toolchain.cmake: + * cmake/modules/BuildPlugin.cmake: + * plugins/ladspa_effect/tap/CMakeLists.txt: + * plugins/ladspa_effect/caps/CMakeLists.txt: + * plugins/vst_effect/CMakeLists.txt: + * include/audio_sdl.h: + * src/core/midi/midi_winmm.cpp: + * build_mingw32: + * CMakeLists.txt: + initial support for mingw-cross-compiling + * include/midi_alsa_seq.h: * include/midi_client.h: * include/midi_port.h: diff --git a/build_mingw32 b/build_mingw32 index 3eb9b60e8..748b46245 100755 --- a/build_mingw32 +++ b/build_mingw32 @@ -1,4 +1,7 @@ MINGW=/opt/mingw export PATH=$PATH:$MINGW/bin -./configure --prefix=$MINGW --host=i586-mingw32 CC=$MINGW/bin/i586-mingw32-gcc CXX=$MINGW/bin/i586-mingw32-g++ DLLTOOL=$MINGW/bin/i586-mingw32-dlltool OBJDUMP=$MINGW/bin/i586-mingw32-objdump RANLIB=$MINGW/bin/i586-mingw32-ranlib AR=$MINGW/bin/i586-mingw32-ar AS=$MINGW/bin/i586-mingw32-as STRIP=$MINGW/bin/i586-mingw32-strip --with-qtdir=$MINGW --with-win32 CFLAGS="-mtune=generic -mmmx -fno-strict-aliasing" CXXFLAGS="-mtune=generic -mmmx -fno-strict-aliasing" +#./configure --prefix=$MINGW --host=i586-mingw32 CC=$MINGW/bin/i586-mingw32-gcc CXX=$MINGW/bin/i586-mingw32-g++ DLLTOOL=$MINGW/bin/i586-mingw32-dlltool OBJDUMP=$MINGW/bin/i586-mingw32-objdump RANLIB=$MINGW/bin/i586-mingw32-ranlib AR=$MINGW/bin/i586-mingw32-ar AS=$MINGW/bin/i586-mingw32-as STRIP=$MINGW/bin/i586-mingw32-strip --with-qtdir=$MINGW --with-win32 CFLAGS="-mtune=generic -mmmx -fno-strict-aliasing" CXXFLAGS="-mtune=generic -mmmx -fno-strict-aliasing" #./configure --prefix=$MINGW --host=i586-mingw32 --build=i586-mingw32 CC=$MINGW/bin/i586-mingw32-gcc CXX=$MINGW/bin/i586-mingw32-g++ --with-qtdir=$MINGW --with-win32 + +cmake . -DCMAKE_TOOLCHAIN_FILE=cmake/modules/Win32Toolchain.cmake + diff --git a/cmake/modules/BuildPlugin.cmake b/cmake/modules/BuildPlugin.cmake index 24f2b1f83..ba8be5895 100644 --- a/cmake/modules/BuildPlugin.cmake +++ b/cmake/modules/BuildPlugin.cmake @@ -65,8 +65,13 @@ MACRO(BUILD_PLUGIN) FOREACH(f ${PLUGIN_SOURCES}) ADD_FILE_DEPENDENCIES(${f} ${ER_H} ${plugin_MOC_out} ${plugin_UIC_out}) ENDFOREACH(f) - ADD_LIBRARY( ${PLUGIN_NAME} SHARED ${PLUGIN_SOURCES}) - INSTALL(TARGETS ${PLUGIN_NAME} LIBRARY DESTINATION ${PLUGIN_DIR}) + ADD_LIBRARY(${PLUGIN_NAME} SHARED ${PLUGIN_SOURCES}) + IF(LMMS_BUILD_LINUX) + INSTALL(TARGETS ${PLUGIN_NAME} LIBRARY DESTINATION "${PLUGIN_DIR}") + ENDIF(LMMS_BUILD_LINUX) + IF(LMMS_BUILD_WIN32) + SET_TARGET_PROPERTIES(${PLUGIN_NAME} PROPERTIES PREFIX "") + ENDIF(LMMS_BUILD_WIN32) SET(ADDITIONAL_MAKE_CLEAN_FILES ${ER_H} ${plugin_MOC_out}) ENDMACRO(BUILD_PLUGIN) diff --git a/cmake/modules/Win32Toolchain.cmake b/cmake/modules/Win32Toolchain.cmake new file mode 100644 index 000000000..9b2688c89 --- /dev/null +++ b/cmake/modules/Win32Toolchain.cmake @@ -0,0 +1,35 @@ +# 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 /opt/mingw) + +SET(CC_PREFIX /opt/mingw) + +# specify the cross compiler +SET(CMAKE_C_COMPILER ${CC_PREFIX}/bin/i586-mingw32-gcc) +SET(CMAKE_CXX_COMPILER ${CC_PREFIX}/bin/i586-mingw32-g++) + +# where is the target environment +SET(CMAKE_FIND_ROOT_PATH /opt/mingw) + +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) + + diff --git a/include/audio_sdl.h b/include/audio_sdl.h index 862ca533b..5c192cef1 100644 --- a/include/audio_sdl.h +++ b/include/audio_sdl.h @@ -30,8 +30,8 @@ #ifdef LMMS_HAVE_SDL -#include -#include +#include +#include #include "audio_device.h" diff --git a/plugins/ladspa_effect/caps/CMakeLists.txt b/plugins/ladspa_effect/caps/CMakeLists.txt index eecee6c0a..63056251e 100644 --- a/plugins/ladspa_effect/caps/CMakeLists.txt +++ b/plugins/ladspa_effect/caps/CMakeLists.txt @@ -6,8 +6,7 @@ SET_TARGET_PROPERTIES(caps PROPERTIES PREFIX "") SET_TARGET_PROPERTIES(caps PROPERTIES COMPILE_FLAGS "-O3 -Wno-write-strings") SET_TARGET_PROPERTIES(caps PROPERTIES LINK_FLAGS "${LINK_FLAGS} -shared -Wl,-no-undefined") IF(LMMS_BUILD_LINUX) -SET_TARGET_PROPERTIES(caps PROPERTIES LINK_FLAGS "${LINK_FLAGS} -nostartfiles") + SET_TARGET_PROPERTIES(caps PROPERTIES LINK_FLAGS "${LINK_FLAGS} -nostartfiles") + INSTALL(TARGETS caps LIBRARY DESTINATION ${PLUGIN_DIR}/ladspa) ENDIF(LMMS_BUILD_LINUX) -INSTALL(TARGETS caps LIBRARY DESTINATION ${PLUGIN_DIR}/ladspa) - diff --git a/plugins/ladspa_effect/tap/CMakeLists.txt b/plugins/ladspa_effect/tap/CMakeLists.txt index 73fd3bd4d..0071f2d4a 100644 --- a/plugins/ladspa_effect/tap/CMakeLists.txt +++ b/plugins/ladspa_effect/tap/CMakeLists.txt @@ -8,9 +8,8 @@ FOREACH(_item ${PLUGIN_SOURCES}) SET_TARGET_PROPERTIES(${_plugin} PROPERTIES COMPILE_FLAGS "-O3 -Wno-write-strings -Wall -fomit-frame-pointer -fno-strict-aliasing -fstrength-reduce -funroll-loops -ffast-math -c -fPIC -DPIC") SET_TARGET_PROPERTIES(${_plugin} PROPERTIES LINK_FLAGS "${LINK_FLAGS} -shared -Wl,-no-undefined -Wl,-Bsymbolic -lm") IF(LMMS_BUILD_LINUX) - SET_TARGET_PROPERTIES(${_plugin} PROPERTIES LINK_FLAGS "${LINK_FLAGS} -nostartfiles") + SET_TARGET_PROPERTIES(${_plugin} PROPERTIES LINK_FLAGS "${LINK_FLAGS} -nostartfiles") + INSTALL(TARGETS ${_plugin} LIBRARY DESTINATION ${PLUGIN_DIR}/ladspa) ENDIF(LMMS_BUILD_LINUX) - - INSTALL(TARGETS ${_plugin} LIBRARY DESTINATION ${PLUGIN_DIR}/ladspa) ENDFOREACH(_item ${PLUGIN_SOURCES}) diff --git a/plugins/vst_effect/CMakeLists.txt b/plugins/vst_effect/CMakeLists.txt index 79cca8047..91e49b48b 100644 --- a/plugins/vst_effect/CMakeLists.txt +++ b/plugins/vst_effect/CMakeLists.txt @@ -6,7 +6,8 @@ LINK_DIRECTORIES(../vst_base) LINK_LIBRARIES(vstbase) BUILD_PLUGIN(vsteffect vst_effect.cpp vst_effect_controls.cpp vst_effect_control_dialog.cpp vst_subplugin_features.cpp vst_effect.h vst_effect_controls.h vst_effect_control_dialog.h vst_subplugin_features.h MOCFILES vst_effect_controls.h EMBEDDED_RESOURCES *.png) + +SET_TARGET_PROPERTIES(vsteffect PROPERTIES COMPILE_FLAGS "-Wno-attributes") + ENDIF(LMMS_HAVE_VST) -SET_TARGET_PROPERTIES(vsteffect PROPERTIES COMPILE_FLAGS "-D_FORTIFY_SOURCE=0") - diff --git a/src/core/midi/midi_winmm.cpp b/src/core/midi/midi_winmm.cpp index da98ab53d..b80fdeac7 100644 --- a/src/core/midi/midi_winmm.cpp +++ b/src/core/midi/midi_winmm.cpp @@ -414,7 +414,7 @@ void midiWinMM::setupWidget::saveSettings( void ) } -#include "midi_winmm.moc" +#include "moc_midi_winmm.cxx" #endif