cmake_minimum_required(VERSION 3.31)
project(ld C ASM)

file(GLOB c_sources *.c *.h)
file(GLOB arch_sources arch/${CMAKE_SYSTEM_PROCESSOR}/*.S)

add_executable(ld ${c_sources} ${arch_sources})
set_target_properties(ld PROPERTIES
	POSITION_INDEPENDENT_CODE ON
	OUTPUT_NAME "ld64"
	SUFFIX ".so")

set(libc_deps
	libc-core.a libc-malloc.a libc-io.a)
target_link_libraries(ld
	"$<LINK_GROUP:cross_refs,${libc_deps}>"
	libmagenta.a librosetta.a -l:libxpc.a)

target_compile_options(ld PRIVATE
	-fvisibility=hidden
	-fPIC -fno-stack-protector -nostdlib -ffreestanding)
target_link_options(ld PRIVATE
	-fvisibility=hidden -Wl,--exclude-libs,ALL
	# -Wl,--entry="_ld_start"
	-T ${CMAKE_CURRENT_SOURCE_DIR}/arch/${CMAKE_SYSTEM_PROCESSOR}/layout.ld
	-fPIC -nostdlib -ffreestanding -Wl,-shared)
install(TARGETS ld DESTINATION lib)
