set(VITA3K_ORG_NAME "Vita3K")
set(VITA3K_APP_NAME "Vita3K")
set(VITA3K_APP_ID "org.vita3k.vita3k")
set(VITA3K_APP_VER_HI 0)
set(VITA3K_APP_VER_MID 2)
set(VITA3K_APP_VER_LO 1)
set(VITA3K_APP_VERSION "v${VITA3K_APP_VER_HI}.${VITA3K_APP_VER_MID}.${VITA3K_APP_VER_LO}")

execute_process(
	COMMAND git rev-list HEAD --count
	WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
	OUTPUT_VARIABLE GIT_COUNT
	OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(
	COMMAND git rev-parse --short HEAD
	WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
	OUTPUT_VARIABLE GIT_HASH
	OUTPUT_STRIP_TRAILING_WHITESPACE)

# Value is different when is PR
if("$ENV{GITHUB_EVENT_NAME}" STREQUAL "pull_request")
	set(GIT_BRANCH "$ENV{GITHUB_HEAD_REF}")
	if(WIN32)
		set(CMD powershell "(Get-Content $ENV{GITHUB_EVENT_PATH} | ConvertFrom-Json).pull_request.head.repo.html_url")
	else()
		set(CMD bash -c "jq .pull_request.head.repo.html_url $ENV{GITHUB_EVENT_PATH} | tr -d \\\" ")
	endif()
else()
	execute_process(
		COMMAND git rev-parse --abbrev-ref HEAD
		WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
		OUTPUT_VARIABLE GIT_BRANCH
		OUTPUT_STRIP_TRAILING_WHITESPACE)
	set(CMD git config --get remote.origin.url)
endif()

execute_process(COMMAND ${CMD}
	WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
	OUTPUT_VARIABLE GIT_REPO
	OUTPUT_STRIP_TRAILING_WHITESPACE)

set(VITA3K_OFFICIAL_UPDATE_BUILD 0)

if (NOT GIT_REPO STREQUAL "")
	string(FIND ${GIT_REPO} "git@github.com:" IS_GIT_SSH)
	if (IS_GIT_SSH EQUAL 0)
		string(REPLACE "git@github.com:" "" GIT_REPO ${GIT_REPO})
	else()
		string(REPLACE "https://github.com/" "" GIT_REPO ${GIT_REPO})
	endif()
	string(REPLACE "/" ";" GIT_REPO ${GIT_REPO})
	list(POP_BACK GIT_REPO)
endif()

if(GIT_HASH STREQUAL "")
	set(VITA3K_GIT_REV "Development version")
	set(GIT_COUNT 0)
elseif((GIT_REPO STREQUAL "Vita3K") AND ((GIT_BRANCH STREQUAL "master") OR (GIT_BRANCH STREQUAL "HEAD")))
	set(VITA3K_GIT_REV "${GIT_HASH}")
	set(VITA3K_OFFICIAL_UPDATE_BUILD 1)
else()
	set(VITA3K_GIT_REV "${GIT_HASH}-${GIT_REPO}/${GIT_BRANCH}")
endif()

file(WRITE ${CMAKE_BINARY_DIR}/vita3k/config/gitver.h
	"#define APP_VER_HI ${VITA3K_APP_VER_HI}\n"
	"#define APP_VER_MID ${VITA3K_APP_VER_MID}\n"
	"#define APP_VER_LO ${VITA3K_APP_VER_LO}\n"
	"#define APP_NUMBER ${GIT_COUNT}\n"
)

include_directories(${CMAKE_BINARY_DIR}/vita3k/config)

if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
	set(LINUX TRUE)

	find_package(X11)
	if(X11_FOUND)
		add_compile_definitions(HAVE_X11)
	endif()

	find_package(PkgConfig)
	if(PkgConfig_FOUND)
		pkg_check_modules(WAYLAND wayland-client)
		if(WAYLAND_FOUND)
			add_compile_definitions(HAVE_WAYLAND)
		endif()
	endif()
endif()

get_boost()

include_directories(${Boost_INCLUDE_DIRS})

if (USE_DISCORD_RICH_PRESENCE)
	add_definitions(-DUSE_DISCORD)
endif()

set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

if(NOT MSVC)
	add_compile_options(-Wformat -Werror=format-security)
endif()

if(NOT ANDROID)
	include(${CMAKE_SOURCE_DIR}/cmake/qt6.cmake)
endif()

add_subdirectory(app)
add_subdirectory(audio)
add_subdirectory(camera)
add_subdirectory(cheat)
add_subdirectory(input)
add_subdirectory(config)
add_subdirectory(cpu)
add_subdirectory(ctrl)
add_subdirectory(codec)
add_subdirectory(compat)
add_subdirectory(dialog)
add_subdirectory(display)
add_subdirectory(features)
add_subdirectory(glutil)
add_subdirectory(updater)
if(NOT ANDROID)
	add_subdirectory(gui-qt)
endif()
add_subdirectory(gxm)
add_subdirectory(ime)
add_subdirectory(net)
add_subdirectory(ngs)
add_subdirectory(np)
add_subdirectory(emuenv)
add_subdirectory(http)
add_subdirectory(io)
add_subdirectory(kernel)
add_subdirectory(lang)
add_subdirectory(mem)
add_subdirectory(patch)
add_subdirectory(module)
add_subdirectory(modules)
add_subdirectory(motion)
add_subdirectory(nids)
add_subdirectory(overlay)
add_subdirectory(regmgr)
add_subdirectory(renderer)
add_subdirectory(rtc)
add_subdirectory(sdl-frontend)
add_subdirectory(shader)
add_subdirectory(threads)
add_subdirectory(touch)
add_subdirectory(util)
add_subdirectory(gdbstub)
add_subdirectory(packages)
add_subdirectory(vkutil)

if(ANDROID)
	add_library(vita3k SHARED
		android/jni/android_state.cpp
		android/jni/filesystem_android.cpp
		android/jni/main_android.cpp
		android/jni/native_bootstrap.cpp
		android/jni/native_config.cpp
		android/jni/native_drivers.cpp
		android/jni/native_users.cpp
		android/jni/native_apps.cpp
		android/jni/native_trophies.cpp
		android/jni/native_install.cpp
		android/jni/native_session.cpp
		android/jni/input_overlay.cpp
		android/jni/ime.cpp
		interface.cpp
		performance.cpp
	)
	target_include_directories(vita3k PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
	target_link_libraries(vita3k PRIVATE SDL3::SDL3 pugixml::pugixml android)

	if(CMAKE_BUILD_TYPE STREQUAL "Release")
		# we need to exclude all symbols except SDL
		set(LIBS_TO_EXCLUDE
			"libboost_container.a"
			"libboost_date_time.a"
			"libboost_exception.a"
			"libboost_program_options.a"
			"libboost_regex.a"
			"libssl.a"
			"libfmt.a"
			"libcrypto.a"
			"libavcodec.a"
			"libavdevice.a"
			"libavfilter.a"
			"libavformat.a"
			"libavutil.a"
			"libswresample.a"
			"libswscale.a"
			)
		set(LIBS_TO_EXCLUDE_FLAG "")
		foreach(lib IN LISTS LIBS_TO_EXCLUDE)
			string(APPEND LIBS_TO_EXCLUDE_FLAG " -Wl,--exclude-libs,${lib}")
		endforeach()
		set_target_properties(vita3k PROPERTIES LINK_FLAGS "${LIBS_TO_EXCLUDE_FLAG}")
	endif()
else()
	add_executable(vita3k MACOSX_BUNDLE main.cpp interface.cpp interface.h performance.cpp)
endif()

if(WIN32)
	# This file is a bit special, it is run before anything else and must be added here
	target_sources(vita3k PRIVATE util/src/vc_runtime_checker.cpp)
endif()

target_link_libraries(vita3k PRIVATE app audio cheat compat config ctrl dialog display ime lang gdbstub gxm io miniz modules motion packages patch renderer sdl-frontend shader touch util psvpfsparser)
if(NOT ANDROID)
	target_link_libraries(vita3k PRIVATE gui-qt)
endif()
if(USE_DISCORD_RICH_PRESENCE)
	target_link_libraries(vita3k PRIVATE discord-rpc)
endif()

if(NOT ANDROID)
	file(GLOB VITA3K_QT_TS_FILES CONFIGURE_DEPENDS
		"${CMAKE_SOURCE_DIR}/i18n/qt/*.ts")
	set(VITA3K_QT_QM_DIR "${CMAKE_BINARY_DIR}/qt_translations")
	set(VITA3K_QT_QM_FILES "")
	file(MAKE_DIRECTORY "${VITA3K_QT_QM_DIR}")

	foreach(ts_file IN LISTS VITA3K_QT_TS_FILES)
		get_filename_component(ts_name "${ts_file}" NAME_WE)
		set(qm_file "${VITA3K_QT_QM_DIR}/${ts_name}.qm")
		list(APPEND VITA3K_QT_QM_FILES "${qm_file}")
		add_custom_command(
			OUTPUT "${qm_file}"
			COMMAND ${CMAKE_COMMAND} -E make_directory "${VITA3K_QT_QM_DIR}"
			COMMAND $<TARGET_FILE:Qt6::lrelease> "${ts_file}" -qm "${qm_file}"
			DEPENDS "${ts_file}"
			VERBATIM)
	endforeach()

	add_custom_target(qt_app_translations DEPENDS ${VITA3K_QT_QM_FILES})
	add_dependencies(vita3k qt_app_translations)

	add_custom_target(update_qt_translations
		COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_SOURCE_DIR}/template"
		COMMAND $<TARGET_FILE:Qt6::lupdate>
			-no-obsolete
			-recursive
			"${CMAKE_CURRENT_SOURCE_DIR}/main.cpp"
			"${CMAKE_CURRENT_SOURCE_DIR}/gui-qt/src"
			"${CMAKE_CURRENT_SOURCE_DIR}/gui-qt/include"
			-ts "${CMAKE_SOURCE_DIR}/template/vita3k_template.ts"
		WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
		COMMENT "Generating the Qt translation template")
endif()

set_target_properties(vita3k PROPERTIES OUTPUT_NAME Vita3K)

if(NOT ANDROID)
	set_target_properties(vita3k PROPERTIES
		ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
		LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
		RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
endif()

if(APPLE)
	set(VITA3K_APPLE_ICON "${CMAKE_SOURCE_DIR}/dist/image/Vita3K.icon")
	set(VITA3K_ICON_SVG "${CMAKE_CURRENT_SOURCE_DIR}/${VITA3K_APP_ID}.svg")
	set(MAC_ICON_OUT "${CMAKE_CURRENT_BINARY_DIR}/app_icon")

	if(NOT XCODE_VERSION)
		execute_process(
			COMMAND xcodebuild -version
			OUTPUT_VARIABLE xcodebuild_version
			OUTPUT_STRIP_TRAILING_WHITESPACE
			ERROR_QUIET)
		if(xcodebuild_version MATCHES "Xcode ([0-9]+(\\.[0-9]+)+)")
			set(XCODE_VERSION ${CMAKE_MATCH_1})
		endif()
	endif()

	if(XCODE_VERSION VERSION_GREATER_EQUAL "26.0")
		if(CMAKE_GENERATOR STREQUAL "Xcode")
			# If Xcode generator AND have Xcode 26 or greater, have Xcode compile the icon
			target_sources(vita3k PRIVATE "${VITA3K_APPLE_ICON}")
			set_source_files_properties("${VITA3K_APPLE_ICON}" PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
			set_target_properties(vita3k PROPERTIES
				XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME "Vita3K"
				XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS "YES")
		else()
			# If not xcode generator but we have the required xcode, invoke actool manually to make an Assets.car + Vita3K.icns
			file(GLOB_RECURSE VITA3K_ICON_DEPS LIST_DIRECTORIES true CONFIGURE_DEPENDS "${VITA3K_APPLE_ICON}/*")
			add_custom_command(
				OUTPUT "${MAC_ICON_OUT}/Assets.car" "${MAC_ICON_OUT}/Vita3K.icns"
				COMMAND ${CMAKE_COMMAND} -E make_directory "${MAC_ICON_OUT}"
				COMMAND actool "${VITA3K_APPLE_ICON}"
					--compile "${MAC_ICON_OUT}"
					--app-icon Vita3K
					--include-all-app-icons
					--platform macosx
					--target-device mac
					--minimum-deployment-target "${CMAKE_OSX_DEPLOYMENT_TARGET}"
					--output-partial-info-plist "${MAC_ICON_OUT}/partial.plist" # plist unused but actool won't compile the icon without it
				DEPENDS "${VITA3K_APPLE_ICON}" ${VITA3K_ICON_DEPS}
				COMMENT "Compiling Vita3K.icon with actool"
				VERBATIM)
			set_source_files_properties(
				"${MAC_ICON_OUT}/Assets.car" "${MAC_ICON_OUT}/Vita3K.icns"
				PROPERTIES GENERATED TRUE MACOSX_PACKAGE_LOCATION "Resources")
			target_sources(vita3k PRIVATE "${MAC_ICON_OUT}/Assets.car" "${MAC_ICON_OUT}/Vita3K.icns")
			set(MACOSX_BUNDLE_ICON_FILE "Vita3K")

			# cmake writes the Info.plist as read only so undo it, set CFBundleIconName, redo it
			# CFBundleIconName is the new *OS key for dynamic/Liquid Glass icons. Xcode does this automatically
			add_custom_command(TARGET vita3k POST_BUILD
				COMMAND chmod u+w "$<TARGET_FILE_DIR:vita3k>/../Info.plist"
				COMMAND plutil -replace CFBundleIconName -string "Vita3K" "$<TARGET_FILE_DIR:vita3k>/../Info.plist"
				COMMAND chmod u-w "$<TARGET_FILE_DIR:vita3k>/../Info.plist"
				COMMENT "Setting CFBundleIconName for Assets.car icon"
				VERBATIM)
		endif()
	else()
		# Otherwise if Xcode tools are less than 26, generate an .icns from the svg so at least there's something
		set(VITA3K_ICONSET "${MAC_ICON_OUT}/Vita3K.iconset")
		set(VITA3K_ICON_1024 "${MAC_ICON_OUT}/icon_1024.png")
		set(VITA3K_ICNS "${MAC_ICON_OUT}/Vita3K.icns")

		set(VITA3K_ICON_CMDS "")
		foreach(size 16 32 128 256 512)
			math(EXPR size2x "${size} * 2")
			list(APPEND VITA3K_ICON_CMDS	# builds a command list
				COMMAND sips -z ${size} ${size} "${VITA3K_ICON_1024}"
					--out "${VITA3K_ICONSET}/icon_${size}x${size}.png"
				COMMAND sips -z ${size2x} ${size2x} "${VITA3K_ICON_1024}"
					--out "${VITA3K_ICONSET}/icon_${size}x${size}@2x.png")
		endforeach()

		add_custom_command(
			OUTPUT "${VITA3K_ICNS}"
			COMMAND ${CMAKE_COMMAND} -E make_directory "${VITA3K_ICONSET}"
			# sips can only convert from svg on macos 13+ which is our minimum version target anyhow
			COMMAND sips -s format png -z 1024 1024 "${VITA3K_ICON_SVG}" --out "${VITA3K_ICON_1024}"
			${VITA3K_ICON_CMDS}	# executes commands list
			COMMAND iconutil -c icns -o "${VITA3K_ICNS}" "${VITA3K_ICONSET}"
			DEPENDS "${VITA3K_ICON_SVG}"
			COMMENT "Manually building ${VITA3K_APP_ID}.svg into Vita3K.icns"
			VERBATIM)
		set_source_files_properties("${VITA3K_ICNS}" PROPERTIES
			GENERATED TRUE MACOSX_PACKAGE_LOCATION "Resources")
		target_sources(vita3k PRIVATE "${VITA3K_ICNS}")
		set(MACOSX_BUNDLE_ICON_FILE "Vita3K")
	endif()

	add_custom_command(
		TARGET vita3k
		POST_BUILD
		COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/../data" "$<TARGET_FILE_DIR:vita3k>/../Resources/data"
		COMMAND ${CMAKE_COMMAND} -E copy_directory "${VITA3K_QT_QM_DIR}" "$<TARGET_FILE_DIR:vita3k>/../Resources/translations"
		COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/shaders-builtin/" "$<TARGET_FILE_DIR:vita3k>/../Resources/shaders-builtin")
	if(USE_DISCORD_RICH_PRESENCE)
		if(ARCHITECTURE STREQUAL "x86_64")
			set(discord_dylib "${CMAKE_BINARY_DIR}/external/discord_game_sdk/lib/x86_64/discord_game_sdk.dylib")
		elseif(ARCHITECTURE STREQUAL "arm64")
			set(discord_dylib "${CMAKE_BINARY_DIR}/external/discord_game_sdk/lib/aarch64/discord_game_sdk.dylib")
		else() # macos universal build
			set(discord_dylib "${CMAKE_BINARY_DIR}/external/discord_game_sdk/lib/discord_game_sdk.dylib")
		endif()

		add_custom_command(
		TARGET vita3k
		POST_BUILD
		COMMAND ${CMAKE_COMMAND} -E copy_if_different "${discord_dylib}" "$<TARGET_FILE_DIR:vita3k>/../Resources")
	endif()
	set_target_properties(vita3k PROPERTIES LINK_FLAGS "-rpath @loader_path/../Frameworks/ -rpath @loader_path/../Resources/ -ld64")
	set(MACOSX_BUNDLE_GUI_IDENTIFIER "com.github.Vita3K.Vita3K")
	set(MACOSX_BUNDLE_BUNDLE_NAME "Vita3K")

	message(STATUS "MoltenVK dylib path: ${MOLTENVK_DYLIB}")
	target_sources(vita3k PRIVATE ${MOLTENVK_DYLIB})
	set_source_files_properties(${MOLTENVK_DYLIB} PROPERTIES MACOSX_PACKAGE_LOCATION Frameworks)

	qt_finalize_target(vita3k)
	if(MACDEPLOYQT_EXECUTABLE)
		add_custom_command(TARGET vita3k POST_BUILD
			COMMAND "${MACDEPLOYQT_EXECUTABLE}" "$<TARGET_FILE_DIR:vita3k>/../.." "$<$<CONFIG:Debug,RelWithDebInfo>:-no-strip>")
	endif()

	add_custom_command(
		TARGET vita3k
		POST_BUILD
		COMMAND codesign --force --deep --preserve-metadata=entitlements,requirements,flags,runtime --sign - "$<TARGET_FILE_DIR:vita3k>/../..")
elseif(LINUX)
	include("${CMAKE_SOURCE_DIR}/cmake/generate_metainfo.cmake")
	set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath='$ORIGIN'")
	include(GNUInstallDirs)
	install(TARGETS vita3k BUNDLE RUNTIME
		PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_EXECUTE WORLD_READ)
	install(DIRECTORY
		${CMAKE_CURRENT_SOURCE_DIR}/shaders-builtin
		${CMAKE_CURRENT_SOURCE_DIR}/icons
		${CMAKE_SOURCE_DIR}/data
		DESTINATION "${CMAKE_INSTALL_DATADIR}/Vita3K/")
	install(DIRECTORY
		"${VITA3K_QT_QM_DIR}/"
		DESTINATION "${CMAKE_INSTALL_DATADIR}/Vita3K/translations/")
	install(FILES
		"${CMAKE_CURRENT_SOURCE_DIR}/${VITA3K_APP_ID}.svg"
		PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ
		DESTINATION "${CMAKE_INSTALL_DATADIR}/icons/hicolor/scalable/apps/")
	install(FILES
		"${CMAKE_SOURCE_DIR}/dist/linux/${VITA3K_APP_ID}.metainfo.xml"
		PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ
		DESTINATION "${CMAKE_INSTALL_DATADIR}/metainfo/")
	install(FILES
		"${CMAKE_SOURCE_DIR}/dist/linux/${VITA3K_APP_ID}.desktop"
		PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ
		DESTINATION "${CMAKE_INSTALL_DATADIR}/applications/")
	install(FILES
		"${CMAKE_SOURCE_DIR}/COPYING.txt"
		PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ
		DESTINATION "${CMAKE_INSTALL_DATADIR}/licenses/${VITA3K_APP_NAME}/"
		RENAME "LICENSE")
	install(FILES
		"${CMAKE_SOURCE_DIR}/README.md"
		PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ
		DESTINATION "${CMAKE_INSTALL_DOCDIR}/")

	if(USE_DISCORD_RICH_PRESENCE AND ARCHITECTURE STREQUAL "x86_64")
		install(LIBRARY
			${CMAKE_BINARY_DIR}/external/discord_game_sdk/lib/x86_64/libdiscord_game_sdk.so
			PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ)
	endif()
	add_custom_command(
		TARGET vita3k
		POST_BUILD
		COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_SOURCE_DIR}/data" "$<TARGET_FILE_DIR:vita3k>/data"
		COMMAND ${CMAKE_COMMAND} -E copy_directory "${VITA3K_QT_QM_DIR}" "$<TARGET_FILE_DIR:vita3k>/translations"
		COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/shaders-builtin" "$<TARGET_FILE_DIR:vita3k>/shaders-builtin"
		COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/icons" "$<TARGET_FILE_DIR:vita3k>/icons"
		COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/COPYING.txt" "$<TARGET_FILE_DIR:vita3k>/COPYING.txt"
		COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/README.md" "$<TARGET_FILE_DIR:vita3k>/README.md"
		COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/dist/linux/${VITA3K_APP_ID}.metainfo.xml" "$<TARGET_FILE_DIR:vita3k>/${VITA3K_APP_ID}.metainfo.xml"
		COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/${VITA3K_APP_ID}.svg" "$<TARGET_FILE_DIR:vita3k>/${VITA3K_APP_ID}.svg"
	)
	if(USE_DISCORD_RICH_PRESENCE)
		add_custom_command(
		TARGET vita3k
		POST_BUILD
		COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_BINARY_DIR}/external/discord_game_sdk/lib/x86_64/libdiscord_game_sdk.so" "$<TARGET_FILE_DIR:vita3k>")
	endif()
elseif(WIN32)
	target_link_libraries(vita3k PRIVATE Version)
	target_sources(vita3k PRIVATE resource.h Vita3K.ico Vita3K.rc Windows.manifest)
	set_property(DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT vita3k)
	set_target_properties(vita3k PROPERTIES WIN32_EXECUTABLE TRUE VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/bin/$(Configuration)")
	add_custom_command(
		TARGET vita3k
		POST_BUILD
		COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/../data" "$<TARGET_FILE_DIR:vita3k>/data"
		COMMAND ${CMAKE_COMMAND} -E copy_directory "${VITA3K_QT_QM_DIR}" "$<TARGET_FILE_DIR:vita3k>/translations"
		COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/shaders-builtin" "$<TARGET_FILE_DIR:vita3k>/shaders-builtin"
		COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/icons" "$<TARGET_FILE_DIR:vita3k>/icons"
		COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/COPYING.txt" "$<TARGET_FILE_DIR:vita3k>/COPYING.txt"
	)
	if(USE_DISCORD_RICH_PRESENCE)
		add_custom_command(
		TARGET vita3k
		POST_BUILD
		COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_BINARY_DIR}/external/discord_game_sdk/lib/x86_64/discord_game_sdk.dll" "$<TARGET_FILE_DIR:vita3k>")
	endif()
	if(EXISTS "${OPENSSL_ROOT_DIR}")
		add_custom_command(
		TARGET vita3k
		POST_BUILD
		COMMAND ${CMAKE_COMMAND} -E copy_if_different "${OPENSSL_ROOT_DIR}/bin/libssl-4-x64.dll" "$<TARGET_FILE_DIR:vita3k>"
		COMMAND ${CMAKE_COMMAND} -E copy_if_different "${OPENSSL_ROOT_DIR}/bin/libcrypto-4-x64.dll" "$<TARGET_FILE_DIR:vita3k>")
	endif()
	if(WINDEPLOYQT_EXECUTABLE)
		add_custom_command(TARGET vita3k POST_BUILD
			COMMAND "${WINDEPLOYQT_EXECUTABLE}" --no-compiler-runtime --no-opengl-sw --no-patchqt
				--no-system-d3d-compiler --no-system-dxc-compiler
				--plugindir "$<IF:$<CXX_COMPILER_ID:MSVC>,$<TARGET_FILE_DIR:vita3k>/plugins,$<TARGET_FILE_DIR:vita3k>/share/qt6/plugins>"
				--translationdir "$<IF:$<CXX_COMPILER_ID:MSVC>,$<TARGET_FILE_DIR:vita3k>/translations,$<TARGET_FILE_DIR:vita3k>/share/qt6/translations>"
				--verbose 0 "$<TARGET_FILE:vita3k>")
	endif()
elseif(ANDROID)
	add_custom_command(
		TARGET vita3k
		POST_BUILD
		COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/../data" "${CMAKE_CURRENT_SOURCE_DIR}/../android/app/assets/data"
		COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/shaders-builtin" "${CMAKE_CURRENT_SOURCE_DIR}/../android/app/assets/shaders-builtin"
		COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/icons" "${CMAKE_CURRENT_SOURCE_DIR}/../android/app/assets/icons"
	)
endif()

if(TRACY_ENABLE_ON_CORE_COMPONENTS)
	# Enable Tracy profiling on the main compilation target
	target_link_libraries(vita3k PRIVATE tracy)
endif()
