mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 00:57:44 -04:00
4f537d4a71
This sets up the C Kernel for Jak 3, and makes it possible to build and load code built with `goalc --jak3`. There's not too much interesting here, other than they switched to a system where symbol IDs (unique numbers less than 2^14) are generated at compile time, and those get included in the object file itself. This is kind of annoying, since it means all tools that produce a GOAL object file need to work together to assign unique symbol IDs. And since the symbol IDs can't conflict, and are only a number between 0 and 2^14, you can't just hash and hope for no collisions. We work around this by ignoring the IDs and re-assigning our own. I think this is very similar to what the C Kernel did on early builds of Jak 3 which supported loading old format level files, which didn't have the IDs included. As far as I can tell, this shouldn't cause any problems. It defeats all of their fancy tricks to save memory by not storing the symbol string, but we don't care.
270 lines
10 KiB
CMake
270 lines
10 KiB
CMake
# We define our own compilation flags here.
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
|
|
# Set a more convenient ARM flag
|
|
if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm64")
|
|
set(ARM64_ARCH TRUE)
|
|
message(STATUS "ARM64 architecture detected")
|
|
else()
|
|
set(ARM64_ARCH FALSE)
|
|
message(STATUS "Non-ARM64 architecture detected")
|
|
endif()
|
|
|
|
if(ARM64_ARCH)
|
|
# Add your ARM64-specific configuration or build options here
|
|
set(OG_ASM_FUNCS_FILE kernel/asm_funcs_arm64.s)
|
|
enable_language(ASM)
|
|
set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS ${CMAKE_ASM_SOURCE_FILE_EXTENSIONS} s)
|
|
# set(CMAKE_ASM_COMPILE_OBJECT "${CMAKE_ASM_COMPILER} -o <OBJECT> <SOURCE>")
|
|
set_source_files_properties(${OG_ASM_FUNCS_FILE} PROPERTIES COMPILE_FLAGS "-g")
|
|
else()
|
|
set(OG_ASM_FUNCS_FILE kernel/asm_funcs_x86_64.asm)
|
|
enable_language(ASM_NASM)
|
|
set(CMAKE_ASM_NASM_SOURCE_FILE_EXTENSIONS ${CMAKE_ASM_NASM_SOURCE_FILE_EXTENSIONS} asm)
|
|
set(CMAKE_ASM_NASM_COMPILE_OBJECT "<CMAKE_ASM_NASM_COMPILER> <INCLUDES> -f ${CMAKE_ASM_NASM_OBJECT_FORMAT} -o <OBJECT> <SOURCE>")
|
|
set_source_files_properties(${OG_ASM_FUNCS_FILE} PROPERTIES COMPILE_FLAGS "-g")
|
|
endif()
|
|
|
|
set(RUNTIME_SOURCE
|
|
external/discord_jak1.cpp
|
|
external/discord_jak2.cpp
|
|
external/discord.cpp
|
|
graphics/display.cpp
|
|
graphics/gfx_test.cpp
|
|
graphics/gfx.cpp
|
|
graphics/jak2_texture_remap.cpp
|
|
graphics/opengl_renderer/background/background_common.cpp
|
|
graphics/opengl_renderer/background/Shrub.cpp
|
|
graphics/opengl_renderer/background/TFragment.cpp
|
|
graphics/opengl_renderer/background/Tie3.cpp
|
|
graphics/opengl_renderer/BlitDisplays.cpp
|
|
graphics/opengl_renderer/BucketRenderer.cpp
|
|
graphics/opengl_renderer/CollideMeshRenderer.cpp
|
|
graphics/opengl_renderer/debug_gui.cpp
|
|
graphics/opengl_renderer/DepthCue.cpp
|
|
graphics/opengl_renderer/DirectRenderer.cpp
|
|
graphics/opengl_renderer/DirectRenderer2.cpp
|
|
graphics/opengl_renderer/dma_helpers.cpp
|
|
graphics/opengl_renderer/EyeRenderer.cpp
|
|
graphics/opengl_renderer/foreground/Generic2_Build.cpp
|
|
graphics/opengl_renderer/foreground/Generic2_DMA.cpp
|
|
graphics/opengl_renderer/foreground/Generic2_OpenGL.cpp
|
|
graphics/opengl_renderer/foreground/Generic2.cpp
|
|
graphics/opengl_renderer/foreground/Generic2BucketRenderer.cpp
|
|
graphics/opengl_renderer/foreground/Merc2.cpp
|
|
graphics/opengl_renderer/foreground/Merc2BucketRenderer.cpp
|
|
graphics/opengl_renderer/foreground/Shadow2.cpp
|
|
graphics/opengl_renderer/loader/Loader.cpp
|
|
graphics/opengl_renderer/loader/LoaderStages.cpp
|
|
graphics/opengl_renderer/ocean/CommonOceanRenderer.cpp
|
|
graphics/opengl_renderer/ocean/OceanMid_PS2.cpp
|
|
graphics/opengl_renderer/ocean/OceanMid.cpp
|
|
graphics/opengl_renderer/ocean/OceanMidAndFar.cpp
|
|
graphics/opengl_renderer/ocean/OceanNear_PS2.cpp
|
|
graphics/opengl_renderer/ocean/OceanNear.cpp
|
|
graphics/opengl_renderer/ocean/OceanTexture_PC.cpp
|
|
graphics/opengl_renderer/ocean/OceanTexture.cpp
|
|
graphics/opengl_renderer/opengl_utils.cpp
|
|
graphics/opengl_renderer/OpenGLRenderer.cpp
|
|
graphics/opengl_renderer/Profiler.cpp
|
|
graphics/opengl_renderer/ProgressRenderer.cpp
|
|
graphics/opengl_renderer/Shader.cpp
|
|
graphics/opengl_renderer/Shadow_PS2.cpp
|
|
graphics/opengl_renderer/ShadowRenderer.cpp
|
|
graphics/opengl_renderer/SkyBlendCPU.cpp
|
|
graphics/opengl_renderer/SkyBlendGPU.cpp
|
|
graphics/opengl_renderer/SkyRenderer.cpp
|
|
graphics/opengl_renderer/sprite/GlowRenderer.cpp
|
|
graphics/opengl_renderer/sprite/Sprite3_Distort.cpp
|
|
graphics/opengl_renderer/sprite/Sprite3_Glow.cpp
|
|
graphics/opengl_renderer/sprite/Sprite3.cpp
|
|
graphics/opengl_renderer/TextureAnimator.cpp
|
|
graphics/opengl_renderer/TextureUploadHandler.cpp
|
|
graphics/opengl_renderer/VisDataHandler.cpp
|
|
graphics/opengl_renderer/Warp.cpp
|
|
graphics/pipelines/opengl.cpp
|
|
graphics/sceGraphicsInterface.cpp
|
|
graphics/texture/jak1_tpage_dir.cpp
|
|
graphics/texture/jak2_tpage_dir.cpp
|
|
graphics/texture/TextureConverter.cpp
|
|
graphics/texture/TexturePool.cpp
|
|
${OG_ASM_FUNCS_FILE}
|
|
kernel/common/fileio.cpp
|
|
kernel/common/kboot.cpp
|
|
kernel/common/kdgo.cpp
|
|
kernel/common/kdsnetm.cpp
|
|
kernel/common/klink.cpp
|
|
kernel/common/klisten.cpp
|
|
kernel/common/kmachine.cpp
|
|
kernel/common/kmalloc.cpp
|
|
kernel/common/kmemcard.cpp
|
|
kernel/common/kprint.cpp
|
|
kernel/common/kscheme.cpp
|
|
kernel/common/ksocket.cpp
|
|
kernel/common/ksound.cpp
|
|
kernel/jak1/fileio.cpp
|
|
kernel/jak1/kboot.cpp
|
|
kernel/jak1/kdgo.cpp
|
|
kernel/jak1/klink.cpp
|
|
kernel/jak1/klisten.cpp
|
|
kernel/jak1/kmachine.cpp
|
|
kernel/jak1/kprint.cpp
|
|
kernel/jak1/kscheme.cpp
|
|
kernel/jak1/ksound.cpp
|
|
kernel/jak2/fileio.cpp
|
|
kernel/jak2/kboot.cpp
|
|
kernel/jak2/kdgo.cpp
|
|
kernel/jak2/klink.cpp
|
|
kernel/jak2/klisten.cpp
|
|
kernel/jak2/kmachine.cpp
|
|
kernel/jak2/kmalloc.cpp
|
|
kernel/jak2/kprint.cpp
|
|
kernel/jak2/kscheme.cpp
|
|
kernel/jak2/ksound.cpp
|
|
kernel/jak3/fileio.cpp
|
|
kernel/jak3/kboot.cpp
|
|
kernel/jak3/kdgo.cpp
|
|
kernel/jak3/kdsnetm.cpp
|
|
kernel/jak3/klink.cpp
|
|
kernel/jak3/klisten.cpp
|
|
kernel/jak3/kmachine.cpp
|
|
kernel/jak3/kmalloc.cpp
|
|
kernel/jak3/kmemcard.cpp
|
|
kernel/jak3/kprint.cpp
|
|
kernel/jak3/kscheme.cpp
|
|
kernel/jak3/ksocket.cpp
|
|
kernel/jak3/ksound.cpp
|
|
mips2c/jak1_functions/bones.cpp
|
|
mips2c/jak1_functions/collide_cache.cpp
|
|
mips2c/jak1_functions/collide_edge_grab.cpp
|
|
mips2c/jak1_functions/collide_func.cpp
|
|
mips2c/jak1_functions/collide_mesh.cpp
|
|
mips2c/jak1_functions/collide_probe.cpp
|
|
mips2c/jak1_functions/draw_string.cpp
|
|
mips2c/jak1_functions/generic_effect.cpp
|
|
mips2c/jak1_functions/generic_effect2.cpp
|
|
mips2c/jak1_functions/generic_merc.cpp
|
|
mips2c/jak1_functions/generic_tie.cpp
|
|
mips2c/jak1_functions/joint.cpp
|
|
mips2c/jak1_functions/merc_blend_shape.cpp
|
|
mips2c/jak1_functions/ocean_vu0.cpp
|
|
mips2c/jak1_functions/ocean.cpp
|
|
mips2c/jak1_functions/ripple.cpp
|
|
mips2c/jak1_functions/shadow.cpp
|
|
mips2c/jak1_functions/sky_tng.cpp
|
|
mips2c/jak1_functions/sparticle_launcher.cpp
|
|
mips2c/jak1_functions/sparticle.cpp
|
|
mips2c/jak1_functions/test_func.cpp
|
|
mips2c/jak1_functions/texture.cpp
|
|
mips2c/jak1_functions/tfrag.cpp
|
|
mips2c/jak1_functions/tie_methods.cpp
|
|
mips2c/jak1_functions/time_of_day.cpp
|
|
mips2c/jak2_functions/bones.cpp
|
|
mips2c/jak2_functions/collide_cache.cpp
|
|
mips2c/jak2_functions/collide_edge_grab.cpp
|
|
mips2c/jak2_functions/collide_func.cpp
|
|
mips2c/jak2_functions/collide_hash.cpp
|
|
mips2c/jak2_functions/collide_mesh.cpp
|
|
mips2c/jak2_functions/debug.cpp
|
|
mips2c/jak2_functions/font.cpp
|
|
mips2c/jak2_functions/foreground.cpp
|
|
mips2c/jak2_functions/generic_effect.cpp
|
|
mips2c/jak2_functions/generic_merc.cpp
|
|
mips2c/jak2_functions/joint.cpp
|
|
mips2c/jak2_functions/lights.cpp
|
|
mips2c/jak2_functions/merc_blend_shape.cpp
|
|
mips2c/jak2_functions/nav_control.cpp
|
|
mips2c/jak2_functions/nav_mesh.cpp
|
|
mips2c/jak2_functions/ocean_vu0.cpp
|
|
mips2c/jak2_functions/ocean.cpp
|
|
mips2c/jak2_functions/ripple.cpp
|
|
mips2c/jak2_functions/shadow.cpp
|
|
mips2c/jak2_functions/sky.cpp
|
|
mips2c/jak2_functions/sparticle_launcher.cpp
|
|
mips2c/jak2_functions/sparticle.cpp
|
|
mips2c/jak2_functions/spatial_hash.cpp
|
|
mips2c/jak2_functions/squid.cpp
|
|
mips2c/jak2_functions/texture.cpp
|
|
mips2c/jak2_functions/vortex.cpp
|
|
mips2c/mips2c_table.cpp
|
|
overlord/common/dma.cpp
|
|
overlord/common/fake_iso.cpp
|
|
overlord/common/iso_api.cpp
|
|
overlord/common/iso.cpp
|
|
overlord/common/isocommon.cpp
|
|
overlord/common/overlord.cpp
|
|
overlord/common/sbank.cpp
|
|
overlord/common/soundcommon.cpp
|
|
overlord/common/srpc.cpp
|
|
overlord/common/ssound.cpp
|
|
overlord/jak1/dma.cpp
|
|
overlord/jak1/fake_iso.cpp
|
|
overlord/jak1/iso_api.cpp
|
|
overlord/jak1/iso_queue.cpp
|
|
overlord/jak1/iso.cpp
|
|
overlord/jak1/isocommon.cpp
|
|
overlord/jak1/overlord.cpp
|
|
overlord/jak1/ramdisk.cpp
|
|
overlord/jak1/srpc.cpp
|
|
overlord/jak1/ssound.cpp
|
|
overlord/jak1/stream.cpp
|
|
overlord/jak2/dma.cpp
|
|
overlord/jak2/iso_api.cpp
|
|
overlord/jak2/iso_cd.cpp
|
|
overlord/jak2/iso_queue.cpp
|
|
overlord/jak2/iso.cpp
|
|
overlord/jak2/list.cpp
|
|
overlord/jak2/overlord.cpp
|
|
overlord/jak2/pages.cpp
|
|
overlord/jak2/spustreams.cpp
|
|
overlord/jak2/srpc.cpp
|
|
overlord/jak2/ssound.cpp
|
|
overlord/jak2/stream.cpp
|
|
overlord/jak2/streamlfo.cpp
|
|
overlord/jak2/streamlist.cpp
|
|
overlord/jak2/vag.cpp
|
|
runtime.cpp
|
|
sce/deci2.cpp
|
|
sce/iop.cpp
|
|
sce/libcdvd_ee.cpp
|
|
sce/libdma.cpp
|
|
sce/libgraph.cpp
|
|
sce/libpad.cpp
|
|
sce/libscf.cpp
|
|
sce/sif_ee_memcard.cpp
|
|
sce/sif_ee.cpp
|
|
sce/stubs.cpp
|
|
settings/settings.cpp
|
|
system/background_worker.cpp
|
|
system/Deci2Server.cpp
|
|
system/hid/devices/game_controller.cpp
|
|
system/hid/devices/keyboard.cpp
|
|
system/hid/devices/mouse.cpp
|
|
system/hid/display_manager.cpp
|
|
system/hid/input_bindings.cpp
|
|
system/hid/input_manager.cpp
|
|
system/hid/sdl_util.cpp
|
|
system/IOP_Kernel.cpp
|
|
system/iop_thread.cpp
|
|
system/SystemThread.cpp
|
|
tools/filter_menu/filter_menu.cpp
|
|
tools/subtitle_editor/subtitle_editor_db.cpp
|
|
tools/subtitle_editor/subtitle_editor_repl_client.cpp
|
|
tools/subtitle_editor/subtitle_editor.cpp
|
|
)
|
|
|
|
add_subdirectory(sound)
|
|
|
|
# we build the runtime as a static library.
|
|
add_library(runtime STATIC ${RUNTIME_SOURCE} "../third-party/glad/src/glad.c")
|
|
|
|
target_link_libraries(runtime common fmt SDL2::SDL2 imgui discord-rpc sound stb_image libco libcurl)
|
|
if(WIN32)
|
|
target_link_libraries(runtime mman)
|
|
else()
|
|
target_link_libraries(runtime pthread dl)
|
|
endif()
|
|
|
|
add_executable(gk main.cpp)
|
|
target_link_libraries(gk runtime)
|