# # src/tracker/CMakeLists.txt # # Copyright 2016 Dale Whinham # # This file is part of MilkyTracker. # # MilkyTracker is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # MilkyTracker is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with MilkyTracker. If not, see . # set( SOURCES AnimatedFXControl.cpp ColorExportImport.cpp ColorPaletteContainer.cpp DialogChannelSelector.cpp DialogEQ.cpp DialogGroupSelection.cpp DialogHandlers.cpp DialogListBox.cpp DialogPanning.cpp DialogQuickChooseInstrument.cpp DialogResample.cpp DialogWithValues.cpp DialogZap.cpp EQConstants.cpp EditorBase.cpp EnvelopeContainer.cpp EnvelopeEditor.cpp EnvelopeEditorControl.cpp Equalizer.cpp FileExtProvider.cpp FileIdentificator.cpp GlobalColorConfig.cpp InputControlListener.cpp LogoBig.cpp LogoSmall.cpp ModuleEditor.cpp ModuleServices.cpp PatternEditor.cpp PatternEditorClipBoard.cpp PatternEditorControl.cpp PatternEditorControlEventListener.cpp PatternEditorControlKeyboard.cpp PatternEditorControlTransposeHandler.cpp PatternEditorTools.cpp PatternTools.cpp PeakLevelControl.cpp Piano.cpp PianoControl.cpp PlayerController.cpp PlayerLogic.cpp PlayerMaster.cpp RecPosProvider.cpp RecorderLogic.cpp ResamplerHelper.cpp SampleEditor.cpp SampleEditorControl.cpp SampleEditorControlToolHandler.cpp SampleEditorResampler.cpp SamplePlayer.cpp ScopesControl.cpp SectionAbout.cpp SectionAbstract.cpp SectionAdvancedEdit.cpp SectionDiskMenu.cpp SectionHDRecorder.cpp SectionInstruments.cpp SectionOptimize.cpp SectionQuickOptions.cpp SectionSamples.cpp SectionSettings.cpp SectionSwitcher.cpp SectionTranspose.cpp SectionUpperLeft.cpp SongLengthEstimator.cpp SystemMessage.cpp TabHeaderControl.cpp TabManager.cpp TabTitleProvider.cpp TitlePageManager.cpp ToolInvokeHelper.cpp Tracker.cpp TrackerConfig.cpp TrackerInit.cpp TrackerKeyboard.cpp TrackerSettings.cpp TrackerSettingsDatabase.cpp TrackerShortCuts.cpp TrackerShutDown.cpp TrackerStartUp.cpp TrackerUpdate.cpp Undo.cpp VRand.cpp Zapper.cpp ) set( HEADERS ${PROJECT_BINARY_DIR}/src/tracker/version.h AnimatedFXControl.h ColorExportImport.h ColorPaletteContainer.h ControlIDs.h DialogChannelSelector.h DialogEQ.h DialogGroupSelection.h DialogHandlers.h DialogListBox.h DialogPanning.h DialogQuickChooseInstrument.h DialogResample.h DialogWithValues.h DialogZap.h EQConstants.h EditModes.h EditorBase.h EnvelopeContainer.h EnvelopeEditor.h EnvelopeEditorControl.h Equalizer.h FileExtProvider.h FileIdentificator.h FileTypes.h FilterParameters.h GlobalColorConfig.h InputControlListener.h LogoBig.h LogoSmall.h ModuleEditor.h ModuleServices.h PatternEditor.h PatternEditorControl.h PatternEditorTools.h PatternTools.h PeakLevelControl.h Piano.h PianoControl.h PlayerController.h PlayerCriticalSection.h PlayerLogic.h PlayerMaster.h RecPosProvider.h RecorderLogic.h ResamplerHelper.h SIPButtons.h SampleEditor.h SampleEditorControl.h SampleEditorControlLastValues.h SampleEditorResampler.h SamplePlayer.h ScopesControl.h SectionAbout.h SectionAbstract.h SectionAdvancedEdit.h SectionDiskMenu.h SectionHDRecorder.h SectionInstruments.h SectionOptimize.h SectionQuickOptions.h SectionSamples.h SectionSettings.h SectionSwitcher.h SectionTranspose.h SectionUpperLeft.h SongLengthEstimator.h SystemMessage.h TabHeaderControl.h TabManager.h TabTitleProvider.h TitlePageManager.h ToolInvokeHelper.h Tracker.h TrackerConfig.h TrackerSettingsDatabase.h Undo.h VRand.h Zapper.h ) include_directories( # Include the CMake-generated version header from the build directory ${PROJECT_BINARY_DIR}/src/tracker ${PROJECT_SOURCE_DIR}/src/compression ${PROJECT_SOURCE_DIR}/src/fx ${PROJECT_SOURCE_DIR}/src/milkyplay ${PROJECT_SOURCE_DIR}/src/ppui ${PROJECT_SOURCE_DIR}/src/ppui/osinterface ${PROJECT_SOURCE_DIR}/src/ppui/sdl ${PROJECT_SOURCE_DIR}/src/tracker ) # Add the compression library. # The compression library is special in that each decompressor has a constructor # which statically self-registers the decompressor into a global decompressors # list. Because they are not each individually referenced in code, the linker # will discard them if they are archived into a static library. We could work # around it with compiler-specific flags such as GCC's --whole-archive or # Clang's --force_load, but instead we use this special CMake feature which lets # us easily pull in the individual objects without having to manually list them. list(APPEND SOURCES $) # Add platform-specific sources and include paths if(APPLE) # If generating for Xcode, pass in the Interface Builder source as a # resource and Xcode will take care of compiling it properly if(${CMAKE_GENERATOR} STREQUAL "Xcode") set_source_files_properties( cocoa/resources/Application.xib PROPERTIES MACOSX_PACKAGE_LOCATION Resources ) endif() # Application and document icons file( GLOB ICONS ${PROJECT_SOURCE_DIR}/resources/pictures/docicons/osx/*.icns ) list(APPEND ICONS ${PROJECT_SOURCE_DIR}/resources/pictures/carton.icns) # Ensure icons are copied to the correct bundle location set_source_files_properties( ${ICONS} PROPERTIES MACOSX_PACKAGE_LOCATION Resources ) list( APPEND SOURCES ${ICONS} cocoa/AppDelegate.mm cocoa/MTKeyTranslator.mm cocoa/MTTrackerView.mm cocoa/main.mm cocoa/resources/Application.xib ) list( APPEND HEADERS cocoa/AppDelegate.h cocoa/MTKeyTranslator.h cocoa/MTTrackerView.h ) include_directories( ${PROJECT_SOURCE_DIR}/src/midi/osx ${PROJECT_SOURCE_DIR}/src/ppui/cocoa ${PROJECT_SOURCE_DIR}/src/ppui/osinterface/posix ${PROJECT_SOURCE_DIR}/src/tracker/cocoa ) elseif(WIN32) list( APPEND SOURCES win32/PreferencesDialog.cpp win32/ThreadTimer.cpp win32/Win32_main.cpp win32/Win32_resources.rc ) list( APPEND HEADERS win32/PreferencesDialog.h win32/ThreadTimer.h win32/Win32_resource.h ) include_directories( ${PROJECT_SOURCE_DIR}/src/midi/win32 ${PROJECT_SOURCE_DIR}/src/ppui/osinterface/win32 ${PROJECT_SOURCE_DIR}/src/ppui/win32 ) else() list( APPEND SOURCES sdl/SDL_KeyTranslation.cpp sdl/SDL_Main.cpp ) list( APPEND HEADERS sdl/SDL_KeyTranslation.h ) include_directories( ${SDL2_INCLUDE_DIRS} ${PROJECT_SOURCE_DIR}/src/ppui/osinterface/posix ) endif() add_definitions(-DMILKYTRACKER) # Set target names for the executables if(APPLE OR WIN32) # OS X and Windows get a mixed-case binary name set(TARGET_NAME ${PROJECT_NAME}) else() # Linux/other UNIX get a lower-case binary name set(TARGET_NAME ${PROJECT_NAME_LOWER}) endif() if(APPLE) add_executable(${TARGET_NAME} MACOSX_BUNDLE ${SOURCES} ${HEADERS}) # Xcode can deal with Interface Builder xibs automatically - if we are not # generating for Xcode, then we must manually compile and install any xibs if(NOT CMAKE_GENERATOR STREQUAL "Xcode") # Locate ibtool find_program(IBTOOL ibtool HINTS /usr/bin ${OSX_DEVELOPER_ROOT}/usr/bin) if(IBTOOL STREQUAL "IBTOOL-NOTFOUND") message(SEND_ERROR "Unable to find ibtool. Is Xcode installed?") endif() # The Interface Builder xib file to be compiled set( XIB_FILE ${PROJECT_SOURCE_DIR}/src/tracker/cocoa/resources/Application.xib ) # Destination for compiled xib set(RESOURCES_DIR $/../Resources) # Ensure the destination directory of the compiled xib exists add_custom_command( TARGET ${TARGET_NAME} PRE_BUILD COMMAND mkdir -p ${RESOURCES_DIR} ) # Compile the xib file add_custom_command( TARGET ${TARGET_NAME} POST_BUILD COMMAND ${IBTOOL} --errors --warnings --notices --output-format human-readable-text --compile ${RESOURCES_DIR}/${MACOSX_BUNDLE_NSMAIN_NIB_FILE}.nib ${XIB_FILE} COMMENT "Compiling ${XIB_FILE}" ) endif() # Pass in the Info.plist template, whose variables are defined in the # top-level CMakeLists.txt set_target_properties( ${TARGET_NAME} PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${PROJECT_SOURCE_DIR}/src/tracker/cocoa/resources/Info.plist.in ) # Enable ARC (automatic reference counting) for OS X build set_property( TARGET ${TARGET_NAME} APPEND_STRING PROPERTY COMPILE_FLAGS "-fobjc-arc" ) target_link_libraries( ${TARGET_NAME} midi ${CORE_VIDEO_LIBRARY} ${OPENGL_LIBRARY} ) elseif(WIN32) add_executable(${TARGET_NAME} WIN32 ${SOURCES} ${HEADERS}) target_link_libraries(${TARGET_NAME} midi) else() add_executable(${TARGET_NAME} ${SOURCES} ${HEADERS}) target_link_libraries(${TARGET_NAME} ${SDL2_LIBRARIES}) if(ALSA_FOUND AND RTMIDI_FOUND) add_definitions(-DHAVE_LIBASOUND) target_link_libraries(${TARGET_NAME} midi ${RTMIDI_LIBRARIES}) endif() endif() if(UNIX) if(ZLIB_FOUND) target_link_libraries(${TARGET_NAME} ${ZLIB_LIBRARIES}) endif() if(ZZIPLIB_FOUND) target_link_libraries(${TARGET_NAME} ${ZZIPLIB_LIBRARIES}) endif() if(LHASA_FOUND) target_link_libraries(${TARGET_NAME} ${LHASA_LIBRARIES}) endif() endif() target_link_libraries( ${TARGET_NAME} fx milkyplay osinterface ppui ) # OS X and Windows install to the root of the prefix, the others install to bin if(APPLE OR WIN32) set(INSTALL_DEST .) else() set(INSTALL_DEST bin) endif() install(TARGETS ${TARGET_NAME} DESTINATION ${INSTALL_DEST})