2021-01-25 15:31:20 +01:00
|
|
|
# Build system for the gint unikernel
|
|
|
|
|
2021-05-10 15:27:06 +02:00
|
|
|
cmake_minimum_required(VERSION 3.15)
|
2024-07-06 10:21:11 +02:00
|
|
|
project(Gint VERSION 2.11.0 LANGUAGES C ASM)
|
2021-01-25 15:31:20 +01:00
|
|
|
|
|
|
|
include(GitVersionNumber)
|
|
|
|
include(Fxconv)
|
|
|
|
|
2022-05-04 21:08:52 +02:00
|
|
|
option(GINT_NO_OS_STACK "Do not use the OS stack as a memory pool (fx-CG only)")
|
2021-01-25 19:06:42 +01:00
|
|
|
option(GINT_STATIC_GRAY "Use static memory instead of malloc for gray buffers (fx-9860G only)")
|
kmalloc: implement a custom segregated list allocator
The new allocator uses a segregated best-fit algorithm with exact-size
lists for all sizes between 8 bytes (the minimum) and 60 bytes, one list
for blocks of size 64-252 and one for larger blocks.
Arenas managed by this allocator have built-in statistics that track
used and free memory (accounting for block headers), peak memory, and
various allocation results.
In addition, the allocator has self-checks in the form of integrity
verifications, that can be enabled with -DGINT_KMALLOC_DEBUG=1 at
configuration time or with the :dev configuration for GiteaPC. This is
used by gintctl.
The kmalloc interface is extended with a new arena covering all unused
memory in user RAM, managed by gint's allocator. It spans about 4 kB on
SH3 fx-9860G, 16 kB on SH4 fx-9860G, and 500 kB on fx-CG 50, in addition
to the OS heap. This new arena is now the default arena for malloc(),
except on SH3 where some heap problems are currently known.
2021-03-15 15:04:24 +01:00
|
|
|
option(GINT_KMALLOC_DEBUG "Enable debug functions for kmalloc")
|
2022-11-29 20:03:03 +01:00
|
|
|
option(GINT_USB_DEBUG "Enable debug functions for the USB driver")
|
2021-01-25 19:06:42 +01:00
|
|
|
|
2021-04-11 18:48:57 +02:00
|
|
|
set(CMAKE_INSTALL_MESSAGE LAZY)
|
|
|
|
|
2021-01-25 19:06:42 +01:00
|
|
|
# Generate <gint/config.h> with commit hash, version name and options
|
2021-05-11 08:27:24 +02:00
|
|
|
if(EXISTS "${CMAKE_SOURCE_DIR}/.git")
|
|
|
|
git_version_number(SHORT_HASH "GINT_GIT_HASH" TAG_RELATIVE "GINT_GIT_VERSION")
|
|
|
|
else()
|
2021-06-08 23:04:41 +02:00
|
|
|
set(GINT_GIT_HASH "0000000")
|
2021-05-11 08:27:24 +02:00
|
|
|
set(GINT_GIT_VERSION "${PROJECT_VERSION}")
|
|
|
|
endif()
|
2021-01-25 15:31:20 +01:00
|
|
|
configure_file(include/gint/config.h.in include/gint/config.h)
|
|
|
|
|
2024-03-23 10:02:51 +01:00
|
|
|
set(SOURCES
|
2021-12-10 07:25:00 +01:00
|
|
|
# Clock Pulse Generator driver
|
2021-01-25 15:31:20 +01:00
|
|
|
src/cpg/cpg.c
|
2022-05-15 20:16:03 +02:00
|
|
|
src/cpg/overclock.c
|
2021-12-10 07:25:00 +01:00
|
|
|
# CPU driver
|
2021-04-23 18:50:20 +02:00
|
|
|
src/cpu/atomic.c
|
|
|
|
src/cpu/cpu.c
|
2021-06-16 21:50:41 +02:00
|
|
|
src/cpu/ics.s
|
2021-04-23 18:50:20 +02:00
|
|
|
src/cpu/registers.s
|
2021-05-05 15:17:23 +02:00
|
|
|
src/cpu/sleep.c
|
2021-12-10 07:25:00 +01:00
|
|
|
# Direct Memory Access driver
|
2021-04-23 18:50:20 +02:00
|
|
|
src/dma/dma.c
|
|
|
|
src/dma/inth.s
|
|
|
|
src/dma/memcpy.c
|
|
|
|
src/dma/memset.c
|
2021-12-13 18:38:47 +01:00
|
|
|
# Filesystem interface
|
2021-12-10 07:25:00 +01:00
|
|
|
src/fs/close.c
|
2021-12-21 19:01:00 +01:00
|
|
|
src/fs/closedir.c
|
2021-12-10 07:25:00 +01:00
|
|
|
src/fs/creat.c
|
2021-12-21 19:01:00 +01:00
|
|
|
src/fs/fdopendir.c
|
2021-12-13 18:38:47 +01:00
|
|
|
src/fs/fs.c
|
2021-12-10 07:25:00 +01:00
|
|
|
src/fs/lseek.c
|
2021-12-21 19:01:00 +01:00
|
|
|
src/fs/mkdir.c
|
2021-12-10 07:25:00 +01:00
|
|
|
src/fs/open.c
|
2021-12-21 19:01:00 +01:00
|
|
|
src/fs/opendir.c
|
2021-12-10 07:25:00 +01:00
|
|
|
src/fs/pread.c
|
|
|
|
src/fs/pwrite.c
|
|
|
|
src/fs/read.c
|
2021-12-21 19:01:00 +01:00
|
|
|
src/fs/readdir.c
|
2022-08-22 15:25:14 +02:00
|
|
|
src/fs/rename.c
|
2021-12-21 19:01:00 +01:00
|
|
|
src/fs/rewinddir.c
|
|
|
|
src/fs/rmdir.c
|
|
|
|
src/fs/seekdir.c
|
2021-12-30 18:17:13 +01:00
|
|
|
src/fs/stat.c
|
2021-12-21 19:01:00 +01:00
|
|
|
src/fs/telldir.c
|
2021-12-10 07:25:00 +01:00
|
|
|
src/fs/unlink.c
|
|
|
|
src/fs/write.c
|
2021-12-13 18:38:47 +01:00
|
|
|
# Filesystem interface to Fugue
|
2021-12-21 19:01:00 +01:00
|
|
|
src/fs/fugue/BFile_Ext_Stat.c
|
2021-12-13 18:38:47 +01:00
|
|
|
src/fs/fugue/fugue.c
|
2021-12-21 19:01:00 +01:00
|
|
|
src/fs/fugue/fugue_dir.c
|
|
|
|
src/fs/fugue/fugue_open.c
|
|
|
|
src/fs/fugue/fugue_mkdir.c
|
2021-12-30 18:17:13 +01:00
|
|
|
src/fs/fugue/fugue_stat.c
|
2022-08-22 15:25:14 +02:00
|
|
|
src/fs/fugue/fugue_rename.c
|
2021-12-30 18:17:13 +01:00
|
|
|
src/fs/fugue/fugue_rmdir.c
|
2021-12-21 19:01:00 +01:00
|
|
|
src/fs/fugue/fugue_unlink.c
|
2021-12-13 18:38:47 +01:00
|
|
|
src/fs/fugue/util.c
|
2023-05-21 19:49:23 +02:00
|
|
|
# GDB remote serial protocol
|
|
|
|
src/gdb/gdb.c
|
2024-04-13 09:20:01 +02:00
|
|
|
src/gdb/gdb.S
|
2024-03-23 10:02:51 +01:00
|
|
|
# Gray engine
|
|
|
|
src/gray/engine.c
|
|
|
|
src/gray/gclear.c
|
|
|
|
src/gray/ggetpixel.c
|
|
|
|
src/gray/gint_gline.c
|
|
|
|
src/gray/gpixel.c
|
|
|
|
src/gray/grect.c
|
|
|
|
src/gray/gsubimage.c
|
|
|
|
src/gray/gtext.c
|
|
|
|
# Image library
|
|
|
|
src/image/image_alloc.c
|
|
|
|
src/image/image_alloc_palette.c
|
|
|
|
src/image/image_alpha.c
|
|
|
|
src/image/image_clear.c
|
|
|
|
src/image/image_copy.c
|
|
|
|
src/image/image_copy_alloc.c
|
|
|
|
src/image/image_copy_palette.c
|
|
|
|
src/image/image_create.c
|
|
|
|
src/image/image_create_vram.c
|
|
|
|
src/image/image_data_size.c
|
|
|
|
src/image/image_decode_pixel.c
|
|
|
|
src/image/image_fill.c
|
|
|
|
src/image/image_free.c
|
|
|
|
src/image/image_get_pixel.c
|
|
|
|
src/image/image_hflip.c
|
|
|
|
src/image/image_hflip_alloc.c
|
|
|
|
src/image/image_linear.c
|
|
|
|
src/image/image_linear.S
|
|
|
|
src/image/image_linear_alloc.c
|
|
|
|
src/image/image_rotate.c
|
|
|
|
src/image/image_rotate_around.c
|
|
|
|
src/image/image_rotate_around_scale.c
|
|
|
|
src/image/image_scale.c
|
|
|
|
src/image/image_set_palette.c
|
|
|
|
src/image/image_set_pixel.c
|
|
|
|
src/image/image_sub.c
|
|
|
|
src/image/image_target.c
|
|
|
|
src/image/image_valid.c
|
|
|
|
src/image/image_vflip.c
|
|
|
|
src/image/image_vflip_alloc.c
|
2021-12-10 07:25:00 +01:00
|
|
|
# Interrupt Controller driver
|
2021-01-25 15:31:20 +01:00
|
|
|
src/intc/intc.c
|
2021-04-27 14:29:38 +02:00
|
|
|
src/intc/inth.s
|
2021-12-10 07:25:00 +01:00
|
|
|
# Kernel
|
2021-01-25 15:31:20 +01:00
|
|
|
src/kernel/exch.c
|
|
|
|
src/kernel/exch.s
|
|
|
|
src/kernel/hardware.c
|
|
|
|
src/kernel/inth.S
|
|
|
|
src/kernel/kernel.c
|
|
|
|
src/kernel/osmenu.c
|
|
|
|
src/kernel/start.c
|
2024-04-16 15:53:10 +02:00
|
|
|
src/kernel/start.S
|
2024-07-13 10:10:38 +02:00
|
|
|
src/kernel/syscall.c
|
2021-01-25 15:31:20 +01:00
|
|
|
src/kernel/syscalls.S
|
|
|
|
src/kernel/tlbh.S
|
2021-04-23 18:50:20 +02:00
|
|
|
src/kernel/world.c
|
2021-12-10 07:25:00 +01:00
|
|
|
# Key Scan Interface driver
|
2021-01-25 15:31:20 +01:00
|
|
|
src/keysc/getkey.c
|
|
|
|
src/keysc/iokbd.c
|
|
|
|
src/keysc/keycodes.c
|
2021-03-05 09:31:34 +01:00
|
|
|
src/keysc/keydev.c
|
2022-04-23 14:34:41 +02:00
|
|
|
src/keysc/keydev_idle.c
|
|
|
|
src/keysc/keydev_process_key.c
|
|
|
|
src/keysc/keydown_all.c
|
|
|
|
src/keysc/keydown_any.c
|
2021-01-25 15:31:20 +01:00
|
|
|
src/keysc/keysc.c
|
2022-04-23 14:34:41 +02:00
|
|
|
src/keysc/scan_frequency.c
|
2021-12-10 07:25:00 +01:00
|
|
|
# Memory allocator
|
kmalloc: implement a custom segregated list allocator
The new allocator uses a segregated best-fit algorithm with exact-size
lists for all sizes between 8 bytes (the minimum) and 60 bytes, one list
for blocks of size 64-252 and one for larger blocks.
Arenas managed by this allocator have built-in statistics that track
used and free memory (accounting for block headers), peak memory, and
various allocation results.
In addition, the allocator has self-checks in the form of integrity
verifications, that can be enabled with -DGINT_KMALLOC_DEBUG=1 at
configuration time or with the :dev configuration for GiteaPC. This is
used by gintctl.
The kmalloc interface is extended with a new arena covering all unused
memory in user RAM, managed by gint's allocator. It spans about 4 kB on
SH3 fx-9860G, 16 kB on SH4 fx-9860G, and 500 kB on fx-CG 50, in addition
to the OS heap. This new arena is now the default arena for malloc(),
except on SH3 where some heap problems are currently known.
2021-03-15 15:04:24 +01:00
|
|
|
src/kmalloc/arena_gint.c
|
2021-03-12 17:22:24 +01:00
|
|
|
src/kmalloc/arena_osheap.c
|
|
|
|
src/kmalloc/kmalloc.c
|
2021-12-10 07:25:00 +01:00
|
|
|
# MMU driver
|
2021-01-25 15:31:20 +01:00
|
|
|
src/mmu/mmu.c
|
2024-04-16 15:53:10 +02:00
|
|
|
# R61523 display driver
|
|
|
|
src/r61523/r61523.c
|
2024-03-23 10:02:51 +01:00
|
|
|
# R61524 display driver
|
|
|
|
src/r61524/r61524.c
|
|
|
|
# Format-agnostic rendering
|
2024-01-04 11:52:51 +01:00
|
|
|
src/render/dcircle.c
|
|
|
|
src/render/dellipse.c
|
2021-01-25 15:31:20 +01:00
|
|
|
src/render/dhline.c
|
|
|
|
src/render/dimage.c
|
|
|
|
src/render/dline.c
|
2024-03-01 23:26:39 +01:00
|
|
|
src/render/dpoly.c
|
2021-01-25 15:31:20 +01:00
|
|
|
src/render/dprint.c
|
|
|
|
src/render/drect_border.c
|
|
|
|
src/render/dtext.c
|
2021-08-11 01:12:00 +02:00
|
|
|
src/render/dupdate_hook.c
|
2021-01-25 15:31:20 +01:00
|
|
|
src/render/dvline.c
|
2022-11-16 18:00:12 +01:00
|
|
|
src/render/dwindow.c
|
2021-01-25 15:31:20 +01:00
|
|
|
src/render/topti.c
|
2024-03-23 10:02:51 +01:00
|
|
|
# RGB Rendering
|
2021-01-25 15:31:20 +01:00
|
|
|
src/render-cg/dclear.c
|
2022-11-16 19:12:27 +01:00
|
|
|
src/render-cg/dgetpixel.c
|
2021-01-25 15:31:20 +01:00
|
|
|
src/render-cg/dpixel.c
|
|
|
|
src/render-cg/drect.c
|
|
|
|
src/render-cg/dsubimage.c
|
|
|
|
src/render-cg/dupdate.c
|
|
|
|
src/render-cg/dvram.c
|
2024-06-01 14:41:09 +02:00
|
|
|
src/render-cg/dvram.S
|
2021-01-25 15:31:20 +01:00
|
|
|
src/render-cg/gint_dline.c
|
2024-03-23 10:02:51 +01:00
|
|
|
src/render-cg/topti-asm.S
|
2021-01-25 15:31:20 +01:00
|
|
|
src/render-cg/topti.c
|
2024-03-23 10:02:51 +01:00
|
|
|
# Fast RGB image renderer
|
2022-05-04 18:27:02 +02:00
|
|
|
src/render-cg/image/image.c
|
|
|
|
src/render-cg/image/image_rgb16.S
|
|
|
|
src/render-cg/image/image_rgb16_normal.S
|
|
|
|
src/render-cg/image/image_rgb16_clearbg_dye.S
|
|
|
|
src/render-cg/image/image_rgb16_swapcolor.S
|
|
|
|
src/render-cg/image/image_p8.S
|
|
|
|
src/render-cg/image/image_p8_normal.S
|
|
|
|
src/render-cg/image/image_p8_clearbg.S
|
|
|
|
src/render-cg/image/image_p8_swapcolor.S
|
|
|
|
src/render-cg/image/image_p8_dye.S
|
|
|
|
src/render-cg/image/image_p4.S
|
|
|
|
src/render-cg/image/image_p4_normal.S
|
|
|
|
src/render-cg/image/image_p4_clearbg.S
|
2022-05-06 17:26:44 +02:00
|
|
|
src/render-cg/image/image_p4_clearbg_alt.S
|
2022-05-04 18:27:02 +02:00
|
|
|
src/render-cg/image/image_p4_swapcolor.S
|
|
|
|
src/render-cg/image/image_p4_dye.S
|
2024-03-23 10:02:51 +01:00
|
|
|
# Interface to the fast RGB image renderer
|
2022-05-04 18:27:02 +02:00
|
|
|
src/render-cg/image/image_rgb16.c
|
|
|
|
src/render-cg/image/image_rgb16_effect.c
|
|
|
|
src/render-cg/image/image_rgb16_swapcolor.c
|
|
|
|
src/render-cg/image/image_rgb16_dye.c
|
|
|
|
src/render-cg/image/image_p8.c
|
|
|
|
src/render-cg/image/image_p8_effect.c
|
|
|
|
src/render-cg/image/image_p8_swapcolor.c
|
|
|
|
src/render-cg/image/image_p8_dye.c
|
|
|
|
src/render-cg/image/image_p4.c
|
2022-05-06 17:26:44 +02:00
|
|
|
src/render-cg/image/image_p4_clearbg_alt.c
|
2022-05-04 18:27:02 +02:00
|
|
|
src/render-cg/image/image_p4_effect.c
|
|
|
|
src/render-cg/image/image_p4_swapcolor.c
|
|
|
|
src/render-cg/image/image_p4_dye.c
|
2024-03-23 10:02:51 +01:00
|
|
|
# Mono rendering
|
|
|
|
src/render-fx/bopti-asm-gray-scsp.S
|
|
|
|
src/render-fx/bopti-asm-gray.S
|
|
|
|
src/render-fx/bopti-asm-mono-scsp.S
|
|
|
|
src/render-fx/bopti-asm.S
|
|
|
|
src/render-fx/bopti.c
|
|
|
|
src/render-fx/dclear.c
|
|
|
|
src/render-fx/dgetpixel.c
|
|
|
|
src/render-fx/dpixel.c
|
|
|
|
src/render-fx/drect.c
|
|
|
|
src/render-fx/dsubimage.c
|
|
|
|
src/render-fx/dupdate.c
|
|
|
|
src/render-fx/gint_dline.c
|
|
|
|
src/render-fx/masks.c
|
|
|
|
src/render-fx/topti-asm.S
|
|
|
|
src/render-fx/topti.c
|
|
|
|
# RTC driver
|
|
|
|
src/rtc/rtc.c
|
|
|
|
src/rtc/rtc_ticks.c
|
|
|
|
# Sound Processing Unit driver
|
|
|
|
src/spu/spu.c
|
|
|
|
# T6K11 display driver
|
|
|
|
src/t6k11/t6k11.c
|
|
|
|
# Timer Unit driver
|
|
|
|
src/tmu/inth-etmu.s
|
|
|
|
src/tmu/inth-tmu.s
|
|
|
|
src/tmu/sleep.c
|
|
|
|
src/tmu/tmu.c
|
2024-03-25 08:05:48 +01:00
|
|
|
# UBC driver
|
|
|
|
src/ubc/ubc.c
|
|
|
|
src/ubc/ubc.S
|
2024-03-23 10:02:51 +01:00
|
|
|
# USB driver
|
|
|
|
src/usb/asyncio.c
|
|
|
|
src/usb/classes/ff-bulk.c
|
|
|
|
src/usb/classes/ff-bulk-gray.c
|
|
|
|
src/usb/configure.c
|
|
|
|
src/usb/pipes.c
|
|
|
|
src/usb/read4.S
|
|
|
|
src/usb/setup.c
|
|
|
|
src/usb/string.c
|
|
|
|
src/usb/usb.c
|
|
|
|
src/usb/write4.S
|
2024-04-09 08:57:46 +02:00
|
|
|
# Video driver interface
|
|
|
|
src/video/video.c
|
2021-01-25 15:31:20 +01:00
|
|
|
)
|
|
|
|
|
2024-04-09 08:57:46 +02:00
|
|
|
set(ASSETS_FX src/font5x7.png src/gdb/icons-i1msb.png)
|
|
|
|
set(ASSETS_CG src/font8x9.png src/gdb/icons-rgb565.png)
|
2024-04-16 15:53:10 +02:00
|
|
|
set(ASSETS_CP ${ASSETS_CG})
|
2021-01-27 20:48:59 +01:00
|
|
|
fxconv_declare_assets(${ASSETS_FX} ${ASSETS_CG})
|
2021-01-25 15:31:20 +01:00
|
|
|
|
2021-02-02 22:18:15 +01:00
|
|
|
include_directories(
|
|
|
|
"${PROJECT_SOURCE_DIR}/include"
|
2022-08-19 16:35:47 +02:00
|
|
|
"${PROJECT_BINARY_DIR}/include")
|
meta: build with -ffreestanding
As of now (fxSDK 2.11), this flag is set globally by the fxSDK, so this
change doesn't have an immediate effect. However, I've been
experimenting with removing -ffreestanding at the global level to allow
applications to build with the hosted C++ library (which isn't fully
supported by has many supported features, like containers, that aren't
available in free-standing mode).
Without -ffreestanding, LTO makes weird decisions and ends up pruning
way too many symbols from libraries, leading to undefined references for
symbols provided by the standard library. Here is a minimal example.
---
% cat abort.c
void abort(void)
{
__builtin_unreachable();
}
% cat main.c
extern void abort(void);
int start(void)
{
abort();
return 0;
}
% cat sh-min.x
ENTRY(_start)
OUTPUT_FORMAT(elf32-sh)
SECTIONS {
. = 0x1000;
.text : { *(.text) }
.data : { *(.data) }
.bss : { *(.bss) }
}
% sh-elf-gcc -flto -nostdlib -ffreestanding -c abort.c -o abort.o
% sh-elf-gcc-ar rcs abort.a abort.o
% sh-elf-gcc -flto -nostdlib -c main.c -o main.o
% sh-elf-gcc -flto -nostdlib -save-temps main.o -o main -T ./sh-min.x abort.a -lgcc
ld: ./main.ltrans0.ltrans.o: in function `_start':
<artificial>:(.text+0xc): undefined reference to `_abort'
---
To solve the bug in this example, add -ffreestanding when making main.o.
I haven't been able to sufficiently dump/introspect intermediate files
to understand what's happening yet. It's also unclear whether the fix is
clean since LTO normally requires all files to be built with the same
settings, so adding -ffreestanding to gint but not the add-in seems
suspicious. There is, however, an inherent incompatibility in the
conjunction of (1) building kernels with -ffreestanding, (2) building
add-ins that use the C++ library thus require -fhosted, and (3) only
linking objects files built with the same options.
2024-08-06 11:52:41 +02:00
|
|
|
add_compile_options(-Wall -Wextra -std=c11 -Os -g -fstrict-volatile-bitfields -mtas -ffreestanding -flto)
|
2021-01-25 15:31:20 +01:00
|
|
|
|
|
|
|
if("${FXSDK_PLATFORM_LONG}" STREQUAL fx9860G)
|
|
|
|
add_compile_definitions(FX9860G)
|
|
|
|
set(NAME "gint-fx")
|
2023-01-15 01:36:28 +01:00
|
|
|
set(LINKER_SCRIPTS
|
|
|
|
"${CMAKE_CURRENT_BINARY_DIR}/fx9860g.ld")
|
2024-03-23 10:02:51 +01:00
|
|
|
add_library(${NAME} STATIC ${SOURCES} ${ASSETS_FX} ${LINKER_SCRIPTS})
|
2021-01-25 15:31:20 +01:00
|
|
|
endif()
|
|
|
|
|
|
|
|
if("${FXSDK_PLATFORM_LONG}" STREQUAL fxCG50)
|
|
|
|
add_compile_definitions(FXCG50)
|
|
|
|
set(NAME "gint-cg")
|
2023-01-15 01:36:28 +01:00
|
|
|
set(LINKER_SCRIPTS
|
|
|
|
"${CMAKE_CURRENT_BINARY_DIR}/fxcg50.ld"
|
|
|
|
"${CMAKE_CURRENT_BINARY_DIR}/fxcg50_fastload.ld")
|
2024-03-23 10:02:51 +01:00
|
|
|
add_library(${NAME} STATIC ${SOURCES} ${ASSETS_CG} ${LINKER_SCRIPTS})
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if("${FXSDK_PLATFORM_LONG}" STREQUAL fx9860G_G3A)
|
|
|
|
add_compile_definitions(FX9860G_G3A)
|
|
|
|
set(NAME "gint-fxg3a")
|
|
|
|
set(LINKER_SCRIPTS
|
|
|
|
"${CMAKE_CURRENT_BINARY_DIR}/fxcg50.ld"
|
|
|
|
"${CMAKE_CURRENT_BINARY_DIR}/fxcg50_fastload.ld")
|
|
|
|
add_library(${NAME} STATIC ${SOURCES} ${ASSETS_FX} ${LINKER_SCRIPTS})
|
2021-01-25 15:31:20 +01:00
|
|
|
endif()
|
|
|
|
|
2024-04-16 15:53:10 +02:00
|
|
|
if("${FXSDK_PLATFORM_LONG}" STREQUAL fxCP)
|
|
|
|
add_compile_definitions(FXCP)
|
|
|
|
set(NAME "gint-cp")
|
|
|
|
set(LINKER_SCRIPTS
|
|
|
|
"${CMAKE_CURRENT_BINARY_DIR}/fxcp_hh2.ld")
|
|
|
|
add_library(${NAME} STATIC ${SOURCES} ${ASSETS_CP} ${LINKER_SCRIPTS})
|
|
|
|
endif()
|
|
|
|
|
2021-01-25 15:31:20 +01:00
|
|
|
set_target_properties("${NAME}" PROPERTIES OUTPUT_NAME "${NAME}")
|
|
|
|
|
2024-05-26 18:16:31 +02:00
|
|
|
# Generate the archive with gcc-ar instead of ar as it will load the LTO plugin
|
|
|
|
# which is required to generate a usable archive.
|
|
|
|
set(CMAKE_C_ARCHIVE_CREATE "${CMAKE_C_COMPILER_AR} qcs <TARGET> <OBJECTS>")
|
|
|
|
# Also the ranlib rule (useless because ar is passed the s flag anyway)
|
|
|
|
set(CMAKE_C_ARCHIVE_FINISH "${CMAKE_C_COMPILER_RANLIB} <TARGET>")
|
|
|
|
|
2023-01-15 01:36:28 +01:00
|
|
|
# Generate linker scripts
|
|
|
|
macro(generate_linker_script OUTPUT INPUT OPTIONS)
|
|
|
|
add_custom_command(
|
|
|
|
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT}"
|
|
|
|
COMMAND ${FXSDK_TOOLCHAIN}cpp "${CMAKE_CURRENT_SOURCE_DIR}/${INPUT}"
|
|
|
|
-P -C -traditional-cpp ${OPTIONS} -o "${OUTPUT}"
|
|
|
|
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${INPUT}")
|
|
|
|
endmacro()
|
|
|
|
generate_linker_script("fx9860g.ld" "fx9860g.ld.c" "")
|
|
|
|
generate_linker_script("fxcg50.ld" "fxcg50.ld.c" "")
|
|
|
|
generate_linker_script("fxcg50_fastload.ld" "fxcg50.ld.c" "-DFXCG50_FASTLOAD")
|
2024-04-16 15:53:10 +02:00
|
|
|
generate_linker_script("fxcp_hh2.ld" "fxcp_hh2.ld.c" "")
|
2023-01-15 01:36:28 +01:00
|
|
|
|
2021-01-27 08:57:23 +01:00
|
|
|
# Library file
|
2022-08-19 16:35:47 +02:00
|
|
|
install(TARGETS "${NAME}" DESTINATION "${FXSDK_LIB}")
|
2023-01-15 01:36:28 +01:00
|
|
|
# Linker scripts
|
|
|
|
install(FILES ${LINKER_SCRIPTS} DESTINATION "${FXSDK_LIB}")
|
2021-01-27 08:57:23 +01:00
|
|
|
# Headers
|
2022-08-19 16:35:47 +02:00
|
|
|
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include/"
|
|
|
|
DESTINATION "${FXSDK_INCLUDE}"
|
2021-01-25 15:31:20 +01:00
|
|
|
FILES_MATCHING PATTERN "*.h")
|
2021-01-27 08:57:23 +01:00
|
|
|
# Auto-generated config header
|
2021-01-25 15:31:20 +01:00
|
|
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/include/gint/config.h"
|
2022-08-19 16:35:47 +02:00
|
|
|
DESTINATION "${FXSDK_INCLUDE}/gint")
|
2021-01-27 08:57:23 +01:00
|
|
|
# CMake module to find gint
|
|
|
|
install(FILES cmake/FindGint.cmake DESTINATION "${FXSDK_CMAKE_MODULE_PATH}")
|