find_package(Vulkan REQUIRED) find_package(SDL3 CONFIG REQUIRED) find_program(GLSLC glslc REQUIRED) set(MT_NATIVE_VERT_SPV "${CMAKE_CURRENT_BINARY_DIR}/native.vert.spv") set(MT_NATIVE_FRAG_SPV "${CMAKE_CURRENT_BINARY_DIR}/native.frag.spv") add_custom_command(OUTPUT "${MT_NATIVE_VERT_SPV}" COMMAND "${GLSLC}" -fshader-stage=vert "${CMAKE_CURRENT_SOURCE_DIR}/native.vert" -o "${MT_NATIVE_VERT_SPV}" DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/native.vert") add_custom_command(OUTPUT "${MT_NATIVE_FRAG_SPV}" COMMAND "${GLSLC}" -fshader-stage=frag "${CMAKE_CURRENT_SOURCE_DIR}/native.frag" -o "${MT_NATIVE_FRAG_SPV}" DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/native.frag") add_custom_target(mt_native_shaders DEPENDS "${MT_NATIVE_VERT_SPV}" "${MT_NATIVE_FRAG_SPV}") set(MT_NATIVE_RENDER_SOURCES main.cpp stb_image_impl.cpp "${PROJECT_SOURCE_DIR}/extension/src/dxt.cpp" ) if(TARGET port_platform AND TARGET mtpython) list(APPEND MT_NATIVE_RENDER_SOURCES "${PROJECT_SOURCE_DIR}/extension/tests/port_login_flow_server.cpp" "${PROJECT_SOURCE_DIR}/extension/src/net/classic/classic_cipher.cpp" ) endif() if(ANDROID) # SDLActivity loads libmain.so; Android does not launch a native executable. set(MT_NATIVE_TARGET main) add_library(${MT_NATIVE_TARGET} SHARED ${MT_NATIVE_RENDER_SOURCES}) else() set(MT_NATIVE_TARGET mt_native_render) add_executable(${MT_NATIVE_TARGET} ${MT_NATIVE_RENDER_SOURCES}) endif() if(APPLE) set_target_properties(${MT_NATIVE_TARGET} PROPERTIES OSX_ARCHITECTURES "${CMAKE_HOST_SYSTEM_PROCESSOR}" ) endif() add_dependencies(${MT_NATIVE_TARGET} mt_native_shaders) target_include_directories(${MT_NATIVE_TARGET} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/third_party" "${PROJECT_SOURCE_DIR}/extension/src" "${PROJECT_SOURCE_DIR}/extension/src/platform/EterLib") if(NOT ANDROID) add_custom_command(TARGET ${MT_NATIVE_TARGET} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${MT_NATIVE_VERT_SPV}" "$/native.vert.spv" COMMAND ${CMAKE_COMMAND} -E copy_if_different "${MT_NATIVE_FRAG_SPV}" "$/native.frag.spv") endif() target_link_libraries(${MT_NATIVE_TARGET} PRIVATE Vulkan::Vulkan SDL3::SDL3) if(APPLE) target_link_libraries(${MT_NATIVE_TARGET} PRIVATE "-framework AudioToolbox") endif() if(TARGET port_platform AND TARGET mtpython) target_compile_definitions(${MT_NATIVE_TARGET} PRIVATE MT_NATIVE_HAS_LIVE_CLIENT=1) target_link_libraries(${MT_NATIVE_TARGET} PRIVATE port_platform) if(TARGET mtpython_stdlib) add_dependencies(${MT_NATIVE_TARGET} mtpython_stdlib) if(NOT ANDROID) add_custom_command(TARGET ${MT_NATIVE_TARGET} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${MT_PYTHON_STDLIB_ZIP}" "$/python27.zip") endif() endif() endif() if(ANDROID) # Add this directory to the SDL Android app's assets.srcDirs. set(MT_NATIVE_ANDROID_ASSETS "${CMAKE_CURRENT_BINARY_DIR}/android-assets") add_custom_target(mt_native_android_assets ALL COMMAND ${CMAKE_COMMAND} -E make_directory "${MT_NATIVE_ANDROID_ASSETS}" COMMAND ${CMAKE_COMMAND} -E copy_if_different "${MT_NATIVE_VERT_SPV}" "${MT_NATIVE_ANDROID_ASSETS}/native.vert.spv" COMMAND ${CMAKE_COMMAND} -E copy_if_different "${MT_NATIVE_FRAG_SPV}" "${MT_NATIVE_ANDROID_ASSETS}/native.frag.spv" DEPENDS mt_native_shaders) if(TARGET mtpython_stdlib) add_dependencies(mt_native_android_assets mtpython_stdlib) add_custom_command(TARGET mt_native_android_assets POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${MT_PYTHON_STDLIB_ZIP}" "${MT_NATIVE_ANDROID_ASSETS}/python27.zip") endif() endif()