diff --git a/repos/libports/lib/import/import-drm.mk b/repos/libports/lib/import/import-drm.mk
index f324d388d5..2fe33c7f11 100644
--- a/repos/libports/lib/import/import-drm.mk
+++ b/repos/libports/lib/import/import-drm.mk
@@ -1,2 +1,7 @@
-DRM_DIR = $(call select_from_ports,drm)/src/lib/drm
+ifeq ($(CONTRIB_DIR),)
+DRM_DIR = $(realpath $(call select_from_repositories,include/drm)/..)
+INC_DIR += $(DRM_DIR) $(addprefix $(DRM_DIR)/,intel drm)
+else
+DRM_DIR = $(call select_from_ports,drm)/src/lib/drm
INC_DIR += $(DRM_DIR) $(addprefix $(DRM_DIR)/,intel include/drm)
+endif
diff --git a/repos/libports/lib/mk/drm.mk b/repos/libports/lib/mk/drm.mk
index 28b8b6eafb..8f50f5206e 100644
--- a/repos/libports/lib/mk/drm.mk
+++ b/repos/libports/lib/mk/drm.mk
@@ -1,10 +1,11 @@
+include $(call select_from_repositories,lib/import/import-drm.mk)
+
SHARED_LIB = yes
LIBS = libc
DRM_SRC_DIR := $(call select_from_ports,drm)/src/lib/drm
LIB_DIR = $(REP_DIR)/src/lib/drm
-INC_DIR += $(DRM_SRC_DIR)/include/drm $(LIB_DIR)/include \
- $(DRM_SRC_DIR)
+INC_DIR += $(LIB_DIR)/include
SRC_C = intel/intel_bufmgr.c \
intel/intel_bufmgr_gem.c \
diff --git a/repos/libports/lib/symbols/drm b/repos/libports/lib/symbols/drm
new file mode 100644
index 0000000000..6013301cb5
--- /dev/null
+++ b/repos/libports/lib/symbols/drm
@@ -0,0 +1,182 @@
+_Z12drm_completev T
+_Z8drm_initRN6Genode3EnvERNS_10EntrypointE T
+_ZN5Utils14canonical_addrEm T
+_ZN5Utils17noncanonical_addrEm T
+drmAddBufs T
+drmAddContextPrivateMapping T
+drmAddContextTag T
+drmAddMap T
+drmAgpAcquire T
+drmAgpAlloc T
+drmAgpBase T
+drmAgpBind T
+drmAgpDeviceId T
+drmAgpEnable T
+drmAgpFree T
+drmAgpGetMode T
+drmAgpMemoryAvail T
+drmAgpMemoryUsed T
+drmAgpRelease T
+drmAgpSize T
+drmAgpUnbind T
+drmAgpVendorId T
+drmAgpVersionMajor T
+drmAgpVersionMinor T
+drmAuthMagic T
+drmAvailable T
+drmClose T
+drmCloseOnce T
+drmCommandNone T
+drmCommandRead T
+drmCommandWrite T
+drmCommandWriteRead T
+drmCreateContext T
+drmCreateDrawable T
+drmCtlInstHandler T
+drmCtlUninstHandler T
+drmDMA T
+drmDelContextTag T
+drmDestroyContext T
+drmDestroyDrawable T
+drmDropMaster T
+drmError T
+drmFinish T
+drmFree T
+drmFreeBufs T
+drmFreeBusid T
+drmFreeDevices T
+drmFreeReservedContextList T
+drmFreeVersion T
+drmGetBufInfo T
+drmGetBusid T
+drmGetCap T
+drmGetClient T
+drmGetContextFlags T
+drmGetContextPrivateMapping T
+drmGetContextTag T
+drmGetDeviceNameFromFd T
+drmGetDevices T
+drmGetEntry T
+drmGetHashTable T
+drmGetInterruptFromBusID T
+drmGetLibVersion T
+drmGetLock T
+drmGetMagic T
+drmGetMap T
+drmGetNodeTypeFromFd T
+drmGetPrimaryDeviceNameFromFd T
+drmGetRenderDeviceNameFromFd T
+drmGetReservedContextList T
+drmGetStats T
+drmGetVersion T
+drmHashCreate T
+drmHashDelete T
+drmHashDestroy T
+drmHashFirst T
+drmHashInsert T
+drmHashLookup T
+drmHashNext T
+drmIoctl T
+drmMalloc T
+drmMap T
+drmMapBufs T
+drmMarkBufs T
+drmMsg T
+drmOpen T
+drmOpenControl T
+drmOpenOnce T
+drmOpenOnceWithType T
+drmOpenRender T
+drmOpenWithType T
+drmPrimeFDToHandle T
+drmPrimeHandleToFD T
+drmRandom T
+drmRandomCreate T
+drmRandomDestroy T
+drmRandomDouble T
+drmRmMap T
+drmScatterGatherAlloc T
+drmScatterGatherFree T
+drmSetBusid T
+drmSetClientCap T
+drmSetContextFlags T
+drmSetInterfaceVersion T
+drmSetMaster T
+drmSetServerInfo T
+drmSwitchToContext T
+drmUnlock T
+drmUnmap T
+drmUnmapBufs T
+drmUpdateDrawableInfo T
+drmWaitVBlank T
+drm_intel_bo_alloc T
+drm_intel_bo_alloc_for_render T
+drm_intel_bo_alloc_tiled T
+drm_intel_bo_alloc_userptr T
+drm_intel_bo_busy T
+drm_intel_bo_disable_reuse T
+drm_intel_bo_emit_reloc T
+drm_intel_bo_emit_reloc_fence T
+drm_intel_bo_exec T
+drm_intel_bo_flink T
+drm_intel_bo_gem_create_from_name T
+drm_intel_bo_gem_create_from_prime T
+drm_intel_bo_gem_export_to_prime T
+drm_intel_bo_get_subdata T
+drm_intel_bo_get_tiling T
+drm_intel_bo_is_reusable T
+drm_intel_bo_madvise T
+drm_intel_bo_map T
+drm_intel_bo_mrb_exec T
+drm_intel_bo_pin T
+drm_intel_bo_reference T
+drm_intel_bo_references T
+drm_intel_bo_set_tiling T
+drm_intel_bo_subdata T
+drm_intel_bo_unmap T
+drm_intel_bo_unpin T
+drm_intel_bo_unreference T
+drm_intel_bo_wait_rendering T
+drm_intel_bufmgr_check_aperture_space T
+drm_intel_bufmgr_destroy T
+drm_intel_bufmgr_gem_enable_fenced_relocs T
+drm_intel_bufmgr_gem_enable_reuse T
+drm_intel_bufmgr_gem_get_devid T
+drm_intel_bufmgr_gem_init T
+drm_intel_bufmgr_gem_set_aub_annotations T
+drm_intel_bufmgr_gem_set_aub_dump T
+drm_intel_bufmgr_gem_set_aub_filename T
+drm_intel_bufmgr_gem_set_vma_cache_size T
+drm_intel_bufmgr_set_debug T
+drm_intel_decode T
+drm_intel_decode_context_alloc T
+drm_intel_decode_context_free T
+drm_intel_decode_set_batch_pointer T
+drm_intel_decode_set_dump_past_end T
+drm_intel_decode_set_head_tail T
+drm_intel_decode_set_output_file T
+drm_intel_gem_bo_aub_dump_bmp T
+drm_intel_gem_bo_clear_relocs T
+drm_intel_gem_bo_context_exec T
+drm_intel_gem_bo_get_reloc_count T
+drm_intel_gem_bo_map_gtt T
+drm_intel_gem_bo_map_unsynchronized T
+drm_intel_gem_bo_start_gtt_access T
+drm_intel_gem_bo_unmap_gtt T
+drm_intel_gem_bo_wait T
+drm_intel_gem_context_create T
+drm_intel_gem_context_destroy T
+drm_intel_get_aperture_sizes T
+drm_intel_get_eu_total T
+drm_intel_get_pipe_from_crtc_id T
+drm_intel_get_reset_stats T
+drm_intel_get_subslice_total T
+drm_intel_reg_read T
+drm_mmap T
+drm_munmap T
+genode_ioctl T
+pci_device_find_by_slot T
+pci_device_probe T
+pci_system_cleanup T
+pci_system_init T
+posix_memalign T
diff --git a/repos/libports/recipes/api/drm/content.mk b/repos/libports/recipes/api/drm/content.mk
new file mode 100644
index 0000000000..214460d716
--- /dev/null
+++ b/repos/libports/recipes/api/drm/content.mk
@@ -0,0 +1,23 @@
+MIRROR_FROM_REP_DIR := lib/import/import-drm.mk \
+ lib/symbols/drm
+
+content: $(MIRROR_FROM_REP_DIR)
+
+$(MIRROR_FROM_REP_DIR):
+ $(mirror_from_rep_dir)
+
+PORT_DIR := $(call port_dir,$(REP_DIR)/ports/drm)
+
+content: include
+
+include:
+ mkdir -p $@
+ cp -r $(PORT_DIR)/src/lib/drm/*.h $@
+ cp -r $(PORT_DIR)/src/lib/drm/include/drm $@
+ mkdir -p $@/intel
+ cp -r $(PORT_DIR)/src/lib/drm/intel/*.h $@/intel
+
+content: LICENSE
+
+LICENSE:
+ echo "MIT, see header files" > $@
diff --git a/repos/libports/recipes/api/drm/hash b/repos/libports/recipes/api/drm/hash
new file mode 100644
index 0000000000..350b1a9b10
--- /dev/null
+++ b/repos/libports/recipes/api/drm/hash
@@ -0,0 +1 @@
+2018-04-17 6dd45d932124e3291d5854201f7f0f0bd631b136
diff --git a/repos/libports/recipes/src/drm/api b/repos/libports/recipes/src/drm/api
new file mode 100644
index 0000000000..706adf0f48
--- /dev/null
+++ b/repos/libports/recipes/src/drm/api
@@ -0,0 +1 @@
+drm
diff --git a/repos/libports/recipes/src/drm/content.mk b/repos/libports/recipes/src/drm/content.mk
new file mode 100644
index 0000000000..aadb0f8829
--- /dev/null
+++ b/repos/libports/recipes/src/drm/content.mk
@@ -0,0 +1,34 @@
+MIRROR_FROM_REP_DIR := lib/mk/drm.mk \
+ src/lib/drm/include \
+ src/lib/drm/dummies.cc \
+ src/lib/drm/ioctl.cc
+
+content: $(MIRROR_FROM_REP_DIR) src/lib/drm/target.mk
+
+$(MIRROR_FROM_REP_DIR):
+ $(mirror_from_rep_dir)
+
+src/lib/drm/target.mk:
+ mkdir -p $(dir $@)
+ echo "LIBS = drm" > $@
+
+PORT_DIR := $(call port_dir,$(REP_DIR)/ports/drm)
+
+MIRROR_FROM_PORT_DIR := $(addprefix src/lib/drm/,\
+ intel/intel_bufmgr.c \
+ intel/intel_bufmgr_gem.c \
+ intel/intel_decode.c \
+ xf86drm.c \
+ xf86drmHash.c \
+ xf86drmRandom.c)
+
+content: $(MIRROR_FROM_PORT_DIR)
+
+$(MIRROR_FROM_PORT_DIR):
+ mkdir -p $(dir $@)
+ cp -r $(PORT_DIR)/$@ $(dir $@)
+
+content: LICENSE
+
+LICENSE:
+ echo "MIT, see header files" > $@
diff --git a/repos/libports/recipes/src/drm/hash b/repos/libports/recipes/src/drm/hash
new file mode 100644
index 0000000000..d3b334b85f
--- /dev/null
+++ b/repos/libports/recipes/src/drm/hash
@@ -0,0 +1 @@
+2018-04-17 f1a11352f72cd7ec24fe5558d8e0b95b19cc2d43
diff --git a/repos/libports/recipes/src/drm/used_apis b/repos/libports/recipes/src/drm/used_apis
new file mode 100644
index 0000000000..139debad25
--- /dev/null
+++ b/repos/libports/recipes/src/drm/used_apis
@@ -0,0 +1,3 @@
+base
+gpu_session
+libc
diff --git a/repos/libports/src/lib/drm/ioctl.cc b/repos/libports/src/lib/drm/ioctl.cc
index c7169e160d..ace3a1694c 100644
--- a/repos/libports/src/lib/drm/ioctl.cc
+++ b/repos/libports/src/lib/drm/ioctl.cc
@@ -19,7 +19,6 @@
#include
// #include
#include
-#include
#include
extern "C" {
@@ -130,7 +129,6 @@ static const char *command_name(long request)
case DRM_I915_GET_RESET_STATS: return "DRM_I915_GET_RESET_STATS";
case DRM_I915_GEM_CONTEXT_CREATE: return "DRM_I915_GEM_CONTEXT_CREATE";
default:
- Genode::backtrace();
return "";
}
}