project(Boot LANGUAGES C)

set(CMAKE_C_STANDARD_LIBRARIES "")
add_executable(${PROJECT_NAME})

target_sources(
	${PROJECT_NAME} PRIVATE
		Debug.c
		Guids.c
		Loader.c
		Main.c
		Memory.c
		String.c
)

set_target_properties(
	${PROJECT_NAME} PROPERTIES
		SUFFIX ".efi"
		RUNTIME_OUTPUT_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Efi/Boot"
)

target_include_directories(
	${PROJECT_NAME} SYSTEM PRIVATE
		../../thirdparty/edk2/MdePkg/Include/X64
		../../thirdparty/edk2/MdePkg/Include
		../
		.
)

target_compile_options(
	${PROJECT_NAME} PRIVATE
		-mno-red-zone
		-fno-stack-protector
		-fshort-wchar
		-ffreestanding
)

target_link_options(
	${PROJECT_NAME} PRIVATE
		-nodefaultlibs
		-nostartfiles
		-nostdlib
		-Wl,-entry:EfiMain
		-Wl,-subsystem:efi_application
)

if(CMAKE_SIZEOF_VOID_P EQUAL 8)
    set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME Bootx64)
    target_include_directories(${PROJECT_NAME} SYSTEM PRIVATE ../../thirdparty/edk2/MdePkg/Include/X64)
    target_compile_options(${PROJECT_NAME} PRIVATE -target x86_64-pc-win32-coff)
    target_link_options(${PROJECT_NAME} PRIVATE -target x86_64-pc-win32-coff)
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
    message(FATAL_ERROR "Phos should compile under x86_64.")

    set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME Bootx86)
    target_compile_options(${PROJECT_NAME} PRIVATE -target i386-pc-win32-coff)
    target_link_options(${PROJECT_NAME} PRIVATE -target i386-pc-win32-coff)
endif()

if(PHOSBOOT_DEBUG STREQUAL "YES")
	target_compile_definitions(${PROJECT_NAME} PRIVATE DEBUGGER)
endif()

if(CMAKE_BUILD_TYPE STREQUAL "Debug")
	target_compile_definitions(${PROJECT_NAME} PRIVATE DEBUG)
    target_compile_options(${PROJECT_NAME} PRIVATE -g -glldb -gdwarf-4)
endif()
