mirror of
https://github.com/k4zmu2a/SpaceCadetPinball.git
synced 2024-11-23 17:30:18 +01:00
246 lines
9 KiB
CMake
246 lines
9 KiB
CMake
cmake_minimum_required(VERSION 3.0)
|
|
project(SpaceCadetPinball)
|
|
|
|
set(CMAKE_CXX_STANDARD 11)
|
|
|
|
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/bin)
|
|
|
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/CMakeModules")
|
|
|
|
# On Windows, set paths to SDL-devel packages here
|
|
if(WIN32)
|
|
list(APPEND SDL2_PATH "${CMAKE_CURRENT_LIST_DIR}/Libs/SDL2")
|
|
list(APPEND SDL2_MIXER_PATH "${CMAKE_CURRENT_LIST_DIR}/Libs/SDL2_mixer")
|
|
endif()
|
|
|
|
# Link mingw libs static
|
|
if(MINGW)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static")
|
|
endif()
|
|
|
|
if(APPLE)
|
|
set(MACOSX_RPATH)
|
|
set(CMAKE_BUILD_WITH_INSTALL_RPATH true)
|
|
set(CMAKE_INSTALL_RPATH "@executable_path/../Frameworks")
|
|
set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64")
|
|
list(APPEND SDL2_PATH "${CMAKE_CURRENT_LIST_DIR}/Libs")
|
|
list(APPEND SDL2_MIXER_PATH "${CMAKE_CURRENT_LIST_DIR}/Libs")
|
|
endif()
|
|
|
|
# SDL2main is not needed
|
|
set(SDL2_BUILDING_LIBRARY ON)
|
|
|
|
find_package(SDL2 REQUIRED)
|
|
FIND_PACKAGE(SDL2_mixer REQUIRED)
|
|
|
|
include_directories(${SDL2_INCLUDE_DIR} ${SDL2_MIXER_INCLUDE_DIR})
|
|
get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
|
|
foreach(dir ${dirs})
|
|
message(STATUS "Include dir='${dir}'")
|
|
endforeach()
|
|
|
|
|
|
|
|
set(SOURCE_FILES
|
|
SpaceCadetPinball/control.cpp
|
|
SpaceCadetPinball/control.h
|
|
SpaceCadetPinball/EmbeddedData.cpp
|
|
SpaceCadetPinball/EmbeddedData.h
|
|
SpaceCadetPinball/font_selection.cpp
|
|
SpaceCadetPinball/font_selection.h
|
|
SpaceCadetPinball/fullscrn.cpp
|
|
SpaceCadetPinball/fullscrn.h
|
|
SpaceCadetPinball/gdrv.cpp
|
|
SpaceCadetPinball/gdrv.h
|
|
SpaceCadetPinball/GroupData.cpp
|
|
SpaceCadetPinball/GroupData.h
|
|
SpaceCadetPinball/high_score.cpp
|
|
SpaceCadetPinball/high_score.h
|
|
SpaceCadetPinball/loader.cpp
|
|
SpaceCadetPinball/loader.h
|
|
SpaceCadetPinball/maths.cpp
|
|
SpaceCadetPinball/maths.h
|
|
SpaceCadetPinball/midi.cpp
|
|
SpaceCadetPinball/midi.h
|
|
SpaceCadetPinball/nudge.cpp
|
|
SpaceCadetPinball/nudge.h
|
|
SpaceCadetPinball/options.cpp
|
|
SpaceCadetPinball/options.h
|
|
SpaceCadetPinball/partman.cpp
|
|
SpaceCadetPinball/partman.h
|
|
SpaceCadetPinball/pb.cpp
|
|
SpaceCadetPinball/pb.h
|
|
SpaceCadetPinball/pch.h
|
|
SpaceCadetPinball/proj.cpp
|
|
SpaceCadetPinball/proj.h
|
|
SpaceCadetPinball/render.cpp
|
|
SpaceCadetPinball/render.h
|
|
SpaceCadetPinball/score.cpp
|
|
SpaceCadetPinball/score.h
|
|
SpaceCadetPinball/Sound.cpp
|
|
SpaceCadetPinball/Sound.h
|
|
SpaceCadetPinball/SpaceCadetPinball.cpp
|
|
SpaceCadetPinball/TBall.cpp
|
|
SpaceCadetPinball/TBall.h
|
|
SpaceCadetPinball/TBlocker.cpp
|
|
SpaceCadetPinball/TBlocker.h
|
|
SpaceCadetPinball/TBumper.cpp
|
|
SpaceCadetPinball/TBumper.h
|
|
SpaceCadetPinball/TCircle.cpp
|
|
SpaceCadetPinball/TCircle.h
|
|
SpaceCadetPinball/TCollisionComponent.cpp
|
|
SpaceCadetPinball/TCollisionComponent.h
|
|
SpaceCadetPinball/TComponentGroup.cpp
|
|
SpaceCadetPinball/TComponentGroup.h
|
|
SpaceCadetPinball/TDemo.cpp
|
|
SpaceCadetPinball/TDemo.h
|
|
SpaceCadetPinball/TDrain.cpp
|
|
SpaceCadetPinball/TDrain.h
|
|
SpaceCadetPinball/TEdgeBox.h
|
|
SpaceCadetPinball/TEdgeManager.cpp
|
|
SpaceCadetPinball/TEdgeManager.h
|
|
SpaceCadetPinball/TEdgeSegment.cpp
|
|
SpaceCadetPinball/TEdgeSegment.h
|
|
SpaceCadetPinball/TFlagSpinner.cpp
|
|
SpaceCadetPinball/TFlagSpinner.h
|
|
SpaceCadetPinball/TFlipper.cpp
|
|
SpaceCadetPinball/TFlipper.h
|
|
SpaceCadetPinball/TFlipperEdge.cpp
|
|
SpaceCadetPinball/TFlipperEdge.h
|
|
SpaceCadetPinball/TGate.cpp
|
|
SpaceCadetPinball/TGate.h
|
|
SpaceCadetPinball/THole.cpp
|
|
SpaceCadetPinball/THole.h
|
|
SpaceCadetPinball/timer.cpp
|
|
SpaceCadetPinball/timer.h
|
|
SpaceCadetPinball/TKickback.cpp
|
|
SpaceCadetPinball/TKickback.h
|
|
SpaceCadetPinball/TKickout.cpp
|
|
SpaceCadetPinball/TKickout.h
|
|
SpaceCadetPinball/TLight.cpp
|
|
SpaceCadetPinball/TLight.h
|
|
SpaceCadetPinball/TLightBargraph.cpp
|
|
SpaceCadetPinball/TLightBargraph.h
|
|
SpaceCadetPinball/TLightGroup.cpp
|
|
SpaceCadetPinball/TLightGroup.h
|
|
SpaceCadetPinball/TLightRollover.cpp
|
|
SpaceCadetPinball/TLightRollover.h
|
|
SpaceCadetPinball/TLine.cpp
|
|
SpaceCadetPinball/TLine.h
|
|
SpaceCadetPinball/TOneway.cpp
|
|
SpaceCadetPinball/TOneway.h
|
|
SpaceCadetPinball/TPinballComponent.cpp
|
|
SpaceCadetPinball/TPinballComponent.h
|
|
SpaceCadetPinball/TPinballTable.cpp
|
|
SpaceCadetPinball/TPinballTable.h
|
|
SpaceCadetPinball/TPlunger.cpp
|
|
SpaceCadetPinball/TPlunger.h
|
|
SpaceCadetPinball/TPopupTarget.cpp
|
|
SpaceCadetPinball/TPopupTarget.h
|
|
SpaceCadetPinball/TRamp.cpp
|
|
SpaceCadetPinball/TRamp.h
|
|
SpaceCadetPinball/translations.cpp
|
|
SpaceCadetPinball/translations.h
|
|
SpaceCadetPinball/TRollover.cpp
|
|
SpaceCadetPinball/TRollover.h
|
|
SpaceCadetPinball/TSink.cpp
|
|
SpaceCadetPinball/TSink.h
|
|
SpaceCadetPinball/TSoloTarget.cpp
|
|
SpaceCadetPinball/TSoloTarget.h
|
|
SpaceCadetPinball/TSound.cpp
|
|
SpaceCadetPinball/TSound.h
|
|
SpaceCadetPinball/TTableLayer.cpp
|
|
SpaceCadetPinball/TTableLayer.h
|
|
SpaceCadetPinball/TTextBox.cpp
|
|
SpaceCadetPinball/TTextBox.h
|
|
SpaceCadetPinball/TTextBoxMessage.cpp
|
|
SpaceCadetPinball/TTextBoxMessage.h
|
|
SpaceCadetPinball/TTimer.cpp
|
|
SpaceCadetPinball/TTimer.h
|
|
SpaceCadetPinball/TTripwire.cpp
|
|
SpaceCadetPinball/TTripwire.h
|
|
SpaceCadetPinball/TWall.cpp
|
|
SpaceCadetPinball/TWall.h
|
|
SpaceCadetPinball/winmain.cpp
|
|
SpaceCadetPinball/winmain.h
|
|
SpaceCadetPinball/zdrv.cpp
|
|
SpaceCadetPinball/zdrv.h
|
|
SpaceCadetPinball/imconfig.h
|
|
SpaceCadetPinball/imgui_internal.h
|
|
SpaceCadetPinball/imgui.cpp
|
|
SpaceCadetPinball/imgui.h
|
|
SpaceCadetPinball/imgui_sdl.cpp
|
|
SpaceCadetPinball/imgui_sdl.h
|
|
SpaceCadetPinball/imgui_draw.cpp
|
|
SpaceCadetPinball/imgui_widgets.cpp
|
|
SpaceCadetPinball/imgui_tables.cpp
|
|
SpaceCadetPinball/imgui_demo.cpp
|
|
SpaceCadetPinball/imgui_impl_sdl.cpp
|
|
SpaceCadetPinball/imgui_impl_sdl.h
|
|
SpaceCadetPinball/imgui_impl_sdlrenderer.h
|
|
SpaceCadetPinball/imgui_impl_sdlrenderer.cpp
|
|
SpaceCadetPinball/imstb_textedit.h
|
|
SpaceCadetPinball/imstb_rectpack.h
|
|
SpaceCadetPinball/imstb_truetype.h
|
|
SpaceCadetPinball/DebugOverlay.cpp
|
|
SpaceCadetPinball/DebugOverlay.h
|
|
)
|
|
|
|
# On Windows, include resource file with the icon
|
|
if(WIN32)
|
|
set_source_files_properties(SpaceCadetPinball/SpaceCadetPinball.rc LANGUAGE RC)
|
|
list(APPEND SOURCE_FILES SpaceCadetPinball/SpaceCadetPinball.rc)
|
|
endif(WIN32)
|
|
|
|
add_executable(SpaceCadetPinball ${SOURCE_FILES})
|
|
|
|
# Skip pch on foreign code
|
|
set_source_files_properties(
|
|
SpaceCadetPinball/imgui.cpp
|
|
SpaceCadetPinball/imgui_sdl.cpp
|
|
SpaceCadetPinball/imgui_draw.cpp
|
|
SpaceCadetPinball/imgui_widgets.cpp
|
|
SpaceCadetPinball/imgui_tables.cpp
|
|
SpaceCadetPinball/imgui_demo.cpp
|
|
SpaceCadetPinball/imgui_impl_sdl.cpp
|
|
SpaceCadetPinball/imgui_impl_sdlrenderer.cpp
|
|
PROPERTIES SKIP_PRECOMPILE_HEADERS 1
|
|
)
|
|
|
|
if(${CMAKE_VERSION} VERSION_GREATER "3.16.0" OR ${CMAKE_VERSION} VERSION_EQUAL "3.16.0")
|
|
target_precompile_headers(SpaceCadetPinball
|
|
PUBLIC
|
|
SpaceCadetPinball/pch.h
|
|
)
|
|
endif()
|
|
|
|
target_link_libraries(SpaceCadetPinball ${SDL2_LIBRARY} ${SDL2_MIXER_LIBRARY})
|
|
|
|
# On Windows, copy DLL to output
|
|
if(WIN32)
|
|
list(GET SDL2_LIBRARY -1 SDL2_DLL_PATH)
|
|
list(GET SDL2_MIXER_LIBRARY -1 SDL2_MIXER_DLL_PATH)
|
|
get_filename_component(SDL2_DLL_PATH ${SDL2_DLL_PATH} DIRECTORY)
|
|
get_filename_component(SDL2_MIXER_DLL_PATH ${SDL2_MIXER_DLL_PATH} DIRECTORY)
|
|
if(MINGW)
|
|
string(REGEX REPLACE "lib$" "bin" SDL2_DLL_PATH ${SDL2_DLL_PATH})
|
|
string(REGEX REPLACE "lib$" "bin" SDL2_MIXER_DLL_PATH ${SDL2_MIXER_DLL_PATH})
|
|
endif()
|
|
message(STATUS "copy paths='${SDL2_DLL_PATH}' '${SDL2_MIXER_DLL_PATH}'")
|
|
add_custom_command(TARGET SpaceCadetPinball POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${SDL2_DLL_PATH}/SDL2.dll" $<TARGET_FILE_DIR:SpaceCadetPinball>
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${SDL2_MIXER_DLL_PATH}/SDL2_mixer.dll" $<TARGET_FILE_DIR:SpaceCadetPinball>
|
|
)
|
|
endif()
|
|
|
|
if(UNIX AND NOT APPLE)
|
|
include(GNUInstallDirs)
|
|
install(TARGETS "${PROJECT_NAME}" RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
|
|
install(FILES "${CMAKE_SOURCE_DIR}/Platform/Linux/${PROJECT_NAME}.desktop" DESTINATION "share/applications")
|
|
install(FILES "${CMAKE_SOURCE_DIR}/Platform/Linux/${PROJECT_NAME}.metainfo.xml" DESTINATION "share/metainfo")
|
|
foreach(S 16 32 48 128 192)
|
|
install(FILES "${CMAKE_SOURCE_DIR}/${PROJECT_NAME}/Icon_${S}x${S}.png" DESTINATION
|
|
"share/icons/hicolor/${S}x${S}/apps" RENAME "${PROJECT_NAME}.png")
|
|
endforeach(S)
|
|
endif()
|