139 lines
2.8 KiB
CMake
139 lines
2.8 KiB
CMake
# Configure with [fxsdk build-fx] or [fxsdk build-cg], which provide the
|
|
# toolchain file and module path of the fxSDK
|
|
|
|
cmake_minimum_required(VERSION 3.18)
|
|
# replace this with your project's name
|
|
project(unshell C ASM)
|
|
|
|
include(GenerateG1A)
|
|
include(GenerateG3A)
|
|
include(Fxconv)
|
|
find_package(Gint 2.6.0 REQUIRED)
|
|
|
|
# include directories, put your .h files in those folders
|
|
include_directories(include)
|
|
include_directories(wren/include)
|
|
include_directories("${FXSDK_COMPILER_INSTALL}/include/openlibm")
|
|
|
|
# source files
|
|
set(SOURCES
|
|
src/main.c
|
|
src/term.c
|
|
src/ui.c
|
|
src/battery.c
|
|
src/syscalls.S
|
|
src/job.c
|
|
src/wren_utils.c
|
|
src/utf8.c
|
|
src/vfs/vfs.c
|
|
)
|
|
set(SOURCES_WREN
|
|
wren/src/wren_compiler.c
|
|
wren/src/wren_core.c
|
|
wren/src/wren_debug.c
|
|
wren/src/wren_primitive.c
|
|
wren/src/wren_utils.c
|
|
wren/src/wren_value.c
|
|
wren/src/wren_vm.c
|
|
wren/src/wren_opt_meta.c
|
|
wren/src/wren_opt_random.c
|
|
)
|
|
set(SOURCES_PRINTF
|
|
src/printf.c
|
|
)
|
|
|
|
# shared assets
|
|
set(ASSETS
|
|
# ...
|
|
)
|
|
# fx-9860G-only assets (monochrome)
|
|
set(ASSETS_fx
|
|
assets-fx/example.png
|
|
# ...
|
|
)
|
|
# fx-CG-50-only assets (polychrome)
|
|
set(ASSETS_cg
|
|
assets-cg/example.png
|
|
assets-cg/uf5x7
|
|
# ...
|
|
)
|
|
|
|
# Compile flags
|
|
set(FLAGS
|
|
# C standard, other values: c89, c99
|
|
-std=c11
|
|
|
|
# general warnings
|
|
-Wall -Wextra -pedantic
|
|
|
|
# enable this flag to stop compilation on warnings
|
|
#-Werror
|
|
|
|
# specific warnings
|
|
# variable shadowing
|
|
-Wshadow
|
|
# switch/case safety
|
|
-Wswitch-default -Wswitch-enum
|
|
# unreachable code, bad 99% of the time
|
|
-Wunreachable-code
|
|
# prototypes warnings
|
|
-Wstrict-prototypes -Wmissing-prototypes
|
|
# function declaration
|
|
-Werror-implicit-function-declaration
|
|
|
|
-fstack-protector
|
|
|
|
# optimisation level
|
|
# -Os: like -O2 without space-expensive optimizations
|
|
# -O2: good speed/size tradeoff
|
|
# -O3: gotta go fast
|
|
-Os
|
|
-m4a-nofpu
|
|
-flto -ffat-lto-objects
|
|
)
|
|
set(FLAGS_WREN
|
|
-std=c11
|
|
-Os
|
|
-m4a-nofpu
|
|
-flto -ffat-lto-objects
|
|
)
|
|
set(FLAGS_PRINTF
|
|
-std=c11
|
|
-Ofast
|
|
-m4a-nofpu
|
|
-flto -ffat-lto-objects
|
|
)
|
|
|
|
set(CMAKE_ASM_FLAGS "-x assembler-with-cpp")
|
|
add_link_options(
|
|
-flto
|
|
-Wl,--print-memory-usage
|
|
)
|
|
|
|
add_library(Printf ${SOURCES_PRINTF})
|
|
target_compile_options(Printf PRIVATE ${FLAGS_PRINTF})
|
|
|
|
add_library(Wren ${SOURCES_WREN})
|
|
target_compile_options(Wren PRIVATE ${FLAGS_WREN})
|
|
target_link_libraries(Wren Printf Gint::Gint)
|
|
|
|
fxconv_declare_assets(${ASSETS} ${ASSETS_fx} ${ASSETS_cg} WITH_METADATA)
|
|
add_executable(Main ${SOURCES} ${ASSETS} ${ASSETS_${FXSDK_PLATFORM}})
|
|
target_compile_options(Main PRIVATE ${FLAGS})
|
|
|
|
target_link_libraries(Main Printf Wren Gint::Gint)
|
|
|
|
if("${FXSDK_PLATFORM_LONG}" STREQUAL fx9860G)
|
|
generate_g1a(
|
|
TARGET Main
|
|
OUTPUT "${PROJECT_NAME}.g1a"
|
|
NAME "${PROJECT_NAME}"
|
|
ICON assets-fx/icon.png)
|
|
elseif("${FXSDK_PLATFORM_LONG}" STREQUAL fxCG50)
|
|
generate_g3a(
|
|
TARGET Main
|
|
OUTPUT "${PROJECT_NAME}.g3a"
|
|
NAME "${PROJECT_NAME}"
|
|
ICONS assets-cg/icon-uns.png assets-cg/icon-sel.png)
|
|
endif()
|