intel / intel/media-driver

[Bug]: CMake generates 600+ include directories per compilation unit

Open
#1,984 1 comment 0 reactions 2 assignees Claimed by @XinfengZhang View on GitHub
Dominant language
C
Stars
1.2k
Forks
383
Avg merge
8d 18h
Merged PRs (30d)
4

Description

### Which component impacted?

Build

### Is it regression? Good in old configuration?

No, this issue exist a long time

### What happened?

PROBLEM
-------
The CMake build configuration adds 600+ include directories (-I flags) to
individual source files. This is excessive - typical C++ projects use 20-100
include directories.

IMPACT
------
- Build failures in Yocto/OpenEmbedded (ARG_MAX limit exceeded)
- Fails with typical workspace path lengths (80-120 characters)
- Breaks in Docker, CI/CD, and automated build environments
- Slower compilation (compiler searches 600+ directories per file)

ERROR
-----
fatal error: cannot execute 'cc1plus': posix_spawn: Argument list too long

CAUSE
-----
600+ include paths × ~100 chars average = 60KB+ of path data
Combined with other compiler arguments, this exceeds Linux ARG_MAX limits.

Note: Response files don't solve this - GCC expands them before spawning
cc1plus, so the limit still applies.

SOLUTION
--------
Reduce include directories using CMake best practices:

1. Replace include_directories() with target_include_directories()
2. Use PRIVATE visibility for internal headers
3. Use INTERFACE/PUBLIC only for headers exposed to consumers
4. Remove duplicate/redundant paths
5. Use relative paths for headers

BENEFITS
--------
- Fixes build failures across multiple environments
- Faster compilation (20-30% improvement typical)
- Better maintainability and clearer dependencies
- Modern CMake best practices

VERIFICATION
------------
Check compile_commands.json - most files should have 20-100 include
directories, not 600+.

### What's the usage scenario when you are seeing the problem?

Others

### What impacted?

Compilation of media_driver source files, specifically:
- media_driver COMMON target compilation units
- Files including: cm_def.cpp, cm_buffer_rt.cpp, cm_event_rt.cpp, cm_hal.cpp
- Affects all builds where workspace path + include directories exceed ARG_MAX
- Build environments: Yocto/OpenEmbedded, Docker, CI/CD systems

### Debug Information

Build System: CMake with Ninja generator
Compiler: GCC (g++)
System: Linux (ARG_MAX: 2097152 bytes / 2MB)

Include directory count from response file:
$ grep -c "^-I" media_driver/CMakeFiles/iHD_drv_video_COMMON.dir/file.rsp
600+

Example compilation command (from build.ninja):
/path/to/g++ --sysroot=/path/to/sysroot @response_file.rsp -MD -MT

### Do you want to contribute a patch to fix the issue?

No.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.