diff --git a/SConscript b/SConscript index 144c71a..fda92d7 100644 --- a/SConscript +++ b/SConscript @@ -17,7 +17,8 @@ import uuid class TargetType(enum.Enum): PROGRAM = 0 - LIBRARY = 1 + STATIC_LIBRARY = 1 + SHARED_LIBRARY = 2 class _VersionSpec: minimum_version = None @@ -342,7 +343,7 @@ def _wrap_builder(builder, target_type: TargetType): for name, version_spec in dependencies.items(): if version_spec == {}: dep_target = _find_target(env, name) - if dep_target is not None and dep_target.target_type == TargetType.LIBRARY: + if dep_target is not None and dep_target.target_type != TargetType.PROGRAM: #if 'LIBS' in kwargs: # kwargs['LIBS'].append(dep_target) #else: @@ -540,12 +541,33 @@ def _generate_project(project_type: str) -> None: 'filename': str(exe_path) }) return result + def _get_libraries() -> list: + result = [] + for target in env['SPP_TARGETS']: + if target.target_type == TargetType.STATIC_LIBRARY: + trgt = _target_entry(target.kwargs['target']) + lib_path = pathlib.Path(trgt.abspath).relative_to(root_path) + lib_path = lib_path.parent / f'{env.subst("$LIBPREFIX")}{lib_path.name}{env.subst("$LIBSUFFIX")}' + result.append({ + 'name': target.name, + 'filename': str(lib_path) + }) + elif target.target_type == TargetType.SHARED_LIBRARY: + trgt = _target_entry(target.kwargs['target']) + lib_path = pathlib.Path(trgt.abspath).relative_to(root_path) + lib_path = lib_path.parent / f'{env.subst("$SHLIBPREFIX")}{lib_path.name}{env.subst("$SHLIBSUFFIX")}' + result.append({ + 'name': target.name, + 'filename': str(lib_path) + }) + return result jinja_env = jinja2.Environment() jinja_env.globals['generate_uuid'] = _generate_uuid jinja_env.globals['project'] = { 'name': env.Dir('#').name, 'executables': _get_executables(), + 'libraries': _get_libraries(), 'build_types': ['debug', 'release_debug', 'release', 'profile'] } jinja_env.globals['scons_exe'] = shutil.which('scons') @@ -914,17 +936,17 @@ env.AddMethod(_make_interface, 'MakeInterface') env.AddMethod(_lib_filename, 'LibFilename') env.AddMethod(_find_lib, 'FindLib') env.AddMethod(_error, 'Error') -env.AddMethod(_wrap_builder(env.Library, TargetType.LIBRARY), 'Library') -env.AddMethod(_wrap_builder(env.StaticLibrary, TargetType.LIBRARY), 'StaticLibrary') -env.AddMethod(_wrap_builder(env.SharedLibrary, TargetType.LIBRARY), 'SharedLibrary') +env.AddMethod(_wrap_builder(env.Library, TargetType.STATIC_LIBRARY), 'Library') +env.AddMethod(_wrap_builder(env.StaticLibrary, TargetType.STATIC_LIBRARY), 'StaticLibrary') +env.AddMethod(_wrap_builder(env.SharedLibrary, TargetType.SHARED_LIBRARY), 'SharedLibrary') env.AddMethod(_wrap_builder(env.Program, TargetType.PROGRAM), 'Program') env.AddMethod(_wrap_default(env.Default), 'Default') env.AddMethod(_wrap_depends(env.Depends), 'Depends') env.AddMethod(_wrap_builder(env.UnityProgram, TargetType.PROGRAM), 'UnityProgram') -env.AddMethod(_wrap_builder(env.UnityLibrary, TargetType.LIBRARY), 'UnityLibrary') -env.AddMethod(_wrap_builder(env.UnityStaticLibrary, TargetType.LIBRARY), 'UnityStaticLibrary') -env.AddMethod(_wrap_builder(env.UnitySharedLibrary, TargetType.LIBRARY), 'UnitySharedLibrary') +env.AddMethod(_wrap_builder(env.UnityLibrary, TargetType.STATIC_LIBRARY), 'UnityLibrary') +env.AddMethod(_wrap_builder(env.UnityStaticLibrary, TargetType.STATIC_LIBRARY), 'UnityStaticLibrary') +env.AddMethod(_wrap_builder(env.UnitySharedLibrary, TargetType.SHARED_LIBRARY), 'UnitySharedLibrary') env.AddMethod(_module, 'Module') env.AddMethod(_finalize, 'Finalize') env.AddMethod(_find_target, 'FindTarget') diff --git a/util/clion_project_template/customTargets.xml.jinja b/util/clion_project_template/customTargets.xml.jinja index 0dfd4d1..5cc1226 100644 --- a/util/clion_project_template/customTargets.xml.jinja +++ b/util/clion_project_template/customTargets.xml.jinja @@ -16,5 +16,20 @@ {% endfor %} {% endfor %} + {% for library in project.libraries %} + {% for build_type in project.build_types %} + {% set build_type_name = build_type | capitalize -%} + + + + + + + + + + + {% endfor %} + {% endfor %} diff --git a/util/clion_project_template/tools/External Tools.xml.jinja b/util/clion_project_template/tools/External Tools.xml.jinja index faf4cd5..a392e3d 100644 --- a/util/clion_project_template/tools/External Tools.xml.jinja +++ b/util/clion_project_template/tools/External Tools.xml.jinja @@ -18,4 +18,23 @@ {% endfor %} {% endfor %} + {% for library in project.libraries %} + {% for build_type in project.build_types %} + {% set build_type_name = build_type | capitalize -%} + + + + + + + + + {% endfor %} + {% endfor %} diff --git a/util/clion_project_template/workspace.xml.jinja b/util/clion_project_template/workspace.xml.jinja index 878e80a..e30f906 100644 --- a/util/clion_project_template/workspace.xml.jinja +++ b/util/clion_project_template/workspace.xml.jinja @@ -91,6 +91,16 @@ {% endfor -%} {% endfor -%} + {% for library in project.libraries -%} + {% for build_type in project.build_types -%} + {% set build_type_name = build_type | capitalize -%} + + + + + {% endfor -%} + {% endfor -%}