Merge branch 'cmake-install' into 'master'

CMake: Update CMake script, fix samples, add install rule

See merge request simulant/GLdc!174
This commit is contained in:
Luke Benstead 2026-06-27 21:04:15 +00:00
commit 488968ce61
19 changed files with 58 additions and 134 deletions

View File

@ -1,8 +1,15 @@
cmake_minimum_required(VERSION 3.9)
cmake_minimum_required(VERSION 3.17)
project(GLdc)
set(CMAKE_VERBOSE_MAKEFILE ON)
if (NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Type of build" FORCE)
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
Debug Release RelWithDebInfo MinSizeRel
)
endif()
# Options to control optional targets
option(BUILD_SAMPLES "Build example/sample programs" ON)
option(BUILD_TESTS "Build test executables" ON)
@ -17,58 +24,18 @@ endif()
include(CheckIPOSupported)
check_ipo_supported(RESULT FLTO_SUPPORTED OUTPUT FLTO_ERROR)
if(PLATFORM_DREAMCAST)
include(kallistios)
endif()
# List of possible backends
set_property(CACHE BACKEND PROPERTY STRINGS kospvr software)
message("\nCompiling using backend: ${BACKEND}\n")
string(TOUPPER ${BACKEND} BACKEND_UPPER)
add_definitions(-DBACKEND_${BACKEND_UPPER})
set(CMAKE_C_STANDARD 99)
set(CMAKE_CXX_STANDARD 14)
include_directories(include)
if(NOT PLATFORM_DREAMCAST)
set(FIND_LIBRARY_USE_LIB32_PATHS true)
set(FIND_LIBRARY_USE_LIB64_PATHS false)
else()
include(CheckCCompilerFlag)
check_c_compiler_flag("-mfsrra" COMPILER_HAS_FSRRA)
check_c_compiler_flag("-mfsca" COMPILER_HAS_FSCA)
if(COMPILER_HAS_FSRRA)
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -mfsrra")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -mfsrra")
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -mfsrra")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -mfsrra")
endif()
if(COMPILER_HAS_FSCA)
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -mfsca")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -mfsca")
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -mfsca")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -mfsca")
endif()
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -ffp-contract=fast -ffast-math")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -ffast-math")
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -ffp-contract=fast -ffast-math")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -ffast-math")
endif()
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3 -fexpensive-optimizations -fomit-frame-pointer -finline-functions")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -std=c++14 -O3 -g0 -s -fomit-frame-pointer -fstrict-aliasing")
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -O3 -fexpensive-optimizations -fomit-frame-pointer -finline-functions")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -std=c++14 -O3 -fomit-frame-pointer -fstrict-aliasing")
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0 -g -Wall -Wextra")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -g -Wall -Wextra")
set(
SOURCES
add_library(GL STATIC
containers/aligned_vector.c
containers/named_array.c
containers/stack.c
@ -78,7 +45,6 @@ set(
GL/flush.c
GL/fog.c
GL/framebuffer.c
GL/glu.c
GL/immediate.c
GL/lighting.c
GL/matrix.c
@ -90,6 +56,35 @@ set(
${CMAKE_CURRENT_BINARY_DIR}/version.c
)
set_target_properties(GL PROPERTIES
COMPILE_DEFINITIONS -DBACKEND_${BACKEND_UPPER}
C_STANDARD 99
INTERPROCEDURAL_OPTIMIZATION ${FLTO_SUPPORTED}
PUBLIC_HEADER "include/GL/gl.h;include/GL/glext.h;include/GL/glkos.h"
)
target_include_directories(GL PUBLIC ${CMAKE_SOURCE_DIR}/include)
add_library(GLU STATIC GL/glu.c)
set_target_properties(GLU PROPERTIES
PUBLIC_HEADER include/GL/glu.h
)
target_link_libraries(GLU PUBLIC GL)
if(NOT PLATFORM_DREAMCAST)
target_compile_options(GL PUBLIC -m32)
target_link_options(GL PUBLIC -m32)
set(FIND_LIBRARY_USE_LIB32_PATHS true)
set(FIND_LIBRARY_USE_LIB64_PATHS false)
elseif ("${CMAKE_BUILD_TYPE}" STREQUAL Debug)
target_compile_options(GL PRIVATE -Wall -Wextra)
elseif("${CMAKE_BUILD_TYPE}" MATCHES Release|RelWithDebInfo)
target_compile_options(GL PRIVATE -ffast-math)
endif()
execute_process(
COMMAND git describe --abbrev=4 --dirty --always --tags
OUTPUT_VARIABLE GLDC_VERSION
@ -99,48 +94,35 @@ execute_process(
configure_file(GL/version.c.in ${CMAKE_CURRENT_BINARY_DIR}/version.c)
if(PLATFORM_DREAMCAST)
set(SOURCES ${SOURCES} GL/platforms/sh4.c)
target_sources(GL PRIVATE GL/platforms/sh4.c)
else()
find_package(PkgConfig)
pkg_check_modules(SDL2 REQUIRED sdl2)
target_link_libraries(GL PUBLIC ${SDL2_LIBRARIES})
target_include_directories(GL PUBLIC ${SDL2_INCLUDE_DIRS})
include_directories(${SDL2_INCLUDE_DIRS})
link_libraries(${SDL2_LIBRARIES})
set(
SOURCES
${SOURCES}
target_sources(GL PRIVATE
GL/platforms/software.c
GL/platforms/software/edge_equation.c
GL/platforms/software/parameter_equation.c
)
endif()
add_library(GL STATIC ${SOURCES})
include(GNUInstallDirs)
if(FLTO_SUPPORTED)
set_property(TARGET GL PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
endif()
if(NOT PLATFORM_DREAMCAST)
set_target_properties(GL PROPERTIES
COMPILE_OPTIONS "-m32"
LINK_OPTIONS "-m32"
install(TARGETS GL GLU
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/GL
)
endif()
link_libraries(m)
include_directories(include)
link_libraries(GL)
function(gen_sample sample)
set(SAMPLE_SRCS ${ARGN})
set(GENROMFS "$ENV{KOS_BASE}/utils/genromfs/genromfs")
set(BIN2O $ENV{KOS_BASE}/utils/bin2o/bin2o)
set(ROMDISK_IMG "${CMAKE_SOURCE_DIR}/samples/${sample}/romdisk.img")
set(ROMDISK_O "${CMAKE_SOURCE_DIR}/samples/${sample}/romdisk.o")
set(ROMDISK_DIR "${CMAKE_SOURCE_DIR}/samples/${sample}/romdisk")
add_executable(${sample} ${SAMPLE_SRCS})
add_executable(${sample} ${ARGN})
target_link_libraries(${sample} PRIVATE m GL GLU)
set_target_properties(${sample} PROPERTIES
C_STANDARD 99
CXX_STANDARD 14
)
if(FLTO_SUPPORTED)
# FIXME: Cubes + LTO causes an ICE
@ -152,32 +134,10 @@ function(gen_sample sample)
if(PLATFORM_DREAMCAST)
if(EXISTS "${CMAKE_SOURCE_DIR}/samples/${sample}/romdisk")
message("Generating romdisk for sample: ${sample}")
file(GLOB_RECURSE ROMDISK_FILES "${ROMDISK_DIR}/*")
add_custom_command(
OUTPUT ${ROMDISK_IMG}
COMMAND ${GENROMFS} -f ${ROMDISK_IMG} -d ${ROMDISK_DIR} -v
DEPENDS ${ROMDISK_FILES}
)
add_custom_command(
OUTPUT ${ROMDISK_O}
COMMAND ${BIN2O} romdisk.img romdisk romdisk.o
DEPENDS ${ROMDISK_IMG}
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/samples/${sample}"
)
add_custom_target(${sample}_romdisk DEPENDS ${ROMDISK_O})
add_dependencies(${sample} ${sample}_romdisk)
target_link_libraries(${sample} ${ROMDISK_O})
kos_add_romdisk(${sample} ${CMAKE_SOURCE_DIR}/samples/${sample}/romdisk ${sample})
else()
message("No such romdisk for sample: ${sample} at 'samples/${sample}/romdisk'")
endif()
else()
set_target_properties(${sample} PROPERTIES
COMPILE_OPTIONS "-m32"
LINK_OPTIONS "-m32"
)
endif()
endfunction()

View File

@ -10,8 +10,6 @@
//$KOS_BASE/utils/texconv/texconv --in disk.png --format ARGB4444 --preview disk_preview.png --out disk.dtex
#ifdef _arch_dreamcast
extern uint8_t romdisk[];
KOS_INIT_ROMDISK(romdisk);
#define IMAGE_FILENAME "/rd/disk_1555.dtex"
#else
#define IMAGE_FILENAME "../samples/depth_funcs/alpha_testing/romdisk/disk_1555.dtex"

View File

@ -13,8 +13,6 @@
#include "GL/glkos.h"
#ifdef _arch_dreamcast
extern uint8 romdisk[];
KOS_INIT_ROMDISK(romdisk);
#define IMAGE_FILENAME "/rd/flag1.bmp"
#else
#define IMAGE_FILENAME "../samples/lerabot01/romdisk/flag1.bmp"

View File

@ -14,8 +14,6 @@
#ifdef _arch_dreamcast
#include <kos.h>
extern uint8_t romdisk[];
KOS_INIT_ROMDISK(romdisk);
#define IMAGE_FILENAME "/rd/NeHe.bmp"
#else
#define IMAGE_FILENAME "../samples/lights/romdisk/NeHe.bmp"

View File

@ -12,8 +12,6 @@
#include "GL/glkos.h"
#ifdef _arch_dreamcast
extern uint8_t romdisk[];
KOS_INIT_ROMDISK(romdisk);
#define IMAGE_FILENAME "/rd/NeHe.bmp"
#else
#define IMAGE_FILENAME "../samples/mipmap/romdisk/NeHe.bmp"

View File

@ -21,8 +21,6 @@
#include "GL/glext.h"
#ifdef _arch_dreamcast
extern uint8_t romdisk[];
KOS_INIT_ROMDISK(romdisk);
#define IMAGE1_FILENAME "/rd/wp001vq.pvr"
#define IMAGE2_FILENAME "/rd/FlareWS_256.pvr"
#else

View File

@ -13,8 +13,6 @@
#include "GL/glkos.h"
#ifdef _arch_dreamcast
extern uint8_t romdisk[];
KOS_INIT_ROMDISK(romdisk);
#define IMAGE_FILENAME "/rd/NeHe.bmp"
#else
#define IMAGE_FILENAME "../samples/nehe06/romdisk/NeHe.bmp"

View File

@ -12,8 +12,6 @@
#include "GL/glext.h"
#ifdef _arch_dreamcast
extern uint8 romdisk[];
KOS_INIT_ROMDISK(romdisk);
#define IMG_PATH "/rd/NeHe.tex"
#else
#define IMG_PATH "../samples/nehe06_4444twid/romdisk/NeHe.tex"

View File

@ -13,8 +13,6 @@
#include "GL/glext.h"
#ifdef _arch_dreamcast
extern uint8 romdisk[];
KOS_INIT_ROMDISK(romdisk);
// /opt/toolchains/dc/kos/utils/pvrtex/pvrtex -i romdisk/NeHe.bmp -f rgb565 -c -o romdisk/NeHe.dt
#define IMG_PATH "/rd/NeHe.dt"
#else

View File

@ -13,8 +13,6 @@
#include "GL/glkos.h"
#ifdef _arch_dreamcast
extern uint8_t romdisk[];
KOS_INIT_ROMDISK(romdisk);
#define IMAGE_FILENAME "/rd/NeHe.bmp"
#else
#define IMAGE_FILENAME "../samples/nehe06_strided/romdisk/NeHe.bmp"

View File

@ -11,8 +11,6 @@
#include "GL/glext.h"
#ifdef _arch_dreamcast
extern uint8 romdisk[];
KOS_INIT_ROMDISK(romdisk);
#define IMG_PATH "/rd/NeHe.tex"
#else
#define IMG_PATH "../samples/nehe06_vq/romdisk/NeHe.tex"

View File

@ -27,8 +27,6 @@
*/
#ifdef _arch_dreamcast
extern uint8 romdisk[];
KOS_INIT_ROMDISK(romdisk);
#define IMG_PATH "/rd/glass.pvr"
#else
#define IMG_PATH "../samples/nehe08/romdisk/glass.pvr"

View File

@ -26,8 +26,6 @@
#include "../loadbmp.h"
#ifdef _arch_dreamcast
extern uint8 romdisk[];
KOS_INIT_ROMDISK(romdisk);
#define IMG_PATH "/rd/brick.bmp"
#else
#define IMG_PATH "../samples/nehe10/romdisk/brick.bmp"

View File

@ -15,8 +15,6 @@
#ifdef __DREAMCAST__
#include <kos.h>
extern uint8 romdisk[];
KOS_INIT_ROMDISK(romdisk);
#define IMG_PATH "/rd/glass.pvr"
#else
#define IMG_PATH "../samples/nehe08/romdisk/glass.pvr"

View File

@ -22,8 +22,6 @@ uint32_t framestarttime = 0;
int32_t delaytime;
#ifdef _arch_dreamcast
extern uint8_t romdisk[];
KOS_INIT_ROMDISK(romdisk);
#define IMG_LOGO_PATH "/rd/logo.bmp"
#define IMG_MASK1_PATH "/rd/mask1.bmp"
#define IMG_IMAGE1_PATH "/rd/image1.bmp"

View File

@ -22,8 +22,6 @@ uint32_t framestarttime = 0;
int32_t delaytime;
#ifdef _arch_dreamcast
extern uint8_t romdisk[];
KOS_INIT_ROMDISK(romdisk);
#define IMG_LOGO_PATH "/rd/logo.bmp"
#define IMG_MASK1_PATH "/rd/mask1.bmp"
#define IMG_IMAGE1_PATH "/rd/image1.bmp"

View File

@ -13,8 +13,6 @@
#include "GL/glkos.h"
#ifdef _arch_dreamcast
extern uint8_t romdisk[];
KOS_INIT_ROMDISK(romdisk);
#define IMG_PATH "/rd/NeHe.tex"
#else
#define IMG_PATH "../samples/paletted/romdisk/NeHe.tex"

View File

@ -18,8 +18,6 @@
#ifdef _arch_dreamcast
#include <kos.h>
extern uint8 romdisk[];
KOS_INIT_ROMDISK(romdisk);
#ifdef USE_16C_PALETTE
#define IMG_PATH "/rd/NeHe.bmp"

View File

@ -14,8 +14,6 @@
#ifdef _arch_dreamcast
#include <kos.h>
extern uint8 romdisk[];
KOS_INIT_ROMDISK(romdisk);
#define IMG_FACADE00_PATH "/rd/facade00.tga"
#define IMG_FACADE01_PATH "/rd/facade01.tga"
#define IMG_FACADE02_PATH "/rd/facade02.tga"