# 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.16)

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()

set(CMKR_ROOT_PROJECT OFF)
if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
	set(CMKR_ROOT_PROJECT ON)

	# Bootstrap cmkr and automatically regenerate CMakeLists.txt
	include("cmake/cmkr.cmake;" OPTIONAL RESULT_VARIABLE CMKR_INCLUDE_RESULT)
	if(CMKR_INCLUDE_RESULT)
		cmkr()
	endif()

	# Enable folder support
	set_property(GLOBAL PROPERTY USE_FOLDERS ON)

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

# Variables
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -gfull")

project(Mergen)

# Packages
find_package(Iced-Wrapper REQUIRED)

find_package(LLVM-Wrapper REQUIRED)

include(FetchContent)

# Fix warnings about DOWNLOAD_EXTRACT_TIMESTAMP
if(POLICY CMP0135)
	cmake_policy(SET CMP0135 NEW)
endif()
message(STATUS "Fetching linux-pe (be6d1f6)...")
FetchContent_Declare(linux-pe SYSTEM
	GIT_REPOSITORY
		"https://github.com/can1357/linux-pe"
	GIT_TAG
		be6d1f6
)
FetchContent_MakeAvailable(linux-pe)

if(ICED_NOT_FOUND) # NOTE: unnamed condition
	message(STATUS "Fetching Zydis (v4.1.0)...")
	FetchContent_Declare(Zydis SYSTEM
		GIT_REPOSITORY
			"https://github.com/zyantific/zydis"
		GIT_TAG
			v4.1.0
	)
	FetchContent_MakeAvailable(Zydis)

endif()
message(STATUS "Fetching magic_enum (a413fcc)...")
FetchContent_Declare(magic_enum SYSTEM
	GIT_REPOSITORY
		"https://github.com/Neargye/magic_enum"
	GIT_TAG
		a413fcc
)
FetchContent_MakeAvailable(magic_enum)

# Target: lifter
set(lifter_SOURCES
	"lifter/FunctionSignatures.cpp"
	"lifter/GEPTracker.cpp"
	"lifter/PathSolver.cpp"
	"lifter/lifter.cpp"
	"lifter/test_instructions.cpp"
	"lifter/utils.cpp"
	"lifter/CommonMnemonics.h"
	"lifter/CommonRegisters.h"
	"lifter/GEPTracker.h"
	"lifter/OperandUtils.h"
	"lifter/PathSolver.h"
	"lifter/Semantics.h"
	"lifter/ZydisDisassembler_mnemonics.h"
	"lifter/ZydisDisassembler_registers.h"
	"lifter/icedDisassembler_mnemonics.h"
	"lifter/icedDisassembler_registers.h"
	"lifter/includes.h"
	"lifter/test_instructions.h"
	"lifter/utils.h"
	"lifter/CommonDisassembler.hpp"
	"lifter/CustomPasses.hpp"
	"lifter/FunctionSignatures.hpp"
	"lifter/ZydisDisassembler.hpp"
	"lifter/icedDisassembler.hpp"
	"lifter/lifterClass.hpp"
	"lifter/tester.hpp"
	"lifter/GEPTracker.ipp"
	"lifter/OperandUtils.ipp"
	"lifter/PathSolver.ipp"
	"lifter/Semantics.ipp"
	cmake.toml
)

add_executable(lifter)

target_sources(lifter PRIVATE ${lifter_SOURCES})
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${lifter_SOURCES})

if(DEFINED MERGEN_TEST) # testmode
	target_compile_definitions(lifter PRIVATE
		MERGEN_TEST
	)
endif()

target_compile_features(lifter PRIVATE
	cxx_std_20
)

target_link_libraries(lifter PRIVATE
	LLVM-Wrapper
	linux-pe
	magic_enum
)

if(ICED_NOT_FOUND) # NOTE: unnamed condition
	target_link_libraries(lifter PRIVATE
		Zydis
	)
endif()

if(ICED_FOUND) # NOTE: unnamed condition
	target_link_libraries(lifter PRIVATE
		Iced_Wrapper
	)
endif()

if(WIN32) # windows
	target_link_libraries(lifter PRIVATE
		Ws2_32
	)
endif()

get_directory_property(CMKR_VS_STARTUP_PROJECT DIRECTORY ${PROJECT_SOURCE_DIR} DEFINITION VS_STARTUP_PROJECT)
if(NOT CMKR_VS_STARTUP_PROJECT)
	set_property(DIRECTORY ${PROJECT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT lifter)
endif()
