#----------------------------------------------------------------------------
#  Copyright (c) 2022 Arm Limited. All rights reserved.
#  SPDX-License-Identifier: Apache-2.0
#
#  Licensed 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.
#----------------------------------------------------------------------------

#########################################################
# LCD library                                           #
#########################################################

cmake_minimum_required(VERSION 3.15.6)

project(lcd_component
    DESCRIPTION     "LCD support library"
    LANGUAGES       C CXX ASM)

# Add top level interface library
set(LCD_IFACE_TARGET lcd_iface)
add_library(${LCD_IFACE_TARGET} INTERFACE)
target_include_directories(${LCD_IFACE_TARGET} INTERFACE include)

# Create static library for MPS3 LCD
set(LCD_MPS3_COMPONENT_TARGET lcd_mps3)
add_library(${LCD_MPS3_COMPONENT_TARGET} STATIC)

set(CLCD_CONFIG_BASE "0x4930A000" CACHE STRING "LCD configuration base address")

## Include directories - private
target_include_directories(${LCD_MPS3_COMPONENT_TARGET}
    PRIVATE
    source)

## Component sources
target_sources(${LCD_MPS3_COMPONENT_TARGET}
    PRIVATE
    source/glcd_mps3/glcd_mps3.c
    source/lcd_img.c)

# Compile definitions
target_compile_definitions(${LCD_MPS3_COMPONENT_TARGET}
    PRIVATE
    CLCD_CONFIG_BASE=${CLCD_CONFIG_BASE})

## Add dependencies
target_link_libraries(${LCD_MPS3_COMPONENT_TARGET} PUBLIC
    ${LCD_IFACE_TARGET}
    log)

# Display status
message(STATUS "CMAKE_CURRENT_SOURCE_DIR: " ${CMAKE_CURRENT_SOURCE_DIR})
message(STATUS "*******************************************************")
message(STATUS "Library                                : " ${LCD_MPS3_COMPONENT_TARGET})
message(STATUS "*******************************************************")

# Create static library for LCD Stubs
set(LCD_STUBS_COMPONENT_TARGET lcd_stubs)
add_library(${LCD_STUBS_COMPONENT_TARGET} STATIC)

## Include directories - private
target_include_directories(${LCD_STUBS_COMPONENT_TARGET}
    PRIVATE
    source)

## Component sources
target_sources(${LCD_STUBS_COMPONENT_TARGET}
    PRIVATE
    source/glcd_stubs/glcd_stubs.c
    source/lcd_img.c)

## Add dependencies
target_link_libraries(${LCD_STUBS_COMPONENT_TARGET} PUBLIC
    ${LCD_IFACE_TARGET}
    log)

# Display status
message(STATUS "CMAKE_CURRENT_SOURCE_DIR: " ${CMAKE_CURRENT_SOURCE_DIR})
message(STATUS "*******************************************************")
message(STATUS "Library                                : " ${LCD_STUBS_COMPONENT_TARGET})
message(STATUS "*******************************************************")