# This file is automatically generated from cmake.toml - DO NOT EDIT
# See https://github.com/build-cpp/cmkr for more information

cmake_minimum_required(VERSION 3.15)

if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
	message(FATAL_ERROR "In-tree builds are not supported. Run CMake from a separate directory: cmake -B build")
endif()

# Regenerate CMakeLists.txt automatically in the root project
set(CMKR_ROOT_PROJECT OFF)
if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
	set(CMKR_ROOT_PROJECT ON)

	# Bootstrap cmkr
	include(cmkr.cmake OPTIONAL RESULT_VARIABLE CMKR_INCLUDE_RESULT)
	if(CMKR_INCLUDE_RESULT)
		cmkr()
	endif()

	# Enable folder support
	set_property(GLOBAL PROPERTY USE_FOLDERS ON)
endif()

# Create a configure-time dependency on cmake.toml to improve IDE support
if(CMKR_ROOT_PROJECT)
	configure_file(cmake.toml cmake.toml COPYONLY)
endif()

project(automatamp-proj)

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")

set(ASMJIT_STATIC ON CACHE BOOL "" FORCE)

if ("${CMAKE_BUILD_TYPE}" MATCHES "Release")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MT")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MT")

    # Statically compile runtime
    string(REGEX REPLACE "/MD" "/MT" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
    string(REGEX REPLACE "/MD" "/MT" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
    string(REGEX REPLACE "/MD" "/MT" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
    string(REGEX REPLACE "/MD" "/MT" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")

    set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded")
    message(NOTICE "Building in Release mode")
endif()

include(FetchContent)

message(STATUS "Fetching asmjit (2a706fd2ba355808cada31ac1eed8ce28caa6b37)...")
FetchContent_Declare(asmjit
	GIT_REPOSITORY
		"https://github.com/asmjit/asmjit.git"
	GIT_TAG
		2a706fd2ba355808cada31ac1eed8ce28caa6b37
)
FetchContent_MakeAvailable(asmjit)

message(STATUS "Fetching bddisasm (v1.34.10)...")
FetchContent_Declare(bddisasm
	GIT_REPOSITORY
		"https://github.com/bitdefender/bddisasm"
	GIT_TAG
		v1.34.10
)
FetchContent_MakeAvailable(bddisasm)

message(STATUS "Fetching safetyhook (e175896c67abf49360acafe8879205a138fe6b2b)...")
FetchContent_Declare(safetyhook
	GIT_REPOSITORY
		"https://github.com/cursey/safetyhook"
	GIT_TAG
		e175896c67abf49360acafe8879205a138fe6b2b
)
FetchContent_MakeAvailable(safetyhook)

message(STATUS "Fetching flatbuffers (v2.0.0)...")
FetchContent_Declare(flatbuffers
	GIT_REPOSITORY
		"https://github.com/google/flatbuffers"
	GIT_TAG
		v2.0.0
)
FetchContent_MakeAvailable(flatbuffers)

# Target spdlog
set(CMKR_TARGET spdlog)
set(spdlog_SOURCES "")

list(APPEND spdlog_SOURCES
	"dependencies/submodules/spdlog/src/async.cpp"
	"dependencies/submodules/spdlog/src/cfg.cpp"
	"dependencies/submodules/spdlog/src/color_sinks.cpp"
	"dependencies/submodules/spdlog/src/file_sinks.cpp"
	"dependencies/submodules/spdlog/src/fmt.cpp"
	"dependencies/submodules/spdlog/src/spdlog.cpp"
	"dependencies/submodules/spdlog/src/stdout_sinks.cpp"
)

list(APPEND spdlog_SOURCES
	cmake.toml
)

set(CMKR_SOURCES ${spdlog_SOURCES})
add_library(spdlog STATIC)

if(spdlog_SOURCES)
	target_sources(spdlog PRIVATE ${spdlog_SOURCES})
endif()

source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${spdlog_SOURCES})

target_compile_definitions(spdlog PUBLIC
	SPDLOG_COMPILED_LIB
)

target_include_directories(spdlog PUBLIC
	"dependencies/submodules/spdlog/include"
)

unset(CMKR_TARGET)
unset(CMKR_SOURCES)

# Target glm_static
set(CMKR_TARGET glm_static)
set(glm_static_SOURCES "")

list(APPEND glm_static_SOURCES
	"dependencies/submodules/glm/glm/detail/glm.cpp"
)

list(APPEND glm_static_SOURCES
	cmake.toml
)

set(CMKR_SOURCES ${glm_static_SOURCES})
add_library(glm_static STATIC)

if(glm_static_SOURCES)
	target_sources(glm_static PRIVATE ${glm_static_SOURCES})
endif()

source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${glm_static_SOURCES})

target_include_directories(glm_static PUBLIC
	"dependencies/submodules/glm"
)

unset(CMKR_TARGET)
unset(CMKR_SOURCES)

# Target enet
set(CMKR_TARGET enet)
set(enet_SOURCES "")

list(APPEND enet_SOURCES
	"dependencies/submodules/enet/callbacks.c"
	"dependencies/submodules/enet/compress.c"
	"dependencies/submodules/enet/host.c"
	"dependencies/submodules/enet/list.c"
	"dependencies/submodules/enet/packet.c"
	"dependencies/submodules/enet/peer.c"
	"dependencies/submodules/enet/protocol.c"
	"dependencies/submodules/enet/unix.c"
	"dependencies/submodules/enet/win32.c"
)

list(APPEND enet_SOURCES
	cmake.toml
)

set(CMKR_SOURCES ${enet_SOURCES})
add_library(enet STATIC)

if(enet_SOURCES)
	target_sources(enet PRIVATE ${enet_SOURCES})
endif()

source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${enet_SOURCES})

target_include_directories(enet PUBLIC
	"dependencies/submodules/enet/include"
)

target_link_libraries(enet PUBLIC
	ws2_32
	winmm
)

unset(CMKR_TARGET)
unset(CMKR_SOURCES)

# Target imgui
set(CMKR_TARGET imgui)
set(imgui_SOURCES "")

list(APPEND imgui_SOURCES
	"dependencies/submodules/imgui/imgui.cpp"
	"dependencies/submodules/imgui/imgui_demo.cpp"
	"dependencies/submodules/imgui/imgui_draw.cpp"
	"dependencies/submodules/imgui/imgui_tables.cpp"
	"dependencies/submodules/imgui/imgui_widgets.cpp"
)

list(APPEND imgui_SOURCES
	cmake.toml
)

set(CMKR_SOURCES ${imgui_SOURCES})
add_library(imgui STATIC)

if(imgui_SOURCES)
	target_sources(imgui PRIVATE ${imgui_SOURCES})
endif()

source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${imgui_SOURCES})

target_compile_definitions(imgui PUBLIC
	"IMGUI_USER_CONFIG=\"${CMAKE_SOURCE_DIR}/src/automata-imgui/automata_imconfig.hpp\""
)

target_include_directories(imgui PUBLIC
	"dependencies/submodules/imgui"
	"src/automata-imgui"
)

unset(CMKR_TARGET)
unset(CMKR_SOURCES)

# Target utility
set(CMKR_TARGET utility)
set(utility_SOURCES "")

list(APPEND utility_SOURCES
	"shared/utility/Address.cpp"
	"shared/utility/Config.cpp"
	"shared/utility/Crc32.cpp"
	"shared/utility/FunctionHook.cpp"
	"shared/utility/HttpClient.cpp"
	"shared/utility/Input.cpp"
	"shared/utility/Memory.cpp"
	"shared/utility/Module.cpp"
	"shared/utility/Patch.cpp"
	"shared/utility/Pattern.cpp"
	"shared/utility/PointerHook.cpp"
	"shared/utility/RTTI.cpp"
	"shared/utility/Registry.cpp"
	"shared/utility/Scan.cpp"
	"shared/utility/String.cpp"
	"shared/utility/Thread.cpp"
	"shared/utility/VehHook.cpp"
	"shared/utility/VtableHook.cpp"
	"shared/utility/Address.hpp"
	"shared/utility/Config.hpp"
	"shared/utility/Crc32.hpp"
	"shared/utility/FunctionHook.hpp"
	"shared/utility/HttpClient.hpp"
	"shared/utility/Input.hpp"
	"shared/utility/Memory.hpp"
	"shared/utility/Module.hpp"
	"shared/utility/Patch.hpp"
	"shared/utility/Pattern.hpp"
	"shared/utility/PointerHook.hpp"
	"shared/utility/RTTI.hpp"
	"shared/utility/Registry.hpp"
	"shared/utility/Scan.hpp"
	"shared/utility/String.hpp"
	"shared/utility/Thread.hpp"
	"shared/utility/VehHook.hpp"
	"shared/utility/VtableHook.hpp"
)

list(APPEND utility_SOURCES
	cmake.toml
)

set(CMKR_SOURCES ${utility_SOURCES})
add_library(utility STATIC)

if(utility_SOURCES)
	target_sources(utility PRIVATE ${utility_SOURCES})
endif()

source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${utility_SOURCES})

target_compile_features(utility PUBLIC
	cxx_std_20
)

target_compile_options(utility PUBLIC
	"/EHa"
	"/MP"
)

target_link_libraries(utility PUBLIC
	spdlog
	minhook
)

unset(CMKR_TARGET)
unset(CMKR_SOURCES)

# Target minhook
set(CMKR_TARGET minhook)
set(minhook_SOURCES "")

list(APPEND minhook_SOURCES
	"dependencies/submodules/minhook/src/buffer.c"
	"dependencies/submodules/minhook/src/hde/hde32.c"
	"dependencies/submodules/minhook/src/hde/hde64.c"
	"dependencies/submodules/minhook/src/hook.c"
	"dependencies/submodules/minhook/src/trampoline.c"
)

list(APPEND minhook_SOURCES
	cmake.toml
)

set(CMKR_SOURCES ${minhook_SOURCES})
add_library(minhook STATIC)

if(minhook_SOURCES)
	target_sources(minhook PRIVATE ${minhook_SOURCES})
endif()

source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${minhook_SOURCES})

target_include_directories(minhook PUBLIC
	"dependencies/submodules/minhook/include"
	"dependencies/submodules/minhook/src/hde"
)

unset(CMKR_TARGET)
unset(CMKR_SOURCES)

# Target mruby
set(CMKR_TARGET mruby)
set(mruby_SOURCES "")

list(APPEND mruby_SOURCES
	"dependencies/submodules/mruby/src/array.c"
	"dependencies/submodules/mruby/src/backtrace.c"
	"dependencies/submodules/mruby/src/class.c"
	"dependencies/submodules/mruby/src/codedump.c"
	"dependencies/submodules/mruby/src/compar.c"
	"dependencies/submodules/mruby/src/crc.c"
	"dependencies/submodules/mruby/src/debug.c"
	"dependencies/submodules/mruby/src/dump.c"
	"dependencies/submodules/mruby/src/enum.c"
	"dependencies/submodules/mruby/src/error.c"
	"dependencies/submodules/mruby/src/etc.c"
	"dependencies/submodules/mruby/src/fmt_fp.c"
	"dependencies/submodules/mruby/src/gc.c"
	"dependencies/submodules/mruby/src/hash.c"
	"dependencies/submodules/mruby/src/init.c"
	"dependencies/submodules/mruby/src/kernel.c"
	"dependencies/submodules/mruby/src/load.c"
	"dependencies/submodules/mruby/src/numeric.c"
	"dependencies/submodules/mruby/src/object.c"
	"dependencies/submodules/mruby/src/pool.c"
	"dependencies/submodules/mruby/src/print.c"
	"dependencies/submodules/mruby/src/proc.c"
	"dependencies/submodules/mruby/src/range.c"
	"dependencies/submodules/mruby/src/state.c"
	"dependencies/submodules/mruby/src/string.c"
	"dependencies/submodules/mruby/src/symbol.c"
	"dependencies/submodules/mruby/src/variable.c"
	"dependencies/submodules/mruby/src/version.c"
	"dependencies/submodules/mruby/src/vm.c"
	"dependencies/submodules/mruby/mrblib/init_mrblib.c"
)

list(APPEND mruby_SOURCES
	cmake.toml
)

set(CMKR_SOURCES ${mruby_SOURCES})
add_library(mruby STATIC)

if(mruby_SOURCES)
	target_sources(mruby PRIVATE ${mruby_SOURCES})
endif()

source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${mruby_SOURCES})

target_compile_definitions(mruby PUBLIC
	DISABLE_GEMS
)

target_include_directories(mruby PUBLIC
	"dependencies/submodules/mruby/include"
)

unset(CMKR_TARGET)
unset(CMKR_SOURCES)

# Target sdk
set(CMKR_TARGET sdk)
set(sdk_SOURCES "")

list(APPEND sdk_SOURCES
	"shared/sdk/CameraGame.cpp"
	"shared/sdk/Entity.cpp"
	"shared/sdk/EntityList.cpp"
	"shared/sdk/Game.cpp"
	"shared/sdk/ScriptFunctions.cpp"
	"shared/sdk/hap/StateObject.cpp"
	"shared/sdk/hap/TokenCategory.cpp"
	"shared/sdk/hap/scene_state/SceneStateSystem.cpp"
	"shared/sdk/mruby.cpp"
	"shared/sdk/Behavior.hpp"
	"shared/sdk/BehaviorAppBase.hpp"
	"shared/sdk/CameraGame.hpp"
	"shared/sdk/EmBase.hpp"
	"shared/sdk/Entity.hpp"
	"shared/sdk/EntityList.hpp"
	"shared/sdk/Enums.hpp"
	"shared/sdk/Game.hpp"
	"shared/sdk/Hw/cVec4.hpp"
	"shared/sdk/Math.hpp"
	"shared/sdk/Model.hpp"
	"shared/sdk/NPC.hpp"
	"shared/sdk/NierRTTI.hpp"
	"shared/sdk/Obj.hpp"
	"shared/sdk/Parts.hpp"
	"shared/sdk/Pl0000.hpp"
	"shared/sdk/ScriptFunctions.hpp"
	"shared/sdk/Xml.hpp"
	"shared/sdk/XmlBinary.hpp"
	"shared/sdk/app/EntityGet.hpp"
	"shared/sdk/app/Puid.hpp"
	"shared/sdk/hap/SceneStateName.hpp"
	"shared/sdk/hap/State.hpp"
	"shared/sdk/hap/StateObject.hpp"
	"shared/sdk/hap/TokenCategory.hpp"
	"shared/sdk/hap/VariantMap.hpp"
	"shared/sdk/hap/scene_pos/ScenePosSystem.hpp"
	"shared/sdk/hap/scene_state/SceneStateSystem.hpp"
	"shared/sdk/hap/string_t.hpp"
	"shared/sdk/lib/Downcastable.hpp"
	"shared/sdk/lib/HashedString.hpp"
	"shared/sdk/lib/Noncopyable.hpp"
	"shared/sdk/mruby.hpp"
	"shared/sdk/regenny/Behavior.hpp"
	"shared/sdk/regenny/BehaviorAppBase.hpp"
	"shared/sdk/regenny/BehaviorExtension.hpp"
	"shared/sdk/regenny/Camera.hpp"
	"shared/sdk/regenny/CameraApp.hpp"
	"shared/sdk/regenny/CameraBase.hpp"
	"shared/sdk/regenny/CameraData.hpp"
	"shared/sdk/regenny/CameraGame.hpp"
	"shared/sdk/regenny/CameraTransform.hpp"
	"shared/sdk/regenny/CharacterController.hpp"
	"shared/sdk/regenny/EModel.hpp"
	"shared/sdk/regenny/ERunSpeedType.hpp"
	"shared/sdk/regenny/Em0000.hpp"
	"shared/sdk/regenny/Entity.hpp"
	"shared/sdk/regenny/ExActionState.hpp"
	"shared/sdk/regenny/ExAtkCombo.hpp"
	"shared/sdk/regenny/ExBaseInfo.hpp"
	"shared/sdk/regenny/ExCatch.hpp"
	"shared/sdk/regenny/ExCollision.hpp"
	"shared/sdk/regenny/ExExpInfo.hpp"
	"shared/sdk/regenny/ExHackingInfo.hpp"
	"shared/sdk/regenny/ExLayoutParent.hpp"
	"shared/sdk/regenny/ExLockOn.hpp"
	"shared/sdk/regenny/ExNpc.hpp"
	"shared/sdk/regenny/ExWaypoint.hpp"
	"shared/sdk/regenny/Matrix4x4f.hpp"
	"shared/sdk/regenny/Model.hpp"
	"shared/sdk/regenny/Obj.hpp"
	"shared/sdk/regenny/Parts.hpp"
	"shared/sdk/regenny/Pl0000.hpp"
	"shared/sdk/regenny/RTL_CRITICAL_SECTION.hpp"
	"shared/sdk/regenny/UnkEntityData.hpp"
	"shared/sdk/regenny/Vector3f.hpp"
	"shared/sdk/regenny/Vector4f.hpp"
	"shared/sdk/regenny/WpAnimName.hpp"
	"shared/sdk/regenny/Xml.hpp"
	"shared/sdk/regenny/XmlBinary.hpp"
	"shared/sdk/regenny/cHitPrim.hpp"
	"shared/sdk/regenny/cModelExtendWork.hpp"
	"shared/sdk/regenny/cModelExtendWorkBase.hpp"
	"shared/sdk/regenny/cObjHit.hpp"
	"shared/sdk/sys/StringSystem.hpp"
)

list(APPEND sdk_SOURCES
	cmake.toml
)

set(CMKR_SOURCES ${sdk_SOURCES})
add_library(sdk STATIC)

if(sdk_SOURCES)
	target_sources(sdk PRIVATE ${sdk_SOURCES})
endif()

source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${sdk_SOURCES})

target_compile_features(sdk PUBLIC
	cxx_std_20
)

target_compile_options(sdk PUBLIC
	"/EHa"
	"/MP"
)

target_include_directories(sdk PUBLIC
	"shared/"
	"include/"
)

target_link_libraries(sdk PUBLIC
	glm_static
	spdlog
	mruby
)

target_link_libraries(sdk PRIVATE
	utility
)

unset(CMKR_TARGET)
unset(CMKR_SOURCES)

# Target automatamp
set(CMKR_TARGET automatamp)
set(automatamp_SOURCES "")

list(APPEND automatamp_SOURCES
	"src/AutomataMP.cpp"
	"src/DllMain.cpp"
	"src/ExceptionHandler.cpp"
	"src/Mods.cpp"
	"src/automata-imgui/imgui_impl_dx11.cpp"
	"src/automata-imgui/imgui_impl_dx12.cpp"
	"src/automata-imgui/imgui_impl_win32.cpp"
	"src/hooks/D3D11Hook.cpp"
	"src/hooks/D3D12Hook.cpp"
	"src/hooks/WindowsMessageHook.cpp"
	"src/mods/AnimTester.cpp"
	"src/mods/AutomataMPConfig.cpp"
	"src/mods/AutomataMPMod.cpp"
	"src/mods/BuddyFeatures.cpp"
	"src/mods/Explorer.cpp"
	"src/mods/multiplayer/EntitySync.cpp"
	"src/mods/multiplayer/MidHooks.cpp"
	"src/mods/multiplayer/NierClient.cpp"
	"src/mods/multiplayer/Player.cpp"
	"src/mods/multiplayer/PlayerHook.cpp"
	"src/AutomataMP.hpp"
	"src/ExceptionHandler.hpp"
	"src/LicenseStrings.hpp"
	"src/Mod.hpp"
	"src/Mods.hpp"
	"src/automata-imgui/automata_imconfig.hpp"
	"src/automata-imgui/font_robotomedium.hpp"
	"src/hooks/D3D11Hook.hpp"
	"src/hooks/D3D12Hook.hpp"
	"src/hooks/WindowsMessageHook.hpp"
	"src/mods/AnimTester.hpp"
	"src/mods/AutomataMPConfig.hpp"
	"src/mods/AutomataMPMod.hpp"
	"src/mods/BuddyFeatures.hpp"
	"src/mods/Explorer.hpp"
	"src/mods/multiplayer/EntitySync.hpp"
	"src/mods/multiplayer/MidHooks.hpp"
	"src/mods/multiplayer/NierClient.hpp"
	"src/mods/multiplayer/Player.hpp"
	"src/mods/multiplayer/PlayerHook.hpp"
	"src/automata-imgui/imgui_impl_dx11.h"
	"src/automata-imgui/imgui_impl_dx12.h"
	"src/automata-imgui/imgui_impl_win32.h"
	"src/mods/multiplayer/schema/Packets_generated.h"
)

list(APPEND automatamp_SOURCES
	cmake.toml
)

set(CMKR_SOURCES ${automatamp_SOURCES})
add_library(automatamp SHARED)

if(automatamp_SOURCES)
	target_sources(automatamp PRIVATE ${automatamp_SOURCES})
endif()

source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${automatamp_SOURCES})

target_compile_definitions(automatamp PUBLIC
	_WINSOCKAPI_
)

target_compile_features(automatamp PUBLIC
	cxx_std_20
)

target_compile_options(automatamp PUBLIC
	"/GS-"
	"/bigobj"
	"/EHa"
	"/MP"
)

target_include_directories(automatamp PUBLIC
	"shared/"
	"src/"
	"include/"
	"dependencies/enetpp/include"
	"dependencies/nlohmann"
)

target_link_libraries(automatamp PUBLIC
	imgui
	sdk
	utility
	enet
	shlwapi
	d3d11
	flatbuffers
	safetyhook
	asmjit
	winhttp
)

set_target_properties(automatamp PROPERTIES
	OUTPUT_NAME
		dinput8
	RUNTIME_OUTPUT_DIRECTORY_RELEASE
		"${CMAKE_BINARY_DIR}/bin/${CMKR_TARGET}"
	RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO
		"${CMAKE_BINARY_DIR}/bin/${CMKR_TARGET}"
	LIBRARY_OUTPUT_DIRECTORY_RELEASE
		"${CMAKE_BINARY_DIR}/lib/${CMKR_TARGET}"
	LIBRARY_OUTPUT_DIRECTORY_RELWITHDEBINFO
		"${CMAKE_BINARY_DIR}/lib/${CMKR_TARGET}"
	ARCHIVE_OUTPUT_DIRECTORY_RELEASE
		"${CMAKE_BINARY_DIR}/lib/${CMKR_TARGET}"
	ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO
		"${CMAKE_BINARY_DIR}/lib/${CMKR_TARGET}"
)

unset(CMKR_TARGET)
unset(CMKR_SOURCES)

