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 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 76*333d2b36SAndroid Build Coastguard Worker 77