# Code generated by Visual Studio kit, DO NOT EDIT.
cmake_minimum_required(VERSION 3.28)
project(hyperdbg C CXX)
set(CMAKE_CXX_STANDARD 23)
enable_language(ASM_MASM)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)

if(LINUX)

    message(STATUS "Building on Linux")
elseif(WIN32)
    message(STATUS "Building on Windows")
find_package(WDK REQUIRED)

	include_directories(
	       "dependencies/zydis/include"
	       "dependencies/zydis/src"
	       "dependencies/zydis/dependencies/zycore/include"
	)

	file(GLOB ZydisSourceFiles "dependencies/zydis/src/*.c")
	file(GLOB ZycoreSourceFiles "dependencies/zydis/dependencies/zycore/*.c")

	set(SourceFiles
	       ${ZydisSourceFiles}
	       ${ZycoreSourceFiles}
	       #        examples/ZydisWinKernel.c
	)

	add_definitions(
	       -DZYAN_NO_LIBC
	       -DZYDIS_NO_LIBC
	       -DZYCORE_STATIC_BUILD
	       -DZYDIS_STATIC_BUILD
	)

	wdk_add_library(zydisKernel
	       KMDF 1.15
	       ${SourceFiles}
	)
link_directories(libraries/kdserial/x64)
add_subdirectory(kdserial)
target_link_libraries(kdserial kdserialtransport kdhv kdtelemetry)


add_subdirectory(hyperlog)
link_directories(libraries/zydis/kernel)
add_subdirectory(hyperhv)
target_link_libraries(hyperhv Zycore Zydis)


add_subdirectory(hyperkd)
target_link_libraries(hyperkd hyperlog hyperhv kdserial)

endif()

#add_subdirectory(dependencies/pdbex/Source)

#add_subdirectory(symbol-parser)
#target_link_libraries(symbol-parser pdbex)

#target_link_libraries(script-engine symbol-parser)

#add_subdirectory(hyperdbg-test)

list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}")

#add_subdirectory(symbol-parser)
#target_link_libraries(symbol-parser pdbex)

#add_subdirectory(script-engine)
#target_link_libraries(script-engine symbol-parser)

add_subdirectory(script-engine)
#link_directories(libraries/zydis/user libraries/keystone/release-lib)
add_subdirectory(libhyperdbg)
find_package(Threads REQUIRED)
#target_link_libraries(libhyperdbg Zycore Zydis script-engine keystone Threads::Threads ${CMAKE_DL_LIBS})
target_link_libraries(libhyperdbg Zycore Zydis script-engine Threads::Threads ${CMAKE_DL_LIBS})

#
# Each library must define its own HYPERDBG_* macro so that the IMPORT_EXPORT_*
# annotations in include/SDK/imports/user/ resolve to the "export" form
# (visibility("default")) while it is being built, and to the "import" form in
# every other translation unit. This mirrors what the Windows .vcxproj files do
# with __declspec(dllexport)/dllimport.
#
target_compile_definitions(script-engine PRIVATE HYPERDBG_SCRIPT_ENGINE)
target_compile_definitions(libhyperdbg PRIVATE HYPERDBG_LIBHYPERDBG)

#
# The annotations above only mean something if the default visibility is hidden;
# otherwise every symbol is exported anyway and visibility("default") is a no-op.
# Hiding by default matches the Windows model (private unless dllexport-ed) and
# keeps each library's internal globals private, so same-named module-private
# globals in different libraries are no longer merged by the dynamic linker.
#
set_target_properties(script-engine libhyperdbg PROPERTIES
    C_VISIBILITY_PRESET   hidden
    CXX_VISIBILITY_PRESET hidden
    VISIBILITY_INLINES_HIDDEN ON
)

add_subdirectory(hyperdbg-cli)
target_link_libraries(hyperdbg-cli libhyperdbg)



#set(save_src_dir ${CMAKE_CURRENT_SOURCE_DIR}/examples)
#execute_process( COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/../examples ${save_src_dir})
#
#add_subdirectory(examples/kernel/hyperdbg_driver)
#target_link_libraries(hyperdbg_driver hyperlog hyperhv)
#
#
#add_subdirectory(examples/user/hyperdbg_app)
#target_link_libraries(hyperdbg_app libhyperdbg)

