diff --git a/repos/libports/lib/symbols/libusb b/repos/libports/lib/symbols/libusb
new file mode 100644
index 0000000000..804ebe2a7c
--- /dev/null
+++ b/repos/libports/lib/symbols/libusb
@@ -0,0 +1,83 @@
+libusb_alloc_streams T
+libusb_alloc_transfer T
+libusb_attach_kernel_driver T
+libusb_bulk_transfer T
+libusb_cancel_transfer T
+libusb_claim_interface T
+libusb_clear_halt T
+libusb_close T
+libusb_control_transfer T
+libusb_detach_kernel_driver T
+libusb_error_name T
+libusb_event_handler_active T
+libusb_event_handling_ok T
+libusb_exit T
+libusb_free_bos_descriptor T
+libusb_free_config_descriptor T
+libusb_free_container_id_descriptor T
+libusb_free_device_list T
+libusb_free_pollfds T
+libusb_free_ss_endpoint_companion_descriptor T
+libusb_free_ss_usb_device_capability_descriptor T
+libusb_free_streams T
+libusb_free_transfer T
+libusb_free_usb_2_0_extension_descriptor T
+libusb_get_active_config_descriptor T
+libusb_get_bos_descriptor T
+libusb_get_bus_number T
+libusb_get_config_descriptor T
+libusb_get_config_descriptor_by_value T
+libusb_get_configuration T
+libusb_get_container_id_descriptor T
+libusb_get_device T
+libusb_get_device_address T
+libusb_get_device_descriptor T
+libusb_get_device_list T
+libusb_get_device_speed T
+libusb_get_max_iso_packet_size T
+libusb_get_max_packet_size T
+libusb_get_next_timeout T
+libusb_get_parent T
+libusb_get_pollfds T
+libusb_get_port_number T
+libusb_get_port_numbers T
+libusb_get_port_path T
+libusb_get_ss_endpoint_companion_descriptor T
+libusb_get_ss_usb_device_capability_descriptor T
+libusb_get_string_descriptor_ascii T
+libusb_get_usb_2_0_extension_descriptor T
+libusb_get_version T
+libusb_handle_events T
+libusb_handle_events_completed T
+libusb_handle_events_locked T
+libusb_handle_events_timeout T
+libusb_handle_events_timeout_completed T
+libusb_has_capability T
+libusb_hotplug_deregister_callback T
+libusb_hotplug_register_callback T
+libusb_init T
+libusb_interrupt_transfer T
+libusb_kernel_driver_active T
+libusb_lock_event_waiters T
+libusb_lock_events T
+libusb_open T
+libusb_open_device_with_vid_pid T
+libusb_pollfds_handle_timeouts T
+libusb_ref_device T
+libusb_release_interface T
+libusb_reset_device T
+libusb_set_auto_detach_kernel_driver T
+libusb_set_configuration T
+libusb_set_debug T
+libusb_set_interface_alt_setting T
+libusb_set_pollfd_notifiers T
+libusb_setlocale T
+libusb_strerror T
+libusb_submit_transfer T
+libusb_transfer_get_stream_id T
+libusb_transfer_set_stream_id T
+libusb_try_lock_events T
+libusb_unlock_event_waiters T
+libusb_unlock_events T
+libusb_unref_device T
+libusb_wait_for_event T
diff --git a/repos/libports/lib/symbols/libuvc b/repos/libports/lib/symbols/libuvc
new file mode 100644
index 0000000000..39f65c2b1b
--- /dev/null
+++ b/repos/libports/lib/symbols/libuvc
@@ -0,0 +1,175 @@
+uvc_allocate_frame T
+uvc_already_open T
+uvc_any2bgr T
+uvc_any2rgb T
+uvc_claim_if T
+uvc_close T
+uvc_duplicate_frame T
+uvc_ensure_frame_size T
+uvc_exit T
+uvc_find_device T
+uvc_find_devices T
+uvc_find_frame_desc T
+uvc_find_frame_desc_stream T
+uvc_free_devh T
+uvc_free_device_descriptor T
+uvc_free_device_info T
+uvc_free_device_list T
+uvc_free_frame T
+uvc_get_ae_mode T
+uvc_get_ae_priority T
+uvc_get_analog_video_lock_status T
+uvc_get_analog_video_standard T
+uvc_get_backlight_compensation T
+uvc_get_brightness T
+uvc_get_bus_number T
+uvc_get_camera_terminal T
+uvc_get_contrast T
+uvc_get_contrast_auto T
+uvc_get_ctrl T
+uvc_get_ctrl_len T
+uvc_get_device T
+uvc_get_device_address T
+uvc_get_device_descriptor T
+uvc_get_device_info T
+uvc_get_device_list T
+uvc_get_digital_multiplier T
+uvc_get_digital_multiplier_limit T
+uvc_get_digital_roi T
+uvc_get_digital_window T
+uvc_get_exposure_abs T
+uvc_get_exposure_rel T
+uvc_get_extension_units T
+uvc_get_focus_abs T
+uvc_get_focus_auto T
+uvc_get_focus_rel T
+uvc_get_focus_simple_range T
+uvc_get_format_descs T
+uvc_get_gain T
+uvc_get_gamma T
+uvc_get_hue T
+uvc_get_hue_auto T
+uvc_get_input_select T
+uvc_get_input_terminals T
+uvc_get_iris_abs T
+uvc_get_iris_rel T
+uvc_get_libusb_handle T
+uvc_get_output_terminals T
+uvc_get_pantilt_abs T
+uvc_get_pantilt_rel T
+uvc_get_power_line_frequency T
+uvc_get_power_mode T
+uvc_get_privacy T
+uvc_get_processing_units T
+uvc_get_roll_abs T
+uvc_get_roll_rel T
+uvc_get_saturation T
+uvc_get_scanning_mode T
+uvc_get_selector_units T
+uvc_get_sharpness T
+uvc_get_still_ctrl_format_size T
+uvc_get_stream_ctrl_format_size T
+uvc_get_white_balance_component T
+uvc_get_white_balance_component_auto T
+uvc_get_white_balance_temperature T
+uvc_get_white_balance_temperature_auto T
+uvc_get_zoom_abs T
+uvc_get_zoom_rel T
+uvc_init T
+uvc_mjpeg2gray T
+uvc_mjpeg2rgb T
+uvc_num_devices T
+uvc_open T
+uvc_parse_vc T
+uvc_parse_vc_extension_unit T
+uvc_parse_vc_header T
+uvc_parse_vc_input_terminal T
+uvc_parse_vc_processing_unit T
+uvc_parse_vc_selector_unit T
+uvc_parse_vs T
+uvc_parse_vs_format_mjpeg T
+uvc_parse_vs_format_uncompressed T
+uvc_parse_vs_frame_format T
+uvc_parse_vs_frame_frame T
+uvc_parse_vs_frame_uncompressed T
+uvc_parse_vs_input_header T
+uvc_parse_vs_still_image_frame T
+uvc_perror T
+uvc_print_diag T
+uvc_print_frameformats T
+uvc_print_stream_ctrl T
+uvc_probe_still_ctrl T
+uvc_probe_stream_ctrl T
+uvc_process_control_status T
+uvc_process_status_xfer T
+uvc_process_streaming_status T
+uvc_query_still_ctrl T
+uvc_query_stream_ctrl T
+uvc_ref_device T
+uvc_release_if T
+uvc_scan_control T
+uvc_scan_streaming T
+uvc_set_ae_mode T
+uvc_set_ae_priority T
+uvc_set_analog_video_lock_status T
+uvc_set_analog_video_standard T
+uvc_set_backlight_compensation T
+uvc_set_brightness T
+uvc_set_button_callback T
+uvc_set_contrast T
+uvc_set_contrast_auto T
+uvc_set_ctrl T
+uvc_set_digital_multiplier T
+uvc_set_digital_multiplier_limit T
+uvc_set_digital_roi T
+uvc_set_digital_window T
+uvc_set_exposure_abs T
+uvc_set_exposure_rel T
+uvc_set_focus_abs T
+uvc_set_focus_auto T
+uvc_set_focus_rel T
+uvc_set_focus_simple_range T
+uvc_set_gain T
+uvc_set_gamma T
+uvc_set_hue T
+uvc_set_hue_auto T
+uvc_set_input_select T
+uvc_set_iris_abs T
+uvc_set_iris_rel T
+uvc_set_pantilt_abs T
+uvc_set_pantilt_rel T
+uvc_set_power_line_frequency T
+uvc_set_power_mode T
+uvc_set_privacy T
+uvc_set_roll_abs T
+uvc_set_roll_rel T
+uvc_set_saturation T
+uvc_set_scanning_mode T
+uvc_set_sharpness T
+uvc_set_status_callback T
+uvc_set_white_balance_component T
+uvc_set_white_balance_component_auto T
+uvc_set_white_balance_temperature T
+uvc_set_white_balance_temperature_auto T
+uvc_set_zoom_abs T
+uvc_set_zoom_rel T
+uvc_start_handler_thread T
+uvc_start_iso_streaming T
+uvc_start_streaming T
+uvc_stop_streaming T
+uvc_stream_close T
+uvc_stream_ctrl T
+uvc_stream_get_frame T
+uvc_stream_open_ctrl T
+uvc_stream_start T
+uvc_stream_start_iso T
+uvc_stream_stop T
+uvc_strerror T
+uvc_trigger_still T
+uvc_unref_device T
+uvc_uyvy2bgr T
+uvc_uyvy2rgb T
+uvc_yuyv2bgr T
+uvc_yuyv2rgb T
+uvc_yuyv2uv T
+uvc_yuyv2y T
diff --git a/repos/libports/lib/symbols/libyuv b/repos/libports/lib/symbols/libyuv
new file mode 100644
index 0000000000..e9b31dc5e3
--- /dev/null
+++ b/repos/libports/lib/symbols/libyuv
@@ -0,0 +1,353 @@
+AB64ToARGB T
+ABGRToAR30 T
+ABGRToARGB T
+ABGRToI420 T
+ABGRToNV12 T
+ABGRToNV21 T
+AR30ToAB30 T
+AR30ToABGR T
+AR30ToARGB T
+AR64Shuffle T
+AR64ToAB64 T
+AR64ToARGB T
+ARGB1555ToARGB T
+ARGB1555ToI420 T
+ARGB4444ToARGB T
+ARGB4444ToI420 T
+ARGBAdd T
+ARGBAffineRow_C T
+ARGBAffineRow_SSE2 T
+ARGBAttenuate T
+ARGBBlend T
+ARGBBlur T
+ARGBColorMatrix T
+ARGBColorTable T
+ARGBComputeCumulativeSum T
+ARGBCopy T
+ARGBCopyAlpha T
+ARGBCopyYToAlpha T
+ARGBDetect T
+ARGBExtractAlpha T
+ARGBGray T
+ARGBGrayTo T
+ARGBInterpolate T
+ARGBLumaColorTable T
+ARGBMirror T
+ARGBMultiply T
+ARGBPolynomial T
+ARGBQuantize T
+ARGBRect T
+ARGBRotate T
+ARGBScale T
+ARGBScaleClip T
+ARGBSepia T
+ARGBShade T
+ARGBShuffle T
+ARGBSobel T
+ARGBSobelToPlane T
+ARGBSobelXY T
+ARGBSubtract T
+ARGBToAB64 T
+ARGBToABGR T
+ARGBToAR30 T
+ARGBToAR64 T
+ARGBToARGB1555 T
+ARGBToARGB4444 T
+ARGBToBGRA T
+ARGBToG T
+ARGBToI400 T
+ARGBToI420 T
+ARGBToI422 T
+ARGBToI444 T
+ARGBToJ400 T
+ARGBToJ420 T
+ARGBToJ422 T
+ARGBToNV12 T
+ARGBToNV21 T
+ARGBToRAW T
+ARGBToRGB24 T
+ARGBToRGB565 T
+ARGBToRGB565Dither T
+ARGBToRGBA T
+ARGBToUYVY T
+ARGBToYUY2 T
+ARGBUnattenuate T
+AYUVToNV12 T
+AYUVToNV21 T
+Android420ToABGR T
+Android420ToARGB T
+Android420ToARGBMatrix T
+Android420ToI420 T
+BGRAToARGB T
+BGRAToI420 T
+BlendPlane T
+ByteToFloat T
+CalcFramePsnr T
+CalcFrameSsim T
+CanonicalFourCC T
+ComputeHammingDistance T
+ComputeSumSquareError T
+ComputeSumSquareErrorPlane T
+Convert16To8Plane T
+Convert8To16Plane T
+ConvertFromI420 T
+ConvertToARGB T
+ConvertToI420 T
+ConvertToLSBPlane_16 T
+ConvertToMSBPlane_16 T
+CopyPlane T
+CopyPlane_16 T
+GaussPlane_F32 T
+GetARGBBlend T
+H010ToAB30 T
+H010ToABGR T
+H010ToAR30 T
+H010ToARGB T
+H210ToAB30 T
+H210ToABGR T
+H210ToAR30 T
+H210ToARGB T
+H420ToAB30 T
+H420ToABGR T
+H420ToAR30 T
+H420ToARGB T
+H420ToRAW T
+H420ToRGB24 T
+H420ToRGB565 T
+H422ToABGR T
+H422ToARGB T
+H444ToABGR T
+H444ToARGB T
+HalfFloatPlane T
+HalfMergeUVPlane T
+HashDjb2 T
+I010AlphaToARGBMatrix T
+I010Copy T
+I010ToAB30 T
+I010ToABGR T
+I010ToAR30 T
+I010ToAR30Matrix T
+I010ToARGB T
+I010ToARGBMatrix T
+I010ToI410 T
+I010ToI420 T
+I010ToP010 T
+I012ToAR30Matrix T
+I012ToARGBMatrix T
+I012ToI420 T
+I012ToP012 T
+I210AlphaToARGBMatrix T
+I210ToAB30 T
+I210ToABGR T
+I210ToAR30 T
+I210ToAR30Matrix T
+I210ToARGB T
+I210ToARGBMatrix T
+I210ToI010 T
+I210ToI410 T
+I210ToI422 T
+I210ToP210 T
+I212ToI422 T
+I212ToP212 T
+I400Copy T
+I400Mirror T
+I400ToARGB T
+I400ToARGBMatrix T
+I400ToI400 T
+I400ToI420 T
+I400ToNV21 T
+I410AlphaToARGBMatrix T
+I410ToAR30Matrix T
+I410ToARGBMatrix T
+I410ToI010 T
+I410ToI444 T
+I412ToI444 T
+I420AlphaToABGR T
+I420AlphaToARGB T
+I420AlphaToARGBMatrix T
+I420Blend T
+I420Copy T
+I420Interpolate T
+I420Mirror T
+I420Psnr T
+I420Rect T
+I420Rotate T
+I420Scale T
+I420Scale_12 T
+I420Scale_16 T
+I420Ssim T
+I420ToAB30 T
+I420ToABGR T
+I420ToAR30 T
+I420ToAR30Matrix T
+I420ToARGB T
+I420ToARGB1555 T
+I420ToARGB4444 T
+I420ToARGBMatrix T
+I420ToBGRA T
+I420ToI010 T
+I420ToI012 T
+I420ToI400 T
+I420ToI422 T
+I420ToI444 T
+I420ToNV12 T
+I420ToNV21 T
+I420ToRAW T
+I420ToRGB24 T
+I420ToRGB24Matrix T
+I420ToRGB565 T
+I420ToRGB565Dither T
+I420ToRGB565Matrix T
+I420ToRGBA T
+I420ToRGBAMatrix T
+I420ToUYVY T
+I420ToYUY2 T
+I422AlphaToABGR T
+I422AlphaToARGB T
+I422AlphaToARGBMatrix T
+I422Copy T
+I422ToABGR T
+I422ToARGB T
+I422ToARGBMatrix T
+I422ToBGRA T
+I422ToI420 T
+I422ToI444 T
+I422ToNV21 T
+I422ToRGB565 T
+I422ToRGBA T
+I422ToRGBAMatrix T
+I422ToUYVY T
+I422ToYUY2 T
+I444AlphaToABGR T
+I444AlphaToARGB T
+I444AlphaToARGBMatrix T
+I444Copy T
+I444Rotate T
+I444Scale T
+I444Scale_12 T
+I444Scale_16 T
+I444ToABGR T
+I444ToARGB T
+I444ToARGBMatrix T
+I444ToI420 T
+I444ToNV12 T
+I444ToNV21 T
+InterpolatePlane T
+J400ToARGB T
+J420ToABGR T
+J420ToARGB T
+J420ToRAW T
+J420ToRGB24 T
+J420ToRGB565 T
+J422ToABGR T
+J422ToARGB T
+J444ToABGR T
+J444ToARGB T
+MJPGSize T
+MJPGToARGB T
+MJPGToI420 T
+MJPGToNV12 T
+MJPGToNV21 T
+MergeAR64Plane T
+MergeARGB16To8Plane T
+MergeARGBPlane T
+MergeRGBPlane T
+MergeUVPlane T
+MergeUVPlane_16 T
+MergeXR30Plane T
+MirrorPlane T
+MirrorUVPlane T
+NV12Mirror T
+NV12Scale T
+NV12ToABGR T
+NV12ToARGB T
+NV12ToARGBMatrix T
+NV12ToI420 T
+NV12ToI420Rotate T
+NV12ToNV24 T
+NV12ToRAW T
+NV12ToRGB24 T
+NV12ToRGB24Matrix T
+NV12ToRGB565 T
+NV12ToRGB565Matrix T
+NV16ToNV24 T
+NV21ToABGR T
+NV21ToARGB T
+NV21ToARGBMatrix T
+NV21ToI420 T
+NV21ToNV12 T
+NV21ToRAW T
+NV21ToRGB24 T
+NV21ToRGB24Matrix T
+NV21ToYUV24 T
+P010ToAR30Matrix T
+P010ToARGBMatrix T
+P010ToP410 T
+P210ToAR30Matrix T
+P210ToARGBMatrix T
+P210ToP410 T
+RAWToARGB T
+RAWToI420 T
+RAWToJ400 T
+RAWToJ420 T
+RAWToRGB24 T
+RAWToRGBA T
+RGB24Mirror T
+RGB24ToARGB T
+RGB24ToI420 T
+RGB24ToJ400 T
+RGB24ToJ420 T
+RGB565ToARGB T
+RGB565ToI420 T
+RGBAToARGB T
+RGBAToI420 T
+RGBAToJ400 T
+RGBColorMatrix T
+RGBColorTable T
+RotatePlane T
+RotatePlane180 T
+RotatePlane270 T
+RotatePlane90 T
+RotateUV180 T
+RotateUV270 T
+RotateUV90 T
+Scale T
+ScalePlane T
+ScalePlane_12 T
+ScalePlane_16 T
+SetPlane T
+SetUseReferenceImpl T
+SplitARGBPlane T
+SplitRGBPlane T
+SplitUVPlane T
+SplitUVPlane_16 T
+SumSquareErrorToPsnr T
+SwapUVPlane T
+TransposePlane T
+TransposeUV T
+U010ToAB30 T
+U010ToABGR T
+U010ToAR30 T
+U010ToARGB T
+U210ToAB30 T
+U210ToABGR T
+U210ToAR30 T
+U210ToARGB T
+U420ToABGR T
+U420ToARGB T
+U422ToABGR T
+U422ToARGB T
+U444ToABGR T
+U444ToARGB T
+UVScale T
+UVScale_16 T
+UYVYToARGB T
+UYVYToI420 T
+UYVYToI422 T
+UYVYToNV12 T
+YUVToARGBScaleClip T
+YUY2ToARGB T
+YUY2ToI420 T
+YUY2ToI422 T
+YUY2ToNV12 T
+YUY2ToY T
diff --git a/repos/libports/recipes/api/libusb/content.mk b/repos/libports/recipes/api/libusb/content.mk
new file mode 100644
index 0000000000..218ca28b81
--- /dev/null
+++ b/repos/libports/recipes/api/libusb/content.mk
@@ -0,0 +1,14 @@
+content: include lib/symbols/libusb LICENSE
+
+PORT_DIR := $(call port_dir,$(REP_DIR)/ports/libusb)
+
+include:
+ mkdir $@
+ cp -r $(PORT_DIR)/include/libusb/* $@/
+
+lib/symbols/libusb:
+ $(mirror_from_rep_dir)
+
+LICENSE:
+ cp $(PORT_DIR)/src/lib/libusb/COPYING $@
+
diff --git a/repos/libports/recipes/api/libusb/hash b/repos/libports/recipes/api/libusb/hash
new file mode 100644
index 0000000000..6b5d08d396
--- /dev/null
+++ b/repos/libports/recipes/api/libusb/hash
@@ -0,0 +1 @@
+2021-05-25 7d10a401fac7d803546eb863e35d195f17962c5b
diff --git a/repos/libports/recipes/api/libuvc/content.mk b/repos/libports/recipes/api/libuvc/content.mk
new file mode 100644
index 0000000000..70f5ed757d
--- /dev/null
+++ b/repos/libports/recipes/api/libuvc/content.mk
@@ -0,0 +1,14 @@
+content: include lib/symbols/libuvc LICENSE
+
+PORT_DIR := $(call port_dir,$(REP_DIR)/ports/libuvc)
+
+include:
+ mkdir $@
+ cp -r $(PORT_DIR)/include/* $@/
+
+lib/symbols/libuvc:
+ $(mirror_from_rep_dir)
+
+LICENSE:
+ cp $(PORT_DIR)/src/lib/libuvc/LICENSE.txt $@
+
diff --git a/repos/libports/recipes/api/libuvc/hash b/repos/libports/recipes/api/libuvc/hash
new file mode 100644
index 0000000000..8aff90445f
--- /dev/null
+++ b/repos/libports/recipes/api/libuvc/hash
@@ -0,0 +1 @@
+2021-05-25-c 82786e987d6a6f3d39e46cc28617875ad4e12672
diff --git a/repos/libports/recipes/api/libyuv/content.mk b/repos/libports/recipes/api/libyuv/content.mk
new file mode 100644
index 0000000000..22c66df785
--- /dev/null
+++ b/repos/libports/recipes/api/libyuv/content.mk
@@ -0,0 +1,14 @@
+content: include lib/symbols/libyuv LICENSE
+
+PORT_DIR := $(call port_dir,$(REP_DIR)/ports/libyuv)
+
+include:
+ mkdir $@
+ cp -r $(PORT_DIR)/include/* $@/
+
+lib/symbols/libyuv:
+ $(mirror_from_rep_dir)
+
+LICENSE:
+ cp $(PORT_DIR)/src/lib/libyuv/LICENSE $@
+
diff --git a/repos/libports/recipes/api/libyuv/hash b/repos/libports/recipes/api/libyuv/hash
new file mode 100644
index 0000000000..1566e39171
--- /dev/null
+++ b/repos/libports/recipes/api/libyuv/hash
@@ -0,0 +1 @@
+2021-05-25-e cc7d9de37ac9ec6847a0555b7a6b9ef368ac5adb
diff --git a/repos/libports/recipes/pkg/usb_webcam/README b/repos/libports/recipes/pkg/usb_webcam/README
new file mode 100644
index 0000000000..7febf0261f
--- /dev/null
+++ b/repos/libports/recipes/pkg/usb_webcam/README
@@ -0,0 +1,5 @@
+USB webcam driver + Nitpicker video bridge. The configuration can be adjusted
+in _recipes/raw/usb_webcam/usb_webcam.config_. The package offers a Report and a
+Capture session. The report is used in order to enable and disable the webcam,
+the format must be the same as given by the Qemu webcam model. From the Capture
+session, the webcam images can be retrieved.
diff --git a/repos/libports/recipes/pkg/usb_webcam/archives b/repos/libports/recipes/pkg/usb_webcam/archives
new file mode 100644
index 0000000000..15a5624f8a
--- /dev/null
+++ b/repos/libports/recipes/pkg/usb_webcam/archives
@@ -0,0 +1,15 @@
+_/src/usb_webcam
+_/raw/usb_webcam
+_/src/init
+_/src/jpeg
+_/src/libc
+_/src/libusb
+_/src/libuvc
+_/src/libyuv
+_/src/nitpicker
+_/src/rom_filter
+_/src/report_rom
+_/src/stdcxx
+_/src/vfs
+_/src/vfs_pipe
+
diff --git a/repos/libports/recipes/pkg/usb_webcam/hash b/repos/libports/recipes/pkg/usb_webcam/hash
new file mode 100644
index 0000000000..ea44f7f09c
--- /dev/null
+++ b/repos/libports/recipes/pkg/usb_webcam/hash
@@ -0,0 +1 @@
+2021-05-25-z-x e1ebc7451e8551e5d6ce4205bbcbdd803365b856
diff --git a/repos/libports/recipes/pkg/usb_webcam/runtime b/repos/libports/recipes/pkg/usb_webcam/runtime
new file mode 100644
index 0000000000..cbb2476ae9
--- /dev/null
+++ b/repos/libports/recipes/pkg/usb_webcam/runtime
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/repos/libports/recipes/raw/usb_webcam/content.mk b/repos/libports/recipes/raw/usb_webcam/content.mk
new file mode 100644
index 0000000000..6c8427df24
--- /dev/null
+++ b/repos/libports/recipes/raw/usb_webcam/content.mk
@@ -0,0 +1,4 @@
+content: usb_webcam.config
+
+usb_webcam.config:
+ cp $(REP_DIR)/recipes/raw/usb_webcam/$@ $@
diff --git a/repos/libports/recipes/raw/usb_webcam/hash b/repos/libports/recipes/raw/usb_webcam/hash
new file mode 100644
index 0000000000..8d83cea652
--- /dev/null
+++ b/repos/libports/recipes/raw/usb_webcam/hash
@@ -0,0 +1 @@
+2021-05-25-t ec65e53e28de3032321dfbb13bdc5a00695398f6
diff --git a/repos/libports/recipes/raw/usb_webcam/usb_webcam.config b/repos/libports/recipes/raw/usb_webcam/usb_webcam.config
new file mode 100644
index 0000000000..b8e4dc9724
--- /dev/null
+++ b/repos/libports/recipes/raw/usb_webcam/usb_webcam.config
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/repos/libports/recipes/src/libusb/api b/repos/libports/recipes/src/libusb/api
new file mode 100644
index 0000000000..04fac9bff7
--- /dev/null
+++ b/repos/libports/recipes/src/libusb/api
@@ -0,0 +1 @@
+libusb
diff --git a/repos/libports/recipes/src/libusb/content.mk b/repos/libports/recipes/src/libusb/content.mk
new file mode 100644
index 0000000000..8e154f94e4
--- /dev/null
+++ b/repos/libports/recipes/src/libusb/content.mk
@@ -0,0 +1,20 @@
+MIRROR_FROM_REP_DIR := lib/mk/libusb.mk lib/import/import-libusb.mk \
+ include/libc-plugin/plugin.h \
+ src/lib/libc/internal/thread_create.h \
+ src/lib/libc/internal/types.h \
+
+content: src/lib/libusb LICENSE $(MIRROR_FROM_REP_DIR)
+
+PORT_DIR := $(call port_dir,$(REP_DIR)/ports/libusb)
+
+src/lib/libusb:
+ mkdir -p $(dir $@)
+ cp -r $(PORT_DIR)/src/lib/libusb $@
+ echo "LIBS = libusb" > $@/target.mk
+ $(mirror_from_rep_dir)
+
+$(MIRROR_FROM_REP_DIR):
+ $(mirror_from_rep_dir)
+
+LICENSE:
+ cp $(PORT_DIR)/src/lib/libusb/COPYING $@
diff --git a/repos/libports/recipes/src/libusb/hash b/repos/libports/recipes/src/libusb/hash
new file mode 100644
index 0000000000..200396ccdb
--- /dev/null
+++ b/repos/libports/recipes/src/libusb/hash
@@ -0,0 +1 @@
+2021-05-25 edf50f4bb0254d84b9552719dcc470bbb6c325c6
diff --git a/repos/libports/recipes/src/libusb/used_apis b/repos/libports/recipes/src/libusb/used_apis
new file mode 100644
index 0000000000..d1048701c9
--- /dev/null
+++ b/repos/libports/recipes/src/libusb/used_apis
@@ -0,0 +1,5 @@
+base
+os
+usb_session
+libc
+
diff --git a/repos/libports/recipes/src/libuvc/api b/repos/libports/recipes/src/libuvc/api
new file mode 100644
index 0000000000..d04b559e78
--- /dev/null
+++ b/repos/libports/recipes/src/libuvc/api
@@ -0,0 +1 @@
+libuvc
diff --git a/repos/libports/recipes/src/libuvc/content.mk b/repos/libports/recipes/src/libuvc/content.mk
new file mode 100644
index 0000000000..1727a6102b
--- /dev/null
+++ b/repos/libports/recipes/src/libuvc/content.mk
@@ -0,0 +1,21 @@
+MIRROR_FROM_REP_DIR := lib/mk/libuvc.mk lib/import/import-libuvc.mk
+
+content: src/lib/libuvc include LICENSE $(MIRROR_FROM_REP_DIR)
+
+PORT_DIR := $(call port_dir,$(REP_DIR)/ports/libuvc)
+
+src/lib/libuvc:
+ mkdir -p $(dir $@)
+ cp -r $(PORT_DIR)/src/lib/libuvc $@
+ echo "LIBS = libuvc" > $@/target.mk
+
+include:
+ mkdir -p $@
+ cp -a $(PORT_DIR)/include/* $@
+
+
+$(MIRROR_FROM_REP_DIR):
+ $(mirror_from_rep_dir)
+
+LICENSE:
+ cp $(PORT_DIR)/src/lib/libuvc/LICENSE.txt $@
diff --git a/repos/libports/recipes/src/libuvc/hash b/repos/libports/recipes/src/libuvc/hash
new file mode 100644
index 0000000000..67ef603e44
--- /dev/null
+++ b/repos/libports/recipes/src/libuvc/hash
@@ -0,0 +1 @@
+2021-05-25-c 60817ac4ee53b75794eb5f99c79412c275ba3236
diff --git a/repos/libports/recipes/src/libuvc/used_apis b/repos/libports/recipes/src/libuvc/used_apis
new file mode 100644
index 0000000000..b680c068ae
--- /dev/null
+++ b/repos/libports/recipes/src/libuvc/used_apis
@@ -0,0 +1,3 @@
+libc
+jpeg
+libusb
diff --git a/repos/libports/recipes/src/libyuv/api b/repos/libports/recipes/src/libyuv/api
new file mode 100644
index 0000000000..b13ca32219
--- /dev/null
+++ b/repos/libports/recipes/src/libyuv/api
@@ -0,0 +1 @@
+libyuv
diff --git a/repos/libports/recipes/src/libyuv/content.mk b/repos/libports/recipes/src/libyuv/content.mk
new file mode 100644
index 0000000000..2ecef0dbc5
--- /dev/null
+++ b/repos/libports/recipes/src/libyuv/content.mk
@@ -0,0 +1,22 @@
+MIRROR_FROM_REP_DIR := lib/mk/libyuv.inc lib/mk/spec/x86_32/libyuv.mk \
+ lib/mk/spec/x86_64/libyuv.mk lib/import/import-libyuv.mk
+
+content: src/lib/libyuv include LICENSE $(MIRROR_FROM_REP_DIR)
+
+PORT_DIR := $(call port_dir,$(REP_DIR)/ports/libyuv)
+
+src/lib/libyuv:
+ mkdir -p $@
+ cp -r $(PORT_DIR)/src/lib/libyuv/source $@
+ echo "LIBS = libyuv" > $@/target.mk
+
+include:
+ mkdir -p $@
+ cp -a $(PORT_DIR)/include/* $@
+
+
+$(MIRROR_FROM_REP_DIR):
+ $(mirror_from_rep_dir)
+
+LICENSE:
+ cp $(PORT_DIR)/src/lib/libyuv/LICENSE $@
diff --git a/repos/libports/recipes/src/libyuv/hash b/repos/libports/recipes/src/libyuv/hash
new file mode 100644
index 0000000000..995b2953b0
--- /dev/null
+++ b/repos/libports/recipes/src/libyuv/hash
@@ -0,0 +1 @@
+2021-05-25-j 9e8ed57fc89e8caa8fdaa7b5002c7f068918427d
diff --git a/repos/libports/recipes/src/libyuv/used_apis b/repos/libports/recipes/src/libyuv/used_apis
new file mode 100644
index 0000000000..8935f6c215
--- /dev/null
+++ b/repos/libports/recipes/src/libyuv/used_apis
@@ -0,0 +1,4 @@
+libc
+stdcxx
+jpeg
+
diff --git a/repos/libports/recipes/src/usb_webcam/content.mk b/repos/libports/recipes/src/usb_webcam/content.mk
new file mode 100644
index 0000000000..d2025ed361
--- /dev/null
+++ b/repos/libports/recipes/src/usb_webcam/content.mk
@@ -0,0 +1,3 @@
+SRC_DIR = src/app/usb_webcam
+
+include $(GENODE_DIR)/repos/base/recipes/src/content.inc
diff --git a/repos/libports/recipes/src/usb_webcam/hash b/repos/libports/recipes/src/usb_webcam/hash
new file mode 100644
index 0000000000..9b12f28bd2
--- /dev/null
+++ b/repos/libports/recipes/src/usb_webcam/hash
@@ -0,0 +1 @@
+2021-05-25-j e4c75347b0f8173748eeaaba8496ed277900161c
diff --git a/repos/libports/recipes/src/usb_webcam/used_apis b/repos/libports/recipes/src/usb_webcam/used_apis
new file mode 100644
index 0000000000..e5c408e061
--- /dev/null
+++ b/repos/libports/recipes/src/usb_webcam/used_apis
@@ -0,0 +1,8 @@
+base
+os
+framebuffer_session
+gui_session
+input_session
+libc
+libuvc
+libyuv
diff --git a/repos/libports/src/app/usb_webcam/target.mk b/repos/libports/src/app/usb_webcam/target.mk
index 261aa0f768..5a3d767de2 100644
--- a/repos/libports/src/app/usb_webcam/target.mk
+++ b/repos/libports/src/app/usb_webcam/target.mk
@@ -1,3 +1,3 @@
TARGET := usb_webcam
SRC_CC := main.cc
-LIBS := libuvc libyuv libc
+LIBS := base libuvc libyuv libc