Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 87 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->

# Project overview

Apache Celix is an implementation of the OSGi specification adapted for C (C11) and C++ (C++14).
It enables a dynamic, modular software architecture using bundles, services, and components.

Key Concepts
- Bundles: Deployment units (zip files) containing libraries and resources.
- Services: Function pointer structs (C) or abstract classes (C++) registered in a framework-wide registry.
- Components: Logic units managed by the Dependency Manager (DM) that handle service lifecycle (init, start, stop, deinit) declaratively.
- Containers: Executables created via add_celix_container that launch a framework instance with preconfigured bundles.

## Building (Offline Priority)

Assume no internet connection. Request confirmation before installing system packages.

```bash

# Initial configure build:
cmake \
-DCMAKE_FETCHCONTENT_FULLY_DISCONNECTED=ON \
-DENABLE_TESTING=ON \
-DRSA_JSON_RPC=ON \
-DRSA_REMOTE_SERVICE_ADMIN_SHM_V2=ON \
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-G Ninja \
-S . -B build

# Initial configure build, if a download is needed:
cmake \
-DENABLE_TESTING=ON \
-DRSA_JSON_RPC=ON \
-DRSA_REMOTE_SERVICE_ADMIN_SHM_V2=ON \
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-G Ninja \
-S . -B build

# Compile:
cmake --build build --parallel
```

# Test Execution

After building, run the tests for the components you changed. Run `ctest` from
the appropriate `build` subdirectory when possible.
For example, to test the shell bundles:

Scoped:
```bash
ctest --output-on-failure --test-dir build/<sub-dir>
```

Full Suite:
```bash
ctest --output-on-failure --test-dir build
```

With exception of documentation changes, always build and run the test before submitting changes.

# Quality Standards

- Line Coverage: New code must aim for >95% line coverage.
- Error Injection: Use or extend the Apache Celix error_injector libraries to inject errors in unit tests to ensure high code coverage.

# Coding Style

- Refer to the [development guide](documents/development/README.md) for the project's coding conventions.
- New files should be formatted with the project's `.clang-format` configuration.

5 changes: 5 additions & 0 deletions documents/development/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@ Note that not all existing code adheres to these conventions.
New code should adhere to these conventions, and when possible, existing code should be updated to adhere to these
conventions.

## Using Generative AI

- You own any code you submit, including AI-assisted changes. GenAI suggestions do not transfer ownership or responsibility.
- Review AI-produced code critically for structure, threading behavior, resource handling, coding conventions, and test coverage.

## Naming Conventions

### C/C++ Variables
Expand Down
Loading