60 lines
2.2 KiB
CMake
60 lines
2.2 KiB
CMake
# Copyright (c) 2026 Dominic Masters
|
|
#
|
|
# This software is released under the MIT License.
|
|
# https://opensource.org/licenses/MIT
|
|
#
|
|
# CMake toolchain file for Sega Saturn (Hitachi SH-2, big-endian)
|
|
# using the Yaul homebrew SDK. Set YAUL_INSTALL_ROOT or the
|
|
# YAUL_INSTALL_ROOT environment variable before invoking cmake.
|
|
|
|
set(CMAKE_SYSTEM_NAME Generic)
|
|
set(CMAKE_SYSTEM_PROCESSOR sh2)
|
|
|
|
# Resolve Yaul install root
|
|
if(NOT DEFINED YAUL_INSTALL_ROOT)
|
|
if(DEFINED ENV{YAUL_INSTALL_ROOT})
|
|
set(YAUL_INSTALL_ROOT "$ENV{YAUL_INSTALL_ROOT}"
|
|
CACHE PATH "Yaul SDK root" FORCE)
|
|
else()
|
|
set(YAUL_INSTALL_ROOT "/opt/yaul"
|
|
CACHE PATH "Yaul SDK root" FORCE)
|
|
endif()
|
|
endif()
|
|
|
|
# Yaul SH-2 cross-compiler prefix is sh2eb-elf (big-endian SH-2 ELF).
|
|
# Binaries live in ${YAUL_INSTALL_ROOT}/bin/; headers/libs under
|
|
# ${YAUL_INSTALL_ROOT}/sh2eb-elf/{include,lib}/.
|
|
set(_YAUL_BIN "${YAUL_INSTALL_ROOT}/bin")
|
|
|
|
set(CMAKE_C_COMPILER "${_YAUL_BIN}/sh2eb-elf-gcc")
|
|
set(CMAKE_CXX_COMPILER "${_YAUL_BIN}/sh2eb-elf-g++")
|
|
set(CMAKE_AR "${_YAUL_BIN}/sh2eb-elf-ar")
|
|
set(CMAKE_RANLIB "${_YAUL_BIN}/sh2eb-elf-ranlib")
|
|
set(CMAKE_STRIP "${_YAUL_BIN}/sh2eb-elf-strip")
|
|
set(CMAKE_OBJCOPY "${_YAUL_BIN}/sh2eb-elf-objcopy")
|
|
set(CMAKE_LINKER "${_YAUL_BIN}/sh2eb-elf-ld")
|
|
|
|
set(CMAKE_CROSSCOMPILING TRUE)
|
|
|
|
# Tell CMake not to try to run built executables
|
|
set(CMAKE_CROSSCOMPILING_EMULATOR "" CACHE STRING "" FORCE)
|
|
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
|
|
|
|
# Sysroot — Yaul installs headers/libs under the arch-prefix subdirectory
|
|
set(_YAUL_SYSROOT "${YAUL_INSTALL_ROOT}/sh2eb-elf")
|
|
set(CMAKE_FIND_ROOT_PATH "${_YAUL_SYSROOT}")
|
|
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
|
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
|
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
|
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
|
|
|
|
# SH-2 core flags: big-endian (-mb), SH-2 ISA (-m2), no FPU
|
|
set(_SAT_C_FLAGS "-m2 -mb -fno-builtin -fomit-frame-pointer")
|
|
set(CMAKE_C_FLAGS_INIT "${_SAT_C_FLAGS}")
|
|
|
|
# Yaul provides its own startup code and linker script.
|
|
# The kernel.ld script maps Saturn Work RAM (0x06000000+).
|
|
set(_YAUL_LD "${YAUL_INSTALL_ROOT}/share/yaul/ip/kernel.ld")
|
|
set(CMAKE_EXE_LINKER_FLAGS_INIT
|
|
"-T\"${_YAUL_LD}\" -Wl,--start-group -Wl,--end-group -nostartfiles")
|