# Copyright (c) 2023 Intel Corporation.
# SPDX-License-Identifier: Apache-2.0

cmake_minimum_required(VERSION 3.20.0)
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(hello_world)

# TODO check which architecture is being used
if(CONFIG_ARM)
    set(CMAKE_C_FLAGS "-mlong-calls" "-mthumb")

    add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/hello_world.llext
	COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_FLAGS} -c
		-I ${PROJECT_SOURCE_DIR}/../../../../include
		-imacros${PROJECT_BINARY_DIR}/../zephyr/include/generated/autoconf.h
		-o ${PROJECT_BINARY_DIR}/hello_world.llext
		${PROJECT_SOURCE_DIR}/hello_world.c
    )
elseif(CONFIG_XTENSA)
    set(CMAKE_C_FLAGS "-shared" "-fPIC" "-nostdlib" "-nodefaultlibs")

    add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/hello_world.llext
	COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_FLAGS}
		-I ${PROJECT_SOURCE_DIR}/../../../../include
		-imacros${PROJECT_BINARY_DIR}/../zephyr/include/generated/autoconf.h
		-o ${PROJECT_BINARY_DIR}/hello_world.pre.llext
		${PROJECT_SOURCE_DIR}/hello_world.c
	COMMAND ${CROSS_COMPILE}strip -R .xt.*
		-o ${PROJECT_BINARY_DIR}/hello_world.llext
		${PROJECT_BINARY_DIR}/hello_world.pre.llext
    )
endif()

set(HELLO_WORLD_LLEXT ${PROJECT_BINARY_DIR}/hello_world.llext PARENT_SCOPE)

add_custom_target(hello_world DEPENDS ${PROJECT_BINARY_DIR}/hello_world.llext)
