xref: /aosp_15_r20/build/soong/docs/clion.md (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Worker# CLion project generator
2*333d2b36SAndroid Build Coastguard Worker
3*333d2b36SAndroid Build Coastguard WorkerSoong can generate CLion projects. This is intended for source code editing
4*333d2b36SAndroid Build Coastguard Workeronly. Build should still be done via make/m/mm(a)/mmm(a).
5*333d2b36SAndroid Build Coastguard Worker
6*333d2b36SAndroid Build Coastguard WorkerNote: alternatively, you can use
7*333d2b36SAndroid Build Coastguard Worker[aidegen to generate a Clion or VSCode project](https://android.googlesource.com/platform/tools/asuite/+/refs/heads/main/aidegen/README.md)
8*333d2b36SAndroid Build Coastguard Workerwith a single command, using the `-i c` flag.
9*333d2b36SAndroid Build Coastguard Worker
10*333d2b36SAndroid Build Coastguard WorkerCMakeLists.txt project file generation is enabled via environment variable:
11*333d2b36SAndroid Build Coastguard Worker
12*333d2b36SAndroid Build Coastguard Worker```bash
13*333d2b36SAndroid Build Coastguard Worker$ export SOONG_GEN_CMAKEFILES=1
14*333d2b36SAndroid Build Coastguard Worker$ export SOONG_GEN_CMAKEFILES_DEBUG=1
15*333d2b36SAndroid Build Coastguard Worker```
16*333d2b36SAndroid Build Coastguard Worker
17*333d2b36SAndroid Build Coastguard WorkerYou can then trigger a full build:
18*333d2b36SAndroid Build Coastguard Worker
19*333d2b36SAndroid Build Coastguard Worker```bash
20*333d2b36SAndroid Build Coastguard Worker$ make -j64
21*333d2b36SAndroid Build Coastguard Worker```
22*333d2b36SAndroid Build Coastguard Workeror build only the project you are interested in:
23*333d2b36SAndroid Build Coastguard Worker
24*333d2b36SAndroid Build Coastguard Worker```bash
25*333d2b36SAndroid Build Coastguard Worker$ make frameworks/native/service/libs/ui
26*333d2b36SAndroid Build Coastguard Worker```
27*333d2b36SAndroid Build Coastguard Worker
28*333d2b36SAndroid Build Coastguard WorkerProjects are generated in the ``out`` directory. In the case of libui, the path would
29*333d2b36SAndroid Build Coastguard Workerbe:
30*333d2b36SAndroid Build Coastguard Worker
31*333d2b36SAndroid Build Coastguard Worker```bash
32*333d2b36SAndroid Build Coastguard Workerout/development/ide/clion/frameworks/native/libs/ui/libui-arm64-android/CMakeLists.txt
33*333d2b36SAndroid Build Coastguard Worker```
34*333d2b36SAndroid Build Coastguard WorkerNote: The generator creates one folder per targetname-architecture-os combination.
35*333d2b36SAndroid Build Coastguard WorkerIn the case of libui you endup with two projects:
36*333d2b36SAndroid Build Coastguard Worker
37*333d2b36SAndroid Build Coastguard Worker```bash
38*333d2b36SAndroid Build Coastguard Worker$ ls out/development/ide/clion/frameworks/native/libs/ui
39*333d2b36SAndroid Build Coastguard Workerlibui-arm64-android libui-arm-android
40*333d2b36SAndroid Build Coastguard Worker```
41*333d2b36SAndroid Build Coastguard Worker
42*333d2b36SAndroid Build Coastguard Worker### Edit multiple projects at once
43*333d2b36SAndroid Build Coastguard WorkerTo combine several projects into one, you can create super projects
44*333d2b36SAndroid Build Coastguard Workerand place them in:
45*333d2b36SAndroid Build Coastguard Worker
46*333d2b36SAndroid Build Coastguard Worker```bash
47*333d2b36SAndroid Build Coastguard Workerdevelopment/ide/clion/[PATH_YOU_WANT]/..
48*333d2b36SAndroid Build Coastguard Worker```
49*333d2b36SAndroid Build Coastguard Worker
50*333d2b36SAndroid Build Coastguard WorkerThese file will be symbolicaly linked in ``out/development/ide/clion``. All folders
51*333d2b36SAndroid Build Coastguard Workerwill also be created there.
52*333d2b36SAndroid Build Coastguard Worker
53*333d2b36SAndroid Build Coastguard WorkerAn example of a super project for surfaceflinger (using libui and libgui)
54*333d2b36SAndroid Build Coastguard Workerlocated in development/ide/clion/frameworks/native:
55*333d2b36SAndroid Build Coastguard Worker
56*333d2b36SAndroid Build Coastguard Worker```
57*333d2b36SAndroid Build Coastguard Workercmake_minimum_required(VERSION 3.6)
58*333d2b36SAndroid Build Coastguard Workerproject(native)
59*333d2b36SAndroid Build Coastguard Workeradd_subdirectory(services/surfaceflinger)
60*333d2b36SAndroid Build Coastguard Workeradd_subdirectory(libs/ui/libui-arm64-android)
61*333d2b36SAndroid Build Coastguard Workeradd_subdirectory(libs/gui/libgui-arm64-android)
62*333d2b36SAndroid Build Coastguard Worker```
63*333d2b36SAndroid Build Coastguard Worker
64*333d2b36SAndroid Build Coastguard Worker
65*333d2b36SAndroid Build Coastguard Worker### Flattened filesystem
66*333d2b36SAndroid Build Coastguard Worker
67*333d2b36SAndroid Build Coastguard WorkerUpon opening a project it looks like all the folder structure has been
68*333d2b36SAndroid Build Coastguard Workerflattened:
69*333d2b36SAndroid Build Coastguard Worker
70*333d2b36SAndroid Build Coastguard Worker![Flattened View](before.png "")
71*333d2b36SAndroid Build Coastguard Worker
72*333d2b36SAndroid Build Coastguard WorkerThis is because you need to change the project root. Via Tools > CMake >
73*333d2b36SAndroid Build Coastguard WorkerChange Project Root:
74*333d2b36SAndroid Build Coastguard Worker
75*333d2b36SAndroid Build Coastguard Worker![Unflattened View](after.png "")
76*333d2b36SAndroid Build Coastguard Worker
77