# Compilation and Building Guidelines
- [Directory Structure](#section56731811102915)
- [Component-based Building Procedure](#section4207112818418)
## Directory Structure
```
build/lite # Primary directory for compilation and building
├── components # Component description file
├── hb # hb pip installation package
├── make_rootfs # make script for the file system
├── config # Compilation configuration items
│ ├── component # Definitions of component-related templates, including static libraries, dynamic libraries, extension components, and emulator libraries
│ ├── kernel # Compilation configuration parameters of the kernel
│ └── subsystem # Subsystem template
├── ndk # NDK-related compilation scripts and configuration parameters
└── toolchain # Compilation toolchains, which contain the compiler directories, compilation options, and linking options
```
## Component-based Building Procedure
1. Add the component compilation script.
The compilation script language for the component is GN. For details about its basic usage, see the [GN Quick Start Guide](https://gn.googlesource.com/gn/+/master/docs/quick_start.md). In GN, a component is a compilation unit, which can be a static library, a dynamic library, or an executable file.
The following example adds a script to compile the **hello\_world** component \(as an executable file\).
```
executable("hello_world") {
include_dirs = [
"include",
]
sources = [
"src/hello_world.c"
]
}
```
The added script is used to compile **hello\_world** that can run on OpenHarmony.
2. Add the component description.
The component description is stored in the **build/lite/components** directory. New components must be added to the JSON file of the corresponding subsystem. A component description must contain the following fields:
- **component**: name of the component
- **description**: one-sentence description of the component
- **optional**: whether the component is optional
- **dirs**: source code directory of the component
- **targets**: component compilation entry
For example, to add the **hello\_world** component to the application subsystem, add the **hello\_world** object to the **applications.json** file.
```
{
"components": [
{
"component": hello_world",
"description": "Hello world.",
"optional": "true",
"dirs": [
"applications/sample/hello_world"
],
"targets": [
"//applications/sample/hello_world"
]
},
...
]
}
```
3. Configure the component for the product.
The product configuration file is stored in the **vendor/company/** directory. The file must contain the product name, OpenHarmony version, device vendor, development board name, kernel type, kernel version, and the subsystem and component to configure. The following example adds the **hello\_world** component to the **my\_product.json** configuration file:
```
{
"product_name": "hello_world_test",
"ohos_version": "OpenHarmony 1.0",
"device_company": "hisilicon",
"board": "hispark_taurus",
"kernel_type": "liteos_a",
"kernel_version": "1.0.0",
"subsystems": [
{
"subsystem": "applications",
"components": [
{ "component": "hello_world", "features":[] }
]
},
...
]
}
```
4. Compile the component or product.
1. Run **hb set** and select **hello\_world\_test@hisilicon**.
2. To build the **hello\_world** component, run the following command:
**hb build hello\_world**
To build the **hello\_world\_test** product, run the following command:
**hb build**