CARVIEW |
Select Language
HTTP/2 200
date: Fri, 25 Jul 2025 22:32:50 GMT
content-type: text/html; charset=utf-8
vary: X-PJAX, X-PJAX-Container, Turbo-Visit, Turbo-Frame, X-Requested-With,Accept-Encoding, Accept, X-Requested-With
etag: W/"8d6aa66fc8bff9bad094bc6a795b3b8c"
cache-control: max-age=0, private, must-revalidate
strict-transport-security: max-age=31536000; includeSubdomains; preload
x-frame-options: deny
x-content-type-options: nosniff
x-xss-protection: 0
referrer-policy: no-referrer-when-downgrade
content-security-policy: default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com *.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com proxy.individual.githubcopilot.com proxy.business.githubcopilot.com proxy.enterprise.githubcopilot.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net/ productionresultssa1.blob.core.windows.net/ productionresultssa2.blob.core.windows.net/ productionresultssa3.blob.core.windows.net/ productionresultssa4.blob.core.windows.net/ productionresultssa5.blob.core.windows.net/ productionresultssa6.blob.core.windows.net/ productionresultssa7.blob.core.windows.net/ productionresultssa8.blob.core.windows.net/ productionresultssa9.blob.core.windows.net/ productionresultssa10.blob.core.windows.net/ productionresultssa11.blob.core.windows.net/ productionresultssa12.blob.core.windows.net/ productionresultssa13.blob.core.windows.net/ productionresultssa14.blob.core.windows.net/ productionresultssa15.blob.core.windows.net/ productionresultssa16.blob.core.windows.net/ productionresultssa17.blob.core.windows.net/ productionresultssa18.blob.core.windows.net/ productionresultssa19.blob.core.windows.net/ github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com api.githubcopilot.com api.individual.githubcopilot.com api.business.githubcopilot.com api.enterprise.githubcopilot.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com private-avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com release-assets.githubusercontent.com secured-user-images.githubusercontent.com/ user-images.githubusercontent.com/ private-user-images.githubusercontent.com opengraph.githubassets.com copilotprodattachments.blob.core.windows.net/github-production-copilot-attachments/ github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com/ secured-user-images.githubusercontent.com/ private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/
server: github.com
content-encoding: gzip
accept-ranges: bytes
set-cookie: _gh_sess=uN1SKOPCANS%2BDT7qYMMU6slKVlsTnKlg1e%2Fp8XvcYskGUhY82EUAhSmFFYVgP313fJ59HYtgH6bxQMkXERACPyhvglZ6WuSK48CUuzNryti3N3g4K0b2yqhjC%2FHEMjogvswG3owuUkh1YrW%2Fg8ZP%2BaPCaMLJ0%2BidTDMmIwOiBsKB7KDeyUqUWI%2F8xRuoDgRGnm8hKypSgr7Rvbs0o%2B%2Fcn6XBexMaaUXFbzaMHGphCySJm8VvjeJRFHxSgnWea%2BhkeSQyWpSlMUN3evPHp%2B9hOw%3D%3D--b4%2FXwmXOPc2eI%2BGO--xt6CkNK5P62fnJPHQHRXZg%3D%3D; Path=/; HttpOnly; Secure; SameSite=Lax
set-cookie: _octo=GH1.1.1571507535.1753482769; Path=/; Domain=github.com; Expires=Sat, 25 Jul 2026 22:32:49 GMT; Secure; SameSite=Lax
set-cookie: logged_in=no; Path=/; Domain=github.com; Expires=Sat, 25 Jul 2026 22:32:49 GMT; HttpOnly; Secure; SameSite=Lax
x-github-request-id: B43E:9363:120433:1977EC:68840611
Project Repository Structure · avast/retdec Wiki · GitHub
Skip to content
Navigation Menu
{{ message }}
-
Notifications
You must be signed in to change notification settings - Fork 970
Project Repository Structure
Peter Matula edited this page Apr 7, 2020
·
7 revisions
After the initial release (see Past States), we have settled on the following structure of the RetDec project repository:
- Sources of all libraries and tools that make up RetDec are in a single repository called
retdec
. - Sources of our tools are in the
src
directory. Headers are ininclude/retdec
. - Third-party libraries are in the
deps
directory. Their sources are downloaded via CMake's external-project mechanism. - Preferably, we get third-party libraries directly from their official repositories.
- However, if we use modified third-party libraries, we get them from our modified forks in the avast organization.
- There are no Git submodules, C++ dependency managers like Conan, etc. Only CMake external projects.
- It is possible to build, install, and use only the selected subset of RetDec components. E.g. only the
fileformat
library andfileinfo
tool. - All the components support a proper system-wide installation (includes, dependencies, documentation, etc.). After the installation, libraries can be used in a standard way.
This solution has the following advantages:
- Simple. No Git submodules, C++ dependency managers, etc. Only CMake external projects.
- Development-friendly. A single repository solution is the fastest and most comfortable option for development.
- Clean. CMake external projects keep the third-party sources out of the
retdec
repository and provide an elegant way to reference particular versions used by RetDec. - The build system preserves the advantages of independent repositories - selective build and installation.
This solution has the following disadvantages:
- If someone is interested only in some component of the RetDec project (e.g.
fileformat
), he or she needs to clone the entire repository containing all RetDec libraries and tools, and configure CMake to build and install only the desired component. This is less elegant than cloning only the desired independent repository (e.g.fileformat
).
How did we come to this:
- Originally (before open-sourcing), everything was in one giant internal repository (including sources of third-party projects, regression tests, etc.). It was messy but easy to develop.
- Before open-sourcing, we wanted to split the repository into its logical parts, so that they can be built, used, and developed independently.
- We decided to create a separate Git repository for every logical component and link them together via Git's submodule mechanism. The dependency tree looked like this:
- This proved confusing (#72), hard to maintain, slow to develop, and exhibited several other issues like #14 and #48.
- Instead of reducing the complexity of the dependency tree, or complicating the matter by using C++ dependency managers, we decided to put all the related libraries and tools together into a single repository.
- We keep the advantage of independent repositories by implementing the build system in a way that allows build and installation of only user-selected components.
Clone this wiki locally
You can’t perform that action at this time.