[Build] Integration with CLion

This commit is contained in:
Gliniak
2026-03-08 19:38:28 +01:00
parent 6dfb323fe6
commit 54400cbc2c

View File

@@ -24,6 +24,53 @@ __author__ = "ben.vanik@gmail.com (Ben Vanik)"
self_path = os.path.dirname(os.path.abspath(__file__)) self_path = os.path.dirname(os.path.abspath(__file__))
# TODO: Automate getting these entries
XENIA_TARGETS = [
"aes_128",
"capstone",
"dxbc",
"discord-rpc",
"fmt",
"glslang-spirv",
"imgui",
"libavcodec",
"libavformat",
"libavutil",
"mspack",
"pugixml",
"snappy",
"xxhash",
"zarchive",
"zlib-ng",
"zstd",
"xenia-app",
"xenia-app-discord",
"xenia-apu",
"xenia-apu-alsa",
"xenia-apu-nop",
"xenia-apu-sdl",
"xenia-base",
"xenia-core",
"xenia-cpu",
"xenia-cpu-backend-x64",
"xenia-debug-ui",
"xenia-gpu",
"xenia-gpu-null",
"xenia-gpu-vulkan",
"xenia-gpu-vulkan-spirv-shaders",
"xenia-helper-sdl",
"xenia-hid",
"xenia-hid-nop",
"xenia-hid-sdl",
"xenia-hid-skylander",
"xenia-kernel",
"xenia-patcher",
"xenia-ui",
"xenia-ui-vulkan",
"xenia-ui-vulkan-spirv-shaders",
"xenia-vfs",
]
class bcolors: class bcolors:
# HEADER = "\033[95m" # HEADER = "\033[95m"
# OKBLUE = "\033[94m" # OKBLUE = "\033[94m"
@@ -690,26 +737,86 @@ def create_clion_workspace():
with open(os.path.join(".idea", "misc.xml"), "w") as f: with open(os.path.join(".idea", "misc.xml"), "w") as f:
f.write("""<?xml version="1.0" encoding="UTF-8"?> f.write("""<?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$"> <component name="CMakePythonSetting">
<contentRoot DIR="$PROJECT_DIR$" /> <option name="pythonIntegrationState" value="YES" />
</component> </component>
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
</project> </project>
""") """)
# Set available configurations # Create workspace.xml file
# TODO Find a way to trigger a cmake reload
with open(os.path.join(".idea", "workspace.xml"), "w") as f: with open(os.path.join(".idea", "workspace.xml"), "w") as f:
# Write CmakePresetLoader
f.write("""<?xml version="1.0" encoding="UTF-8"?> f.write("""<?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="CMakeSettings"> <component name="CMakePresetLoader"><![CDATA[{
<configurations> "useNewFormat": true
<configuration PROFILE_NAME="Checked" CONFIG_NAME="Checked" /> }]]></component>
<configuration PROFILE_NAME="Debug" CONFIG_NAME="Debug" /> """)
<configuration PROFILE_NAME="Release" CONFIG_NAME="Release" /> f.write(""" <component name="CMakeReloadState">
</configurations> <option name="reloaded" value="true" />
</component> </component>
</project>""") """)
# Write ConfigurationManager
f.write(""" <component name="CMakeRunConfigurationManager">\n""")
f.write(" <generated>\n")
# Loop over every entry
for target in XENIA_TARGETS:
f.write(f' <config projectName="xenia" targetName="{target}" />\n')
f.write(" </generated>\n")
f.write(" </component>\n")
# Write CMakeSettings
f.write(""" <component name="CMakeSettings">\n""")
f.write(" <configurations>\n")
f.write(""" <configuration PROFILE_NAME="default - debug" ENABLED="true" FROM_PRESET="true" GENERATION_DIR="$PROJECT_DIR$/build" />\n""")
f.write(""" <configuration PROFILE_NAME="default - release" ENABLED="true" FROM_PRESET="true" GENERATION_DIR="$PROJECT_DIR$/build" />\n""")
f.write(""" <configuration PROFILE_NAME="default - checked" ENABLED="true" FROM_PRESET="true" GENERATION_DIR="$PROJECT_DIR$/build" />\n""")
f.write(" </configurations>\n")
f.write(" </component>\n")
# Write RunManager
# Write basic xenia-app manually
f.write(""" <component name="RunManager" selected="CMake Application.xenia-app">\n""")
f.write(""" <configuration default="true" type="CLionExternalRunConfiguration" factoryName="Application" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true">\n""")
f.write(""" <method v="2">\n""")
f.write(""" <option name="CLION.EXTERNAL.BUILD" enabled="true" />\n""")
f.write(""" </method>\n""")
f.write(""" </configuration>\n""")
for target in XENIA_TARGETS:
if target != "xenia-app":
f.write(f' <configuration name="{target}" type="CMakeRunConfiguration" factoryName="Application" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="xenia" TARGET_NAME="{target}" CONFIG_NAME="default - debug">\n')
else:
f.write(f' <configuration name="{target}" type="CMakeRunConfiguration" factoryName="Application" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="xenia" TARGET_NAME="{target}" CONFIG_NAME="default - debug" RUN_TARGET_PROJECT_NAME="xenia" RUN_TARGET_NAME="{target}">\n')
f.write(""" <method v="2">\n""")
f.write(""" <option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />\n""")
f.write(""" </method>\n""")
f.write(""" </configuration>\n""")
# Write itemvalue list
f.write(""" <list>\n""")
for target in XENIA_TARGETS:
f.write(f' <item itemvalue="CMake Application.{target}" />\n')
f.write(""" </list>\n""")
f.write(""" </component>\n""")
f.write("""</project>\n""")
os.makedirs(os.path.join(".idea", "codeStyles"), exist_ok=True)
with open(os.path.join(".idea", "codeStyles", "Project.xml"), "w") as f:
f.write("""<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project">
<RiderCodeStyleSettings>
<option name="/Default/CodeStyle/CodeFormatting/CppClangFormat/EnableClangFormatSupport/@EntryValue" value="true" type="bool" />
</RiderCodeStyleSettings>
<clangFormatSettings>
<option name="ENABLED" value="true" />
</clangFormatSettings>
</code_scheme>
</component>""")
return True return True
@@ -1789,6 +1896,7 @@ class DevenvCommand(Command):
print("Launching Visual Studio...") print("Launching Visual Studio...")
elif has_bin("clion") or has_bin("clion.sh"): elif has_bin("clion") or has_bin("clion.sh"):
print("Launching CLion...") print("Launching CLion...")
create_clion_workspace()
else: else:
print("IDE not detected. CMakeLists.txt is in the project root.") print("IDE not detected. CMakeLists.txt is in the project root.")