diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 00000000000..c19084e1fbe --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,21 @@ +FROM ubuntu:22.04 + +# 開発に必要なツールをすべてインストール +# 対話モードを無効化し、不要なキャッシュは削除する +ENV DEBIAN_FRONTEND=noninteractive +RUN apt-get update && apt-get install -y \ + build-essential \ + pciutils \ + iproute2 \ + kmod \ + python3 \ + python3-pyelftools \ + libnuma-dev \ + meson \ + ninja-build \ + git \ + && rm -rf /var/lib/apt/lists/* + +# コンテナが終了しないようにするためのダミーコマンド +# VS Codeがこの設定を上書きするので、実際には実行されない +CMD ["sleep", "infinity"] \ No newline at end of file diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 00000000000..ae99af27d04 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,36 @@ +{ + "name": "DPDK Dev Container", + "build": { + "dockerfile": "Dockerfile", + "context": ".." + }, + // コンテナ実行時に渡す引数 + "runArgs": [ + "--privileged", + "--network=host", + // DPDKデバイスアクセス用 + "--volume=/sys/bus/pci/devices:/sys/bus/pci/devices", + // Hugepages制御用 + "--volume=/sys/kernel/mm/hugepages:/sys/kernel/mm/hugepages", + // Hugepagesアクセス用 + "--volume=/dev/hugepages:/dev/hugepages", + // lspciやlsmodなどがカーネルモジュール情報を参照するために必要 + "--volume=/lib/modules:/lib/modules:ro" + ], + "customizations": { + "vscode": { + "extensions": [ + "ms-vscode.cpptools", + "ms-vscode.cpptools-extension-pack", + "ms-azure-tools.vscode-docker" + ], + "settings": { + "terminal.integrated.defaultProfile.linux": "bash" + } + } + }, + // コンテナ起動時に実行するコマンド + // 以前に作成したbuildディレクトリがあれば削除。Mesonでビルド設定を行い、Ninjaでビルドを実行 + "postCreateCommand": "rm -rf build && meson setup build -Dexamples=all && ninja -C build", + "remoteUser": "root" +} \ No newline at end of file diff --git a/.gitignore b/.gitignore index 48b4ce2908f..96e74291774 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ !.github/ !.gitignore* !.mailmap* +!.devcontainer/ # ignore generated documentation tables doc/guides/nics/overview_table.txt