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

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)

	# Enable folder support
	set_property(GLOBAL PROPERTY USE_FOLDERS ON)

	# Create a configure-time dependency on cmake.toml to improve IDE support
	set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS cmake.toml)
endif()

project(ElfBug_tests
	LANGUAGES
		C
		CXX
)

include(FetchContent)

# Fix warnings about DOWNLOAD_EXTRACT_TIMESTAMP
if(POLICY CMP0135)
	cmake_policy(SET CMP0135 NEW)
endif()
message(STATUS "Fetching Catch2 (v3.14.0)...")
FetchContent_Declare(Catch2
	GIT_REPOSITORY
		"https://github.com/catchorg/Catch2"
	GIT_TAG
		v3.14.0
	GIT_SHALLOW
		ON
)
FetchContent_MakeAvailable(Catch2)

# Target: ElfBug_tests
set(ElfBug_tests_SOURCES
	SymbolHelper.h
	TestHarness.h
	cmake.toml
	tests.cpp
)

add_executable(ElfBug_tests)

target_sources(ElfBug_tests PRIVATE ${ElfBug_tests_SOURCES})
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${ElfBug_tests_SOURCES})

target_compile_definitions(ElfBug_tests PRIVATE
	"ELFBUG_TESTS_TARGETS_DIR=\"${CMAKE_BINARY_DIR}/tests/targets\""
)

target_link_libraries(ElfBug_tests PRIVATE
	ElfBug
	Catch2::Catch2WithMain
)

set_target_properties(ElfBug_tests PROPERTIES
	RUNTIME_OUTPUT_DIRECTORY
		"${CMAKE_BINARY_DIR}/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 ElfBug_tests)
endif()

set(CMKR_TARGET ElfBug_tests)
list(APPEND CMAKE_MODULE_PATH "${catch2_SOURCE_DIR}/extras")
include(Catch)
catch_discover_tests(ElfBug_tests)

# Target: elfbug_fixture_end_immediately
set(elfbug_fixture_end_immediately_SOURCES
	cmake.toml
	"targets/end_immediately.cpp"
)

add_executable(elfbug_fixture_end_immediately)

target_sources(elfbug_fixture_end_immediately PRIVATE ${elfbug_fixture_end_immediately_SOURCES})
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${elfbug_fixture_end_immediately_SOURCES})

target_compile_options(elfbug_fixture_end_immediately PRIVATE
	-g
	-O0
	-pie
)

target_link_options(elfbug_fixture_end_immediately PRIVATE
	-pie
)

set_target_properties(elfbug_fixture_end_immediately PROPERTIES
	OUTPUT_NAME
		end_immediately
	RUNTIME_OUTPUT_DIRECTORY
		"${CMAKE_BINARY_DIR}/tests/targets"
)

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

# Target: elfbug_fixture_run_endlessly
set(elfbug_fixture_run_endlessly_SOURCES
	cmake.toml
	"targets/run_endlessly.cpp"
)

add_executable(elfbug_fixture_run_endlessly)

target_sources(elfbug_fixture_run_endlessly PRIVATE ${elfbug_fixture_run_endlessly_SOURCES})
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${elfbug_fixture_run_endlessly_SOURCES})

target_compile_options(elfbug_fixture_run_endlessly PRIVATE
	-g
	-O0
	-pie
)

target_link_options(elfbug_fixture_run_endlessly PRIVATE
	-pie
)

set_target_properties(elfbug_fixture_run_endlessly PROPERTIES
	OUTPUT_NAME
		run_endlessly
	RUNTIME_OUTPUT_DIRECTORY
		"${CMAKE_BINARY_DIR}/tests/targets"
)

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

# Target: elfbug_fixture_hello_elfbug
set(elfbug_fixture_hello_elfbug_SOURCES
	cmake.toml
	"targets/hello_elfbug.cpp"
)

add_executable(elfbug_fixture_hello_elfbug)

target_sources(elfbug_fixture_hello_elfbug PRIVATE ${elfbug_fixture_hello_elfbug_SOURCES})
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${elfbug_fixture_hello_elfbug_SOURCES})

target_compile_options(elfbug_fixture_hello_elfbug PRIVATE
	-g
	-O0
	-pie
)

target_link_options(elfbug_fixture_hello_elfbug PRIVATE
	-pie
)

set_target_properties(elfbug_fixture_hello_elfbug PROPERTIES
	OUTPUT_NAME
		hello_elfbug
	RUNTIME_OUTPUT_DIRECTORY
		"${CMAKE_BINARY_DIR}/tests/targets"
)

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

# Target: elfbug_fixture_segfault
set(elfbug_fixture_segfault_SOURCES
	cmake.toml
	"targets/segfault.cpp"
)

add_executable(elfbug_fixture_segfault)

target_sources(elfbug_fixture_segfault PRIVATE ${elfbug_fixture_segfault_SOURCES})
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${elfbug_fixture_segfault_SOURCES})

target_compile_options(elfbug_fixture_segfault PRIVATE
	-g
	-O0
	-pie
)

target_link_options(elfbug_fixture_segfault PRIVATE
	-pie
)

set_target_properties(elfbug_fixture_segfault PROPERTIES
	OUTPUT_NAME
		segfault
	RUNTIME_OUTPUT_DIRECTORY
		"${CMAKE_BINARY_DIR}/tests/targets"
)

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

# Target: elfbug_fixture_exit_code_42
set(elfbug_fixture_exit_code_42_SOURCES
	cmake.toml
	"targets/exit_code_42.cpp"
)

add_executable(elfbug_fixture_exit_code_42)

target_sources(elfbug_fixture_exit_code_42 PRIVATE ${elfbug_fixture_exit_code_42_SOURCES})
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${elfbug_fixture_exit_code_42_SOURCES})

target_compile_options(elfbug_fixture_exit_code_42 PRIVATE
	-g
	-O0
	-pie
)

target_link_options(elfbug_fixture_exit_code_42 PRIVATE
	-pie
)

set_target_properties(elfbug_fixture_exit_code_42 PROPERTIES
	OUTPUT_NAME
		exit_code_42
	RUNTIME_OUTPUT_DIRECTORY
		"${CMAKE_BINARY_DIR}/tests/targets"
)

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

# Target: elfbug_fixture_multi_threaded
set(elfbug_fixture_multi_threaded_SOURCES
	cmake.toml
	"targets/multi_threaded.cpp"
)

add_executable(elfbug_fixture_multi_threaded)

target_sources(elfbug_fixture_multi_threaded PRIVATE ${elfbug_fixture_multi_threaded_SOURCES})
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${elfbug_fixture_multi_threaded_SOURCES})

target_compile_options(elfbug_fixture_multi_threaded PRIVATE
	-g
	-O0
	-pie
)

target_link_options(elfbug_fixture_multi_threaded PRIVATE
	-pie
)

target_link_libraries(elfbug_fixture_multi_threaded PRIVATE
	pthread
)

set_target_properties(elfbug_fixture_multi_threaded PROPERTIES
	OUTPUT_NAME
		multi_threaded
	RUNTIME_OUTPUT_DIRECTORY
		"${CMAKE_BINARY_DIR}/tests/targets"
)

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