# identifier: Name of the example
# songfile: File path of the song YAML file.
# architecture: 386 or amd64
# abi: 32 or 64
# windows_libraries: All libraries that you need to link on Windows
# unix_libraries: All libraries that you need to link on unix
function(add_asm_example identifier songfile architecture sizeof_void_ptr windows_libraries unix_libraries)
	get_filename_component(songprefix ${songfile} NAME_WE)

	# Generate the song assembly file
	add_custom_command(
		COMMAND
			${compilecmd} -arch=${architecture} -o ${songprefix}_${architecture}.asm ${songfile}
		WORKING_DIRECTORY
			${CMAKE_CURRENT_BINARY_DIR}
		DEPENDS
			${songfile}
			${compilecmd}
		OUTPUT
			${songprefix}_${architecture}.asm
			${songprefix}_${architecture}.h
			${songprefix}_${architecture}.inc
		COMMENT
			"Compiling ${PROJECT_SOURCE_DIR}/examples/patches/physics-girl-st.yml..."
	)

	# Platform dependent options
	if(WIN32)
		set(abi win)
		set(libraries ${windows_libraries})
		if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
			set(link_options -nostartfiles)
		endif()
	elseif(UNIX)
		set(abi elf)
		set(link_options -z noexecstack -no-pie)
		set(libraries ${unix_libraries})
	endif()

	# Add target
	add_executable(${identifier}-${architecture}
		${identifier}.${abi}${sizeof_void_ptr}.asm
		${songprefix}_${architecture}.asm
		${songprefix}_${architecture}.inc
	)
	set_target_properties(${identifier}-${architecture} PROPERTIES ASM_NASM_COMPILE_OPTIONS -f${abi}${sizeof_void_ptr})
	target_include_directories(${identifier}-${architecture} PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
	set_target_properties(${identifier}-${architecture} PROPERTIES LINKER_LANGUAGE C)
	target_link_options(${identifier}-${architecture} PRIVATE -m${sizeof_void_ptr} ${link_options})
	target_link_libraries(${identifier}-${architecture} PRIVATE ${libraries})
	target_compile_definitions(${identifier}-${architecture} PRIVATE TRACK_INCLUDE="${songprefix}_${architecture}.inc")

	# Set up dependencies
	add_dependencies(examples ${identifier}-${architecture})
endfunction()

add_subdirectory(386)
add_subdirectory(amd64)