From 2f1bb5523bbd7ad7972ed0a9b518762e7ec72d94 Mon Sep 17 00:00:00 2001 From: Luke Benstead Date: Wed, 7 Apr 2021 21:54:21 +0100 Subject: [PATCH] Start fixing up DC building --- CMakeLists.txt | 24 ++++++++++------ GL/platforms/sh4.c | 7 +++++ samples/polymark/main.c | 1 + samples/zclip/main.c | 6 ++-- toolchains/Dreamcast.cmake | 59 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 87 insertions(+), 10 deletions(-) create mode 100644 toolchains/Dreamcast.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 9fb960f..56a0fee 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,8 +5,10 @@ set(CMAKE_C_STANDARD 99) include_directories(include) -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32") +if(NOT PLATFORM_DREAMCAST) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32") +endif() set( SOURCES @@ -31,15 +33,21 @@ set( ) if(PLATFORM_DREAMCAST) -set(SOURCES ${SOURCES} GL/platforms/sh4.c) + set(SOURCES ${SOURCES} GL/platforms/sh4.c) else() -find_package(SDL2 REQUIRED) -include_directories(${SDL2_INCLUDE_DIRS}) -link_libraries(${SDL2_LIBRARIES}) -set(SOURCES ${SOURCES} GL/platforms/software.c GL/platforms/software/edge_equation.c GL/platforms/software/parameter_equation.c) + find_package(SDL2 REQUIRED) + include_directories(${SDL2_INCLUDE_DIRS}) + link_libraries(${SDL2_LIBRARIES}) + set( + SOURCES + ${SOURCES} + GL/platforms/software.c + GL/platforms/software/edge_equation.c + GL/platforms/software/parameter_equation.c + ) endif() -add_library(GLdc ${SOURCES}) +add_library(GLdc STATIC ${SOURCES}) link_libraries(m) include_directories(include) diff --git a/GL/platforms/sh4.c b/GL/platforms/sh4.c index 0dceeb1..23d8c7a 100644 --- a/GL/platforms/sh4.c +++ b/GL/platforms/sh4.c @@ -63,3 +63,10 @@ void SceneListFinish() { void SceneFinish() { pvr_scene_finish(); } + +const VideoMode* GetVideoMode() { + static VideoMode mode; + mode.width = vid_mode->width; + mode.height = vid_mode->height; + return &mode; +} diff --git a/samples/polymark/main.c b/samples/polymark/main.c index 2a671fc..d0d6378 100644 --- a/samples/polymark/main.c +++ b/samples/polymark/main.c @@ -10,6 +10,7 @@ #include #include +#include #include #include diff --git a/samples/zclip/main.c b/samples/zclip/main.c index c4acccf..2da470b 100644 --- a/samples/zclip/main.c +++ b/samples/zclip/main.c @@ -8,9 +8,11 @@ #include "GL/glext.h" #include "GL/glkos.h" -extern uint8_t romdisk[]; +#ifdef __DREAMCAST__ +#include +extern uint8 romdisk[]; KOS_INIT_ROMDISK(romdisk); - +#endif /* Image type - contains height, width, and data */ typedef struct // Create A Structure diff --git a/toolchains/Dreamcast.cmake b/toolchains/Dreamcast.cmake new file mode 100644 index 0000000..e733d6a --- /dev/null +++ b/toolchains/Dreamcast.cmake @@ -0,0 +1,59 @@ +SET(CMAKE_SYSTEM_NAME Generic) + +SET(PLATFORM_DREAMCAST TRUE) + +SET(CMAKE_SYSTEM_VERSION 1) + +set(CMAKE_CROSSCOMPILING TRUE) + +set(CMAKE_C_COMPILER $ENV{KOS_CC_BASE}/bin/sh-elf-gcc) +set(CMAKE_CXX_COMPILER $ENV{KOS_CC_BASE}/bin/sh-elf-g++) + +add_compile_options(-ml -m4-single-only -ffunction-sections -fdata-sections) + +set(CMAKE_EXE_LINKER_FLAGS " -ml -m4-single-only -Wl,-Ttext=0x8c010000 -Wl,--gc-sections -T$ENV{KOS_BASE}/utils/ldscripts/shlelf.xc -nodefaultlibs" CACHE INTERNAL "" FORCE) + +set(CMAKE_FIND_LIBRARY_SUFFIXES ".a") +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + +set(CMAKE_SYSTEM_INCLUDE_PATH "${CMAKE_SYSTEM_INCLUDE_PATH} $ENV{KOS_BASE}/include $ENV{KOS_BASE}/kernel/arch/dreamcast/include $ENV{KOS_BASE}/addons/include $ENV{KOS_BASE}/../kos-ports/include") + +INCLUDE_DIRECTORIES( + $ENV{KOS_BASE}/include + $ENV{KOS_BASE}/kernel/arch/dreamcast/include + $ENV{KOS_BASE}/addons/include + $ENV{KOS_BASE}/../kos-ports/include +) + +LINK_DIRECTORIES( + $ENV{KOS_BASE}/addons/lib/dreamcast + $ENV{KOS_PORTS}/lib +) + +IF(${CMAKE_BUILD_TYPE} MATCHES Debug) +LINK_DIRECTORIES($ENV{KOS_BASE}/lib/dreamcast/debug) +ELSE() +LINK_DIRECTORIES($ENV{KOS_BASE}/lib/dreamcast) +ENDIF() + + +add_link_options(-L$ENV{KOS_BASE}/lib/dreamcast LINKER:--start-group -lstdc++ -lkallisti -lc -lgcc -Wl,--end-group) +link_libraries(stdc++ kallisti c gcc m) + +SET(CMAKE_EXECUTABLE_SUFFIX ".elf") +SET(CMAKE_EXECUTABLE_SUFFIX_CXX ".elf") + +ADD_DEFINITIONS( + -D__DREAMCAST__ + -DDREAMCAST + -D_arch_dreamcast + -D__arch_dreamcast + -D_arch_sub_pristine +) + +if (NOT CMAKE_BUILD_TYPE MATCHES Debug) + ADD_DEFINITIONS(-DNDEBUG) +endif() + +SET(CMAKE_ASM_FLAGS "") +SET(CMAKE_ASM_FLAGS_RELEASE "")