cmake_dependent_option(ENABLE_STIMBUFFAPI_livoxGen1
	"Enable Livox Gen1 LiDAR stim buff API" ON
	"ENABLE_LIB_livoxProto1" OFF)

if(ENABLE_STIMBUFFAPI_livoxGen1)
	# Set CONFIG variable for config.h
	set(CONFIG_STIMBUFFAPI_LIVOXGEN1_ENABLED 1)

	# Find liburing using pkg-config
	pkg_check_modules(URING REQUIRED liburing)

	# Enable assembly language
	enable_language(ASM)

	add_library(livoxGen1 SHARED
		livoxGen1.cpp
		pcloudStimulusProducer.cpp
		ioUringAssemblyEngine.cpp
		openClCollatingAndMeshingEngine.cpp
		openClKernels.cl.S
	)

	set_target_properties(livoxGen1 PROPERTIES
		VERSION ${PROJECT_VERSION}
		SOVERSION ${PROJECT_VERSION_MAJOR}
	)

	# Set assembler working directory so .incbin can find the .cl file
	# Also declare dependency on collateDgrams.cl and slotCompactor.cl
	set_source_files_properties(openClKernels.cl.S PROPERTIES
		COMPILE_FLAGS "-I${CMAKE_CURRENT_SOURCE_DIR}"
		OBJECT_DEPENDS
			"${CMAKE_CURRENT_SOURCE_DIR}/collateDgrams.cl;${CMAKE_CURRENT_SOURCE_DIR}/slotCompactor.cl"
	)

	target_include_directories(livoxGen1 PUBLIC
		${Boost_INCLUDE_DIRS}
		${CMAKE_SOURCE_DIR}/commonLibs
		${URING_INCLUDE_DIRS}
		${OPENCL_INCLUDE_DIRS}
	)
	target_link_libraries(livoxGen1 PUBLIC
		Boost::system
		Boost::log
		${URING_LIBRARIES}
		${OPENCL_LIBRARIES}
		attachmentSupport
	)
	target_link_directories(livoxGen1 PUBLIC
		${URING_LIBRARY_DIRS}
		${OPENCL_LIBRARY_DIRS}
	)

	# Verify Boost dynamic dependencies after build
	add_custom_command(TARGET livoxGen1 POST_BUILD
		COMMAND ${CMAKE_COMMAND} -DVERIFY_FILE="$<TARGET_FILE:livoxGen1>"
			-P ${CMAKE_SOURCE_DIR}/cmake/VerifyBoostDynamic.cmake
		COMMENT "Verifying Boost dynamic dependencies for livoxGen1"
	)

	# Install rules
	install(TARGETS livoxGen1
		LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} NAMELINK_SKIP
	)
endif()
