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

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)

# Target: lifter
set(lifter_SOURCES
	"lifter/GEPTracker.cpp"
	"lifter/OperandUtils.cpp"
	"lifter/PathSolver.cpp"
	"lifter/Semantics.cpp"
	"lifter/lifter.cpp"
	"lifter/utils.cpp"
	"lifter/CustomPasses.hpp"
	"lifter/GEPTracker.h"
	"lifter/OperandUtils.h"
	"lifter/PathSolver.h"
	"lifter/Semantics.h"
	"lifter/includes.h"
	"lifter/utils.h"
	cmake.toml
)

add_executable(lifter)

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

target_compile_features(lifter PRIVATE
	cxx_std_20
)

if(CMAKE_SYSTEM_NAME MATCHES "Linux") # linux
	target_compile_options(lifter PRIVATE
		-g
	)
endif()

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

if(WIN32) # windows
	target_link_libraries(lifter PRIVATE
		Zydis
		LLVM-Wrapper
		linux-pe
		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()
