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

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

# Target: obfuscator-lib
set(obfuscator-lib_SOURCES
	"lib/analysis/analysis.cpp"
	"lib/analysis/bb_decomp/bb_decomp.cpp"
	"lib/analysis/bb_decomp/jumptables.cpp"
	"lib/analysis/passes/misc/bb_insn_passes.cpp"
	"lib/config_parser/config_parser.cpp"
	"lib/easm/assembler/assembler.cpp"
	"lib/easm/disassembler/disassembler.cpp"
	"lib/func_parser/map/map.cpp"
	"lib/func_parser/parser.cpp"
	"lib/func_parser/pdb/detail/reader_v7.cpp"
	"lib/func_parser/pdb/pdb.cpp"
	"lib/mathop/operations/impl/add.cpp"
	"lib/mathop/operations/impl/dec.cpp"
	"lib/mathop/operations/impl/inc.cpp"
	"lib/mathop/operations/impl/neg.cpp"
	"lib/mathop/operations/impl/not.cpp"
	"lib/mathop/operations/impl/sub.cpp"
	"lib/mathop/operations/impl/xor.cpp"
	"lib/obfuscator/obfuscator.cpp"
	"lib/obfuscator/transforms/startup.cpp"
	"lib/pe/pe.cpp"
	"lib/pe/rebuilder/detail/copy_sections.cpp"
	"lib/pe/rebuilder/detail/init_header.cpp"
	"lib/pe/rebuilder/detail/update_checksum.cpp"
	"lib/pe/rebuilder/detail/update_relocations.cpp"
	"lib/analysis/analysis.hpp"
	"lib/analysis/bb_decomp/bb_decomp.hpp"
	"lib/analysis/common/common.hpp"
	"lib/analysis/common/debug.hpp"
	"lib/analysis/common/provider.hpp"
	"lib/analysis/lru_reg/lru_reg.hpp"
	"lib/analysis/observer/observer.hpp"
	"lib/analysis/passes/collect_img_references.hpp"
	"lib/analysis/passes/collect_lookup_table.hpp"
	"lib/analysis/passes/label_references.hpp"
	"lib/analysis/passes/lru_reg.hpp"
	"lib/analysis/passes/misc/bb_insn_passes.hpp"
	"lib/analysis/passes/reloc_marker.hpp"
	"lib/analysis/var_alloc/var_alloc.hpp"
	"lib/cli/cli.hpp"
	"lib/config_parser/config_parser.hpp"
	"lib/config_parser/structs.hpp"
	"lib/easm/assembler/assembler.hpp"
	"lib/easm/cursor/cursor.hpp"
	"lib/easm/debug/debug.hpp"
	"lib/easm/disassembler/disassembler.hpp"
	"lib/easm/easm.hpp"
	"lib/easm/misc/misc.hpp"
	"lib/easm/misc/reg_convert.hpp"
	"lib/func_parser/common/combiner.hpp"
	"lib/func_parser/common/common.hpp"
	"lib/func_parser/common/sanitizer.hpp"
	"lib/func_parser/map/map.hpp"
	"lib/func_parser/parser.hpp"
	"lib/func_parser/pdb/detail/parser_v7.hpp"
	"lib/func_parser/pdb/detail/structs.hpp"
	"lib/func_parser/pdb/pdb.hpp"
	"lib/mathop/mathop.hpp"
	"lib/mathop/operations/impl/util.hpp"
	"lib/mathop/operations/operation.hpp"
	"lib/mathop/operations/operations.hpp"
	"lib/obfuscator/config_merger/config_merger.hpp"
	"lib/obfuscator/function.hpp"
	"lib/obfuscator/obfuscator.hpp"
	"lib/obfuscator/transforms/configs.hpp"
	"lib/obfuscator/transforms/scheduler.hpp"
	"lib/obfuscator/transforms/transform.hpp"
	"lib/obfuscator/transforms/transforms/bogus_control_flow.hpp"
	"lib/obfuscator/transforms/transforms/constant_crypt.hpp"
	"lib/obfuscator/transforms/transforms/decomp_break.hpp"
	"lib/obfuscator/transforms/transforms/substitution.hpp"
	"lib/obfuscator/transforms/transforms/util/anti_decompilers.hpp"
	"lib/obfuscator/transforms/transforms/util/bcf.hpp"
	"lib/obfuscator/transforms/transforms/util/opaque_predicates.hpp"
	"lib/obfuscator/transforms/types.hpp"
	"lib/pe/arch/arch.hpp"
	"lib/pe/common/common.hpp"
	"lib/pe/common/types.hpp"
	"lib/pe/debug/debug.hpp"
	"lib/pe/pe.hpp"
	"lib/pe/rebuilder/detail/common.hpp"
	"lib/pe/rebuilder/rebuilder.hpp"
	"lib/util/defer.hpp"
	"lib/util/files.hpp"
	"lib/util/format.hpp"
	"lib/util/iterators.hpp"
	"lib/util/logger.hpp"
	"lib/util/memory/address.hpp"
	"lib/util/memory/casts.hpp"
	"lib/util/memory/reader.hpp"
	"lib/util/passes.hpp"
	"lib/util/platform.hpp"
	"lib/util/progress.hpp"
	"lib/util/random.hpp"
	"lib/util/sections.hpp"
	"lib/util/stopwatch.hpp"
	"lib/util/string_parser.hpp"
	"lib/util/structs.hpp"
	"lib/util/types.hpp"
)

add_library(obfuscator-lib INTERFACE)

target_sources(obfuscator-lib INTERFACE ${obfuscator-lib_SOURCES})
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${obfuscator-lib_SOURCES})

add_library(obfuscator::lib ALIAS obfuscator-lib)
target_compile_features(obfuscator-lib INTERFACE
	cxx_std_23
)

target_include_directories(obfuscator-lib INTERFACE
	"lib/"
)

target_link_libraries(obfuscator-lib INTERFACE
	zasm
	linux-pe
	magic_enum
)

# Target: obfuscator
set(obfuscator_SOURCES
	"bin/entry.cpp"
	cmake.toml
)

add_executable(obfuscator)

target_sources(obfuscator PRIVATE ${obfuscator_SOURCES})
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${obfuscator_SOURCES})

target_compile_definitions(obfuscator PRIVATE
	NOMINMAX
)

target_compile_features(obfuscator PRIVATE
	cxx_std_23
)

if(UNIX) # unix
	target_compile_options(obfuscator PRIVATE
		-stdlib=libc++
	)
endif()

if(MSVC) # msvc
	target_compile_options(obfuscator PRIVATE
		"/wd4661"
		"/MP"
	)
endif()

if(UNIX) # unix
	target_link_options(obfuscator PRIVATE
		-fuse-ld=lld
		"-Wl,-L/usr/local/lib/"
	)
endif()

target_include_directories(obfuscator PRIVATE
	"bin/"
)

target_link_libraries(obfuscator PRIVATE
	obfuscator::lib
)

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

# Target: obfuscator-tests
if(OBFUSCATOR_BUILD_TESTS) # build-tests
	set(obfuscator-tests_SOURCES
		"tests/analysis/bb_decomp/bb_decomp.llvm.cpp"
		"tests/analysis/bb_decomp/bb_decomp.msvc.cpp"
		"tests/func_parser/map/map.ida.cpp"
		"tests/func_parser/map/map.llvm.cpp"
		"tests/func_parser/map/map.msvc.cpp"
		"tests/func_parser/pdb/pdb.llvm.cpp"
		"tests/func_parser/pdb/pdb.msvc.cpp"
		"tests/tests_util.hpp"
		cmake.toml
	)

	add_executable(obfuscator-tests)

	target_sources(obfuscator-tests PRIVATE ${obfuscator-tests_SOURCES})
	source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${obfuscator-tests_SOURCES})

	target_compile_definitions(obfuscator-tests PRIVATE
		NOMINMAX
	)

	target_compile_features(obfuscator-tests PRIVATE
		cxx_std_23
	)

	if(UNIX) # unix
		target_compile_options(obfuscator-tests PRIVATE
			-stdlib=libc++
		)
	endif()

	if(MSVC) # msvc
		target_compile_options(obfuscator-tests PRIVATE
			"/wd4661"
			"/MP"
		)
	endif()

	if(UNIX) # unix
		target_link_options(obfuscator-tests PRIVATE
			-fuse-ld=lld
			"-Wl,-L/usr/local/lib/"
		)
	endif()

	target_include_directories(obfuscator-tests PRIVATE
		"tests/"
	)

	target_link_libraries(obfuscator-tests PRIVATE
		obfuscator::lib
		GTest::gtest_main
	)

	set_target_properties(obfuscator-tests PROPERTIES
		PROJECT_LABEL
			tests
	)

	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 obfuscator-tests)
	endif()

	set(CMKR_TARGET obfuscator-tests)
	FetchContent_MakeAvailable(resources)
	target_compile_definitions(obfuscator-tests PRIVATE OBFUSCATOR_RESOURCES_PATH="${resources_SOURCE_DIR}")

endif()
enable_testing()

if(OBFUSCATOR_BUILD_TESTS) # build-tests
	add_test(
		NAME
			tests
		WORKING_DIRECTORY
			"${CMAKE_CURRENT_LIST_DIR}/"
		COMMAND
			"$<TARGET_FILE:obfuscator-tests>"
	)

endif()
