Create Simulator target scaffold
This commit is contained in:
+34
-95
@@ -1,105 +1,44 @@
|
||||
file(GLOB_RECURSE CORE_SOURCES CONFIGURE_DEPENDS "src/*.c")
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
project(Nova64 VERSION 1.0.0 LANGUAGES C)
|
||||
|
||||
option(BUILD_CORE "Build the Nova64 native core library" ON)
|
||||
option(BUILD_ESP32 "Build the ESP32 firmware project" OFF)
|
||||
option(BUILD_SIMULATOR "Build the C# simulator project" OFF)
|
||||
set(SIMULATOR_PROJECT "simulator/Nova64Simulator.csproj" CACHE PATH "Path to the C# simulator .csproj or .sln relative to repository root")
|
||||
|
||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
||||
|
||||
if(ESP_PLATFORM)
|
||||
# --------------------------------------------------------------------------
|
||||
# 1. ESP-IDF BUILD MODE (Target: ESP32-P4)
|
||||
# --------------------------------------------------------------------------
|
||||
message(STATUS "[Nova64] Building as ESP-IDF Component for ESP32...")
|
||||
if(BUILD_CORE)
|
||||
add_subdirectory(core)
|
||||
endif()
|
||||
|
||||
idf_component_register(
|
||||
SRCS
|
||||
${CORE_SOURCES}
|
||||
INCLUDE_DIRS
|
||||
"include"
|
||||
REQUIRES
|
||||
freertos
|
||||
wamr
|
||||
)
|
||||
|
||||
else()
|
||||
# --------------------------------------------------------------------------
|
||||
# 2. DESKTOP BUILD MODE (Target: Windows .dll / Linux .so / macOS .dylib)
|
||||
# --------------------------------------------------------------------------
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
project(nova64_core VERSION 1.0.0 LANGUAGES C)
|
||||
|
||||
message(STATUS "[Nova64] Building Desktop Shared Library...")
|
||||
|
||||
set(CMAKE_C_STANDARD 11)
|
||||
set(CMAKE_C_STANDARD_REQUIRED ON)
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# FreeRTOS Configuration
|
||||
# --------------------------------------------------------------------------
|
||||
add_library(freertos_config INTERFACE)
|
||||
|
||||
target_include_directories(freertos_config SYSTEM
|
||||
INTERFACE
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include
|
||||
)
|
||||
|
||||
target_compile_definitions(freertos_config
|
||||
INTERFACE
|
||||
projCOVERAGE_TEST=0
|
||||
)
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# FreeRTOS Kernel via FetchContent
|
||||
# --------------------------------------------------------------------------
|
||||
include(FetchContent)
|
||||
|
||||
# Download FreeRTOS-Kernel Repository
|
||||
FetchContent_Declare(
|
||||
FreeRTOS_Kernel
|
||||
GIT_REPOSITORY https://github.com/FreeRTOS/FreeRTOS-Kernel.git
|
||||
GIT_TAG V11.3.0
|
||||
)
|
||||
|
||||
if(WIN32)
|
||||
set(FREERTOS_PORT "MSVC_MINGW" CACHE STRING "")
|
||||
if(BUILD_ESP32)
|
||||
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/esp32/CMakeLists.txt")
|
||||
add_subdirectory(esp32)
|
||||
else()
|
||||
set(FREERTOS_PORT "GCC/POSIX" CACHE STRING "")
|
||||
message(WARNING "BUILD_ESP32=ON but esp32/CMakeLists.txt is missing.")
|
||||
endif()
|
||||
# Select FreeRTOS heap implementation (provides pvPortMalloc/vPortFree)
|
||||
set(FREERTOS_HEAP 4 CACHE STRING "FreeRTOS Heap Implementation")
|
||||
# Disable FreeRTOS Demos/Tests
|
||||
set(BUILD_TESTING OFF CACHE BOOL "" FORCE)
|
||||
endif()
|
||||
|
||||
# define Target 'freertos_kernel'
|
||||
FetchContent_MakeAvailable(FreeRTOS_Kernel)
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# Nova64 Core Target
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
# Shared Library (.dll / .so / .dylib)
|
||||
add_library(nova64_core SHARED ${CORE_SOURCES})
|
||||
|
||||
target_include_directories(nova64_core PUBLIC
|
||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||
)
|
||||
|
||||
# Link FreeRTOS Kernel to the nova64_core library
|
||||
target_link_libraries(nova64_core PRIVATE freertos_kernel freertos_config)
|
||||
|
||||
target_compile_definitions(nova64_core PRIVATE NOVA64_EXPORTS)
|
||||
|
||||
if (WIN32)
|
||||
set_target_properties(nova64_core PROPERTIES
|
||||
C_VISIBILITY_PRESET hidden
|
||||
VISIBILITY_INLINES_HIDDEN YES
|
||||
PREFIX ""
|
||||
)
|
||||
else()
|
||||
set_target_properties(nova64_core PROPERTIES
|
||||
C_VISIBILITY_PRESET hidden
|
||||
VISIBILITY_INLINES_HIDDEN YES
|
||||
)
|
||||
if(BUILD_SIMULATOR)
|
||||
find_program(DOTNET_EXECUTABLE dotnet)
|
||||
if(NOT DOTNET_EXECUTABLE)
|
||||
message(FATAL_ERROR "BUILD_SIMULATOR requires the .NET SDK. Install dotnet or disable BUILD_SIMULATOR.")
|
||||
endif()
|
||||
|
||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
||||
if(NOT SIMULATOR_PROJECT)
|
||||
message(FATAL_ERROR "BUILD_SIMULATOR=ON requires SIMULATOR_PROJECT to point to the simulator .csproj or .sln relative to the repository root.")
|
||||
endif()
|
||||
|
||||
endif()
|
||||
add_custom_target(simulator ALL
|
||||
COMMAND "${DOTNET_EXECUTABLE}" build "${CMAKE_CURRENT_SOURCE_DIR}/${SIMULATOR_PROJECT}" /p:NativeLibDir="${CMAKE_LIBRARY_OUTPUT_DIRECTORY}"
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/simulator"
|
||||
COMMENT "Building C# simulator project"
|
||||
)
|
||||
|
||||
if(BUILD_CORE)
|
||||
add_dependencies(simulator nova64_core)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
Reference in New Issue
Block a user