# GENERATED by port/gen_cmake.py from build/win32/*.vcxproj -- do not edit by hand
cmake_minimum_required(VERSION 3.16)
project(shar_linux C CXX)
option(SHAR_RAD_DEBUG "Use the original Debug configuration (RAD_DEBUG: asserts, debug output)" OFF)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# SHAR_UNINIT_AUDIT: warnings on and -O2 (GCC needs optimisation to track uninitialised values)
option(SHAR_UNINIT_AUDIT "Report uninitialised reads instead of silencing warnings" OFF)
if(SHAR_UNINIT_AUDIT)
  set(SHAR_WARN "-O2 -Wuninitialized -Wmaybe-uninitialized")
else()
  set(SHAR_WARN "-w")
endif()
# GCC 15 enables libstdc++ bounds assertions in unoptimised builds; the MSVC release build had none.
# Keep them in the debug build (SHAR_RAD_DEBUG) to find latent out-of-range reads.
if(NOT SHAR_RAD_DEBUG)
  set(SHAR_WARN "${SHAR_WARN} -D_GLIBCXX_NO_ASSERTIONS")
endif()
# SHAR_64BIT: x86-64 (the default); OFF = the legacy 32-bit x86 build (the game as shipped). Libraries are
# linked by name, so -m64 / -m32 picks the amd64 / i386 packages (libsdl2-dev, libgl-dev, libopenal-dev, FFmpeg)
option(SHAR_64BIT "Build for x86-64 (OFF: legacy 32-bit x86)" ON)
if(SHAR_64BIT)
  set(SHAR_ARCH -m64)
else()
  set(SHAR_ARCH -m32)
  message(STATUS "SHAR: legacy 32-bit build")
endif()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${SHAR_ARCH} -g -fno-strict-aliasing ${SHAR_WARN}")
# gnu++98 + permissive: closest to what 2003-era MSVC accepted
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SHAR_ARCH} -g -std=gnu++98 -fpermissive -fno-strict-aliasing ${SHAR_WARN}")
# __FILE__ (assert text) relative to the source root: no home directory in shipped binaries
add_compile_options("-fmacro-prefix-map=${CMAKE_SOURCE_DIR}/=")
# static C++ runtime + no exported runtime symbols: the game's own operator new must not leak into
# shared libraries (GPU drivers) the way it would by default on ELF (see SHAR_LOCAL in msvc_compat.h)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${SHAR_ARCH} -static-libstdc++ -static-libgcc -Wl,--exclude-libs,ALL")
# the game's operator new/delete stay out of the dynamic symbol table (port/compat/srr2.map)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--version-script=${CMAKE_SOURCE_DIR}/port/compat/srr2.map")
# Lua for mods' scripts (port/third_party/lua, port/compat/shar_modlua.cpp): plain C, so declared before the
# game-wide definitions and the force-included MSVC compat header below
add_library(lua STATIC port/third_party/lua/lapi.c port/third_party/lua/lauxlib.c port/third_party/lua/lbaselib.c port/third_party/lua/lcode.c port/third_party/lua/lcorolib.c port/third_party/lua/lctype.c port/third_party/lua/ldblib.c port/third_party/lua/ldebug.c port/third_party/lua/ldo.c port/third_party/lua/ldump.c port/third_party/lua/lfunc.c port/third_party/lua/lgc.c port/third_party/lua/linit.c port/third_party/lua/liolib.c port/third_party/lua/llex.c port/third_party/lua/lmathlib.c port/third_party/lua/lmem.c port/third_party/lua/loadlib.c port/third_party/lua/lobject.c port/third_party/lua/lopcodes.c port/third_party/lua/loslib.c port/third_party/lua/lparser.c port/third_party/lua/lstate.c port/third_party/lua/lstring.c port/third_party/lua/lstrlib.c port/third_party/lua/ltable.c port/third_party/lua/ltablib.c port/third_party/lua/ltm.c port/third_party/lua/lundump.c port/third_party/lua/lutf8lib.c port/third_party/lua/lvm.c port/third_party/lua/lzio.c)
target_compile_options(lua PRIVATE -O2)
target_compile_definitions(lua PRIVATE LUA_USE_POSIX)
# glslang (GLSL -> SPIR-V for the Vulkan renderer): a shared library with its own C++ runtime and allocator, out
# of reach of the game's operator new (port/third_party/glslang/shar_glslang.h)
add_library(shar_glslang SHARED port/third_party/glslang/SPIRV/GlslangToSpv.cpp port/third_party/glslang/SPIRV/InReadableOrder.cpp port/third_party/glslang/SPIRV/Logger.cpp port/third_party/glslang/SPIRV/SpvBuilder.cpp port/third_party/glslang/SPIRV/SpvPostProcess.cpp port/third_party/glslang/SPIRV/SpvTools.cpp port/third_party/glslang/SPIRV/disassemble.cpp port/third_party/glslang/SPIRV/doc.cpp port/third_party/glslang/glslang/GenericCodeGen/CodeGen.cpp port/third_party/glslang/glslang/GenericCodeGen/Link.cpp port/third_party/glslang/glslang/MachineIndependent/Constant.cpp port/third_party/glslang/glslang/MachineIndependent/InfoSink.cpp port/third_party/glslang/glslang/MachineIndependent/Initialize.cpp port/third_party/glslang/glslang/MachineIndependent/IntermTraverse.cpp port/third_party/glslang/glslang/MachineIndependent/Intermediate.cpp port/third_party/glslang/glslang/MachineIndependent/ParseContextBase.cpp port/third_party/glslang/glslang/MachineIndependent/ParseHelper.cpp port/third_party/glslang/glslang/MachineIndependent/PoolAlloc.cpp port/third_party/glslang/glslang/MachineIndependent/RemoveTree.cpp port/third_party/glslang/glslang/MachineIndependent/Scan.cpp port/third_party/glslang/glslang/MachineIndependent/ShaderLang.cpp port/third_party/glslang/glslang/MachineIndependent/SpirvIntrinsics.cpp port/third_party/glslang/glslang/MachineIndependent/SymbolTable.cpp port/third_party/glslang/glslang/MachineIndependent/Versions.cpp port/third_party/glslang/glslang/MachineIndependent/attribute.cpp port/third_party/glslang/glslang/MachineIndependent/glslang_tab.cpp port/third_party/glslang/glslang/MachineIndependent/intermOut.cpp port/third_party/glslang/glslang/MachineIndependent/iomapper.cpp port/third_party/glslang/glslang/MachineIndependent/limits.cpp port/third_party/glslang/glslang/MachineIndependent/linkValidate.cpp port/third_party/glslang/glslang/MachineIndependent/parseConst.cpp port/third_party/glslang/glslang/MachineIndependent/preprocessor/Pp.cpp port/third_party/glslang/glslang/MachineIndependent/preprocessor/PpAtom.cpp port/third_party/glslang/glslang/MachineIndependent/preprocessor/PpContext.cpp port/third_party/glslang/glslang/MachineIndependent/preprocessor/PpScanner.cpp port/third_party/glslang/glslang/MachineIndependent/preprocessor/PpTokens.cpp port/third_party/glslang/glslang/MachineIndependent/propagateNoContraction.cpp port/third_party/glslang/glslang/MachineIndependent/reflection.cpp port/third_party/glslang/glslang/OSDependent/Unix/ossource.cpp port/third_party/glslang/glslang/ResourceLimits/ResourceLimits.cpp port/third_party/glslang/shar_glslang.cpp)
target_compile_options(shar_glslang PRIVATE -std=c++17 -O2 -g0 -w -fvisibility=hidden)
target_include_directories(shar_glslang PRIVATE port/third_party/glslang port/third_party/glslang/generated)
target_link_options(shar_glslang PRIVATE ${SHAR_ARCH} -static-libstdc++ -static-libgcc -Wl,--exclude-libs,ALL -Wl,--version-script=${CMAKE_SOURCE_DIR}/port/third_party/glslang/shar_glslang.map)
target_link_libraries(shar_glslang PRIVATE pthread)
add_compile_definitions(RAD_WIN32 RAD_LINUX LINUX RAD_PC PDDI_NO_ASM)
# MSVC built-ins/CRT names -> GCC/POSIX, and a types-only windows.h (searched after the source dirs)
add_compile_options("SHELL:-include ${CMAKE_SOURCE_DIR}/port/compat/msvc_compat.h")
include_directories(AFTER port/compat)

add_executable(srr2
  code/ai/actionbuttonhandler.cpp
  code/ai/actionbuttonmanager.cpp
  code/ai/automaticdoor.cpp
  code/ai/playanimonce.cpp
  code/ai/state.cpp
  code/ai/statemanager.cpp
  code/ai/sequencer/action.cpp
  code/ai/sequencer/actioncontroller.cpp
  code/ai/sequencer/sequencer.cpp
  code/ai/sequencer/task.cpp
  code/ai/vehicle/chaseai.cpp
  code/ai/vehicle/potentialfield.cpp
  code/ai/vehicle/potentials.cpp
  code/ai/vehicle/trafficai.cpp
  code/ai/vehicle/vehicleai.cpp
  code/ai/vehicle/vehicleairender.cpp
  code/ai/vehicle/waypointai.cpp
  code/ai/actor/ActorAnimationUFO.cpp
  code/ai/actor/actor.cpp
  code/ai/actor/actoranimationwasp.cpp
  code/ai/actor/actordsg.cpp
  code/ai/actor/actormanager.cpp
  code/ai/actor/attackbehaviour.cpp
  code/ai/actor/attractionbehaviour.cpp
  code/ai/actor/cutcambehaviour.cpp
  code/ai/actor/evasionbehaviour.cpp
  code/ai/actor/flyingactor.cpp
  code/ai/actor/intersectionlist.cpp
  code/ai/actor/projectile.cpp
  code/ai/actor/projectiledsg.cpp
  code/ai/actor/spawnpoint.cpp
  code/ai/actor/stunnedbehaviour.cpp
  code/ai/actor/ufoattackbehaviour.cpp
  code/ai/actor/ufobeamalwaysonbehaviour.cpp
  code/ai/actor/ufobehaviour.cpp
  code/atc/atcloader.cpp
  code/atc/atcmanager.cpp
  code/camera/animatedcam.cpp
  code/camera/bumpercam.cpp
  code/camera/chasecam.cpp
  code/camera/conversationcam.cpp
  code/camera/debugcam.cpp
  code/camera/firstpersoncam.cpp
  code/camera/followcam.cpp
  code/camera/kullcam.cpp
  code/camera/pccam.cpp
  code/camera/railcam.cpp
  code/camera/relativeanimatedcam.cpp
  code/camera/reversecam.cpp
  code/camera/sinecosshaker.cpp
  code/camera/snapshotcam.cpp
  code/camera/staticcam.cpp
  code/camera/supercam.cpp
  code/camera/supercamcentral.cpp
  code/camera/supercamcontroller.cpp
  code/camera/supercammanager.cpp
  code/camera/supersprintcam.cpp
  code/camera/surveillancecam.cpp
  code/camera/trackercam.cpp
  code/camera/walkercam.cpp
  code/camera/wrecklesscam.cpp
  code/camera/wrecklesseventlistener.cpp
  code/cards/bonuscard.cpp
  code/cards/card.cpp
  code/cards/cardgallery.cpp
  code/cards/cardsdb.cpp
  code/cards/collectorcard.cpp
  code/console/console.cpp
  code/console/debugconsolecallback.cpp
  code/console/fbstricmp.cpp
  code/console/nameinsensitive.cpp
  code/console/upcase.cpp
  code/contexts/bootupcontext.cpp
  code/contexts/context.cpp
  code/contexts/entrycontext.cpp
  code/contexts/exitcontext.cpp
  code/contexts/frontendcontext.cpp
  code/contexts/loadingcontext.cpp
  code/contexts/pausecontext.cpp
  code/contexts/playingcontext.cpp
  code/contexts/gameplay/gameplaycontext.cpp
  code/contexts/gameplay/loadinggameplaycontext.cpp
  code/contexts/demo/democontext.cpp
  code/contexts/demo/loadingdemocontext.cpp
  code/contexts/supersprint/loadingsupersprintcontext.cpp
  code/contexts/supersprint/supersprintcontext.cpp
  code/contexts/supersprint/supersprintfecontext.cpp
  code/debug/debuginfo.cpp
  code/debug/profiler.cpp
  code/debug/section.cpp
  code/events/eventlistener.cpp
  code/events/eventmanager.cpp
  code/gameflow/gameflow.cpp
  code/input/FEMouse.cpp
  code/input/Gamepad.cpp
  code/input/Keyboard.cpp
  code/input/Mouse.cpp
  code/input/MouseCursor.cpp
  code/input/RealController.cpp
  code/input/basedamper.cpp
  code/input/button.cpp
  code/input/constanteffect.cpp
  code/input/forceeffect.cpp
  code/input/inputmanager.cpp
  code/input/mappable.cpp
  code/input/mapper.cpp
  code/input/rumbleeffect.cpp
  code/input/rumblewin32.cpp
  code/input/steeringspring.cpp
  code/input/usercontrollerWin32.cpp
  code/input/virtualinputs.cpp
  code/input/wheelrumble.cpp
  code/interiors/interiormanager.cpp
  code/loading/cameradataloader.cpp
  code/loading/cementfilehandler.cpp
  code/loading/choreofilehandler.cpp
  code/loading/consolefilehandler.cpp
  code/loading/filehandlerfactory.cpp
  code/loading/iconfilehandler.cpp
  code/loading/intersectionloader.cpp
  code/loading/loadingmanager.cpp
  code/loading/locatorloader.cpp
  code/loading/p3dfilehandler.cpp
  code/loading/pathloader.cpp
  code/loading/roaddatasegmentloader.cpp
  code/loading/roadloader.cpp
  code/loading/scroobyfilehandler.cpp
  code/loading/soundfilehandler.cpp
  code/main/commandlineoptions.cpp
  code/main/game.cpp
  code/main/pchsrr2.cpp
  code/main/singletons.cpp
  code/main/tuidunaligned.cpp
  code/main/win32main.cpp
  code/main/win32platform.cpp
  code/memory/classsizetracker.cpp
  code/memory/createheap.cpp
  code/memory/leakdetection.cpp
  code/memory/memorypool.cpp
  code/memory/memoryutilities.cpp
  code/memory/propstats.cpp
  code/memory/srrmemory.cpp
  code/mission/animatedicon.cpp
  code/mission/bonusmissioninfo.cpp
  code/mission/gameplaymanager.cpp
  code/mission/haspresentationinfo.cpp
  code/mission/mission.cpp
  code/mission/missionmanager.cpp
  code/mission/missionscriptloader.cpp
  code/mission/missionstage.cpp
  code/mission/nocopbonusobjective.cpp
  code/mission/nodamagebonusobjective.cpp
  code/mission/racepositionbonusobjective.cpp
  code/mission/statepropcollectible.cpp
  code/mission/timeremainbonusobjective.cpp
  code/mission/objectives/buycarobjective.cpp
  code/mission/objectives/buyskinobjective.cpp
  code/mission/objectives/coinobjective.cpp
  code/mission/objectives/collectdumpedobjective.cpp
  code/mission/objectives/collectibleobjective.cpp
  code/mission/objectives/deliveryobjective.cpp
  code/mission/objectives/destroybossobjective.cpp
  code/mission/objectives/destroyobjective.cpp
  code/mission/objectives/dialogueobjective.cpp
  code/mission/objectives/fmvobjective.cpp
  code/mission/objectives/followobjective.cpp
  code/mission/objectives/getinobjective.cpp
  code/mission/objectives/gooutsideobjective.cpp
  code/mission/objectives/gotoobjective.cpp
  code/mission/objectives/interiorobjective.cpp
  code/mission/objectives/loadvehicleobjective.cpp
  code/mission/objectives/loseobjective.cpp
  code/mission/objectives/missionobjective.cpp
  code/mission/objectives/pickupitemobjective.cpp
  code/mission/objectives/raceobjective.cpp
  code/mission/objectives/talktoobjective.cpp
  code/mission/objectives/timerobjective.cpp
  code/mission/conditions/damagecondition.cpp
  code/mission/conditions/followcondition.cpp
  code/mission/conditions/getoutofcarcondition.cpp
  code/mission/conditions/keepbarrelcondition.cpp
  code/mission/conditions/leaveinteriorcondition.cpp
  code/mission/conditions/missioncondition.cpp
  code/mission/conditions/notabductedcondition.cpp
  code/mission/conditions/outofboundscondition.cpp
  code/mission/conditions/positioncondition.cpp
  code/mission/conditions/racecondition.cpp
  code/mission/conditions/timeoutcondition.cpp
  code/mission/conditions/vehiclecarryingstateprop.cpp
  code/mission/conditions/vehiclecondition.cpp
  code/mission/safezone/safezone.cpp
  code/mission/rewards/merchandise.cpp
  code/mission/rewards/reward.cpp
  code/mission/rewards/rewardsmanager.cpp
  code/mission/charactersheet/charactersheetmanager.cpp
  code/mission/ufo/tractorbeam.cpp
  code/mission/ufo/ufo.cpp
  code/mission/respawnmanager/respawnentity.cpp
  code/mission/respawnmanager/respawnmanager.cpp
  code/presentation/animplayer.cpp
  code/presentation/blinker.cpp
  code/presentation/cameraplayer.cpp
  code/presentation/language.cpp
  code/presentation/mouthflapper.cpp
  code/presentation/nisplayer.cpp
  code/presentation/playerdrawable.cpp
  code/presentation/presentation.cpp
  code/presentation/presentationanimator.cpp
  code/presentation/simpleanimationplayer.cpp
  code/presentation/transitionplayer.cpp
  code/presentation/tutorialmanager.cpp
  code/presentation/presevents/fmvevent.cpp
  code/presentation/presevents/nisevent.cpp
  code/presentation/presevents/presentationevent.cpp
  code/presentation/presevents/transevent.cpp
  code/presentation/gui/guientity.cpp
  code/presentation/gui/guimanager.cpp
  code/presentation/gui/guimenu.cpp
  code/presentation/gui/guimenuitem.cpp
  code/presentation/gui/guiscreen.cpp
  code/presentation/gui/guiscreenmemcardcheck.cpp
  code/presentation/gui/guiscreenmemorycard.cpp
  code/presentation/gui/guiscreenmessage.cpp
  code/presentation/gui/guiscreenprompt.cpp
  code/presentation/gui/guisystem.cpp
  code/presentation/gui/guitextbible.cpp
  code/presentation/gui/guiuserinputhandler.cpp
  code/presentation/gui/guiwindow.cpp
  code/presentation/gui/backend/guimanagerbackend.cpp
  code/presentation/gui/backend/guiscreendemo.cpp
  code/presentation/gui/backend/guiscreenloading.cpp
  code/presentation/gui/backend/guiscreenloadingfe.cpp
  code/presentation/gui/frontend/guimanagerfrontend.cpp
  code/presentation/gui/frontend/guiscreencardgallery.cpp
  code/presentation/gui/frontend/guiscreencontrollerWin32.cpp
  code/presentation/gui/frontend/guiscreendisplay.cpp
  code/presentation/gui/frontend/guiscreenloadgame.cpp
  code/presentation/gui/frontend/guiscreenmainmenu.cpp
  code/presentation/gui/frontend/guiscreenmissiongallery.cpp
  code/presentation/gui/frontend/guiscreenoptions.cpp
  code/presentation/gui/frontend/guiscreenplaymovie.cpp
  code/presentation/gui/frontend/guiscreenscrapbook.cpp
  code/presentation/gui/frontend/guiscreenscrapbookcontents.cpp
  code/presentation/gui/frontend/guiscreenscrapbookstats.cpp
  code/presentation/gui/frontend/guiscreenskingallery.cpp
  code/presentation/gui/frontend/guiscreensound.cpp
  code/presentation/gui/frontend/guiscreensplash.cpp
  code/presentation/gui/frontend/guiscreenvehiclegallery.cpp
  code/presentation/gui/frontend/guiscreenviewcredits.cpp
  code/presentation/gui/frontend/guiscreenviewmovies.cpp
  code/presentation/gui/ingame/guimanageringame.cpp
  code/presentation/gui/ingame/guiscreencreditspostfmv.cpp
  code/presentation/gui/ingame/guiscreenhastransitions.cpp
  code/presentation/gui/ingame/guiscreenhud.cpp
  code/presentation/gui/ingame/guiscreeniriswipe.cpp
  code/presentation/gui/ingame/guiscreenletterbox.cpp
  code/presentation/gui/ingame/guiscreenlevelend.cpp
  code/presentation/gui/ingame/guiscreenlevelstats.cpp
  code/presentation/gui/ingame/guiscreenmissionbase.cpp
  code/presentation/gui/ingame/guiscreenmissionload.cpp
  code/presentation/gui/ingame/guiscreenmissionover.cpp
  code/presentation/gui/ingame/guiscreenmissionselect.cpp
  code/presentation/gui/ingame/guiscreenmissionsuccess.cpp
  code/presentation/gui/ingame/guiscreenmultihud.cpp
  code/presentation/gui/ingame/guiscreenpause.cpp
  code/presentation/gui/ingame/guiscreenpausecontroller.cpp
  code/presentation/gui/ingame/guiscreenpausedisplay.cpp
  code/presentation/gui/ingame/guiscreenpausemission.cpp
  code/presentation/gui/ingame/guiscreenpauseoptions.cpp
  code/presentation/gui/ingame/guiscreenpausesettings.cpp
  code/presentation/gui/ingame/guiscreenpausesound.cpp
  code/presentation/gui/ingame/guiscreenpausesunday.cpp
  code/presentation/gui/ingame/guiscreenphonebooth.cpp
  code/presentation/gui/ingame/guiscreenpurchaserewards.cpp
  code/presentation/gui/ingame/guiscreenrewards.cpp
  code/presentation/gui/ingame/guiscreensavegame.cpp
  code/presentation/gui/ingame/guiscreentutorial.cpp
  code/presentation/gui/ingame/guiscreenviewcards.cpp
  code/presentation/gui/ingame/hudevents/hudcardcollected.cpp
  code/presentation/gui/ingame/hudevents/hudcoincollected.cpp
  code/presentation/gui/ingame/hudevents/hudcountdown.cpp
  code/presentation/gui/ingame/hudevents/hudeventhandler.cpp
  code/presentation/gui/ingame/hudevents/hudhitnrun.cpp
  code/presentation/gui/ingame/hudevents/huditemdropped.cpp
  code/presentation/gui/ingame/hudevents/hudmissionobjective.cpp
  code/presentation/gui/ingame/hudevents/hudmissionprogress.cpp
  code/presentation/gui/ingame/hudevents/hudwaspdestroyed.cpp
  code/presentation/gui/utility/hudmap.cpp
  code/presentation/gui/utility/hudmapcam.cpp
  code/presentation/gui/utility/numerictext.cpp
  code/presentation/gui/utility/scrollingtext.cpp
  code/presentation/gui/utility/slider.cpp
  code/presentation/gui/utility/specialfx.cpp
  code/presentation/gui/utility/teletypetext.cpp
  code/presentation/gui/utility/transitions.cpp
  code/presentation/gui/bootup/guimanagerbootup.cpp
  code/presentation/gui/bootup/guimanagerlanguage.cpp
  code/presentation/gui/bootup/guiscreenbootupload.cpp
  code/presentation/gui/bootup/guiscreenlanguage.cpp
  code/presentation/gui/bootup/guiscreenlicense.cpp
  code/presentation/gui/minigame/guimanagerminigame.cpp
  code/presentation/gui/minigame/guiscreenminihud.cpp
  code/presentation/gui/minigame/guiscreenminimenu.cpp
  code/presentation/gui/minigame/guiscreenminipause.cpp
  code/presentation/gui/minigame/guiscreenminisummary.cpp
  code/presentation/fmvplayer/fmvplayer.cpp
  code/presentation/fmvplayer/fmvuserinputhandler.cpp
  code/render/RenderFlow/renderflow.cpp
  code/render/Culling/BoxPts.cpp
  code/render/Culling/Cell.cpp
  code/render/Culling/CellBlock.cpp
  code/render/Culling/CoordSubList.cpp
  code/render/Culling/CullData.cpp
  code/render/Culling/HexahedronP.cpp
  code/render/Culling/ISpatialProxy.cpp
  code/render/Culling/OctTreeData.cpp
  code/render/Culling/OctTreeNode.cpp
  code/render/Culling/SpatialTree.cpp
  code/render/Culling/SpatialTreeIter.cpp
  code/render/Culling/SphereSP.cpp
  code/render/Culling/VectorLib.cpp
  code/render/Culling/WorldScene.cpp
  code/render/DSG/DSGFactory.cpp
  code/render/DSG/DynaPhysDSG.cpp
  code/render/DSG/FenceEntityDSG.cpp
  code/render/DSG/IEntityDSG.cpp
  code/render/DSG/InstAnimDynaPhysDSG.cpp
  code/render/DSG/InstDynaPhysDSG.cpp
  code/render/DSG/InstStatEntityDSG.cpp
  code/render/DSG/InstStatPhysDSG.cpp
  code/render/DSG/IntersectDSG.cpp
  code/render/DSG/LensFlareDSG.cpp
  code/render/DSG/StatePropDSG.cpp
  code/render/DSG/StaticEntityDSG.cpp
  code/render/DSG/StaticPhysDSG.cpp
  code/render/DSG/TriStripDSG.cpp
  code/render/DSG/WorldSphereDSG.cpp
  code/render/DSG/animcollisionentitydsg.cpp
  code/render/DSG/animentitydsg.cpp
  code/render/DSG/breakableobjectdsg.cpp
  code/render/DSG/collisionentitydsg.cpp
  code/render/RenderManager/FrontEndRenderLayer.cpp
  code/render/RenderManager/RenderLayer.cpp
  code/render/RenderManager/RenderManager.cpp
  code/render/RenderManager/WorldRenderLayer.cpp
  code/render/Loaders/AllWrappers.cpp
  code/render/Loaders/AnimCollLoader.cpp
  code/render/Loaders/AnimDSGLoader.cpp
  code/render/Loaders/AnimDynaPhysLoader.cpp
  code/render/Loaders/BillboardWrappedLoader.cpp
  code/render/Loaders/DynaPhysLoader.cpp
  code/render/Loaders/FenceLoader.cpp
  code/render/Loaders/GeometryWrappedLoader.cpp
  code/render/Loaders/InstStatEntityLoader.cpp
  code/render/Loaders/InstStatPhysLoader.cpp
  code/render/Loaders/IntersectLoader.cpp
  code/render/Loaders/LensFlareLoader.cpp
  code/render/Loaders/StaticEntityLoader.cpp
  code/render/Loaders/StaticPhysLoader.cpp
  code/render/Loaders/TreeDSGLoader.cpp
  code/render/Loaders/WorldSphereLoader.cpp
  code/render/Loaders/breakableobjectloader.cpp
  code/render/Loaders/instparticlesystemloader.cpp
  code/render/IntersectManager/IntersectManager.cpp
  code/render/Particles/particlemanager.cpp
  code/render/Particles/particlesystemdsg.cpp
  code/render/Particles/vehicleparticleemitter.cpp
  code/render/breakables/breakablesmanager.cpp
  code/render/animentitydsgmanager/animentitydsgmanager.cpp
  code/roads/geometry.cpp
  code/roads/intersection.cpp
  code/roads/lane.cpp
  code/roads/road.cpp
  code/roads/roadmanager.cpp
  code/roads/roadrender.cpp
  code/roads/roadrendertest.cpp
  code/roads/roadsegment.cpp
  code/roads/roadsegmentdata.cpp
  code/roads/trafficcontrol.cpp
  code/sound/listener.cpp
  code/sound/positionalsoundplayer.cpp
  code/sound/simpsonssoundplayer.cpp
  code/sound/soundcluster.cpp
  code/sound/soundloader.cpp
  code/sound/soundmanager.cpp
  code/sound/soundrenderercallback.cpp
  code/sound/soundrenderer/dasoundplayer.cpp
  code/sound/soundrenderer/fader.cpp
  code/sound/soundrenderer/musicsoundplayer.cpp
  code/sound/soundrenderer/playermanager.cpp
  code/sound/soundrenderer/soundallocatedresource.cpp
  code/sound/soundrenderer/sounddynaload.cpp
  code/sound/soundrenderer/soundnucleus.cpp
  code/sound/soundrenderer/soundrenderingmanager.cpp
  code/sound/soundrenderer/soundresource.cpp
  code/sound/soundrenderer/soundresourcemanager.cpp
  code/sound/soundrenderer/soundtuner.cpp
  code/sound/soundrenderer/tunerdebugpage.cpp
  code/sound/soundrenderer/wireplayers.cpp
  code/sound/soundrenderer/wiresystem.cpp
  code/sound/avatar/avatarsoundplayer.cpp
  code/sound/avatar/carsoundparameters.cpp
  code/sound/avatar/soundavatar.cpp
  code/sound/avatar/vehiclesounddebugpage.cpp
  code/sound/avatar/vehiclesoundplayer.cpp
  code/sound/music/musicplayer.cpp
  code/sound/soundfx/positionalsoundsettings.cpp
  code/sound/soundfx/reverbcontroller.cpp
  code/sound/soundfx/reverbsettings.cpp
  code/sound/soundfx/soundeffectplayer.cpp
  code/sound/soundfx/soundfxfrontendlogic.cpp
  code/sound/soundfx/soundfxgameplaylogic.cpp
  code/sound/soundfx/soundfxlogic.cpp
  code/sound/soundfx/soundfxpauselogic.cpp
  code/sound/soundfx/win32reverbcontroller.cpp
  code/sound/tuning/globalsettings.cpp
  code/sound/dialog/conversation.cpp
  code/sound/dialog/conversationmatcher.cpp
  code/sound/dialog/dialogcoordinator.cpp
  code/sound/dialog/dialogline.cpp
  code/sound/dialog/dialoglist.cpp
  code/sound/dialog/dialogpriorityqueue.cpp
  code/sound/dialog/dialogqueueelement.cpp
  code/sound/dialog/dialogselectiongroup.cpp
  code/sound/dialog/dialogsounddebugpage.cpp
  code/sound/dialog/playabledialog.cpp
  code/sound/dialog/selectabledialog.cpp
  code/sound/nis/nissoundplayer.cpp
  code/sound/sounddebug/sounddebugdisplay.cpp
  code/sound/sounddebug/sounddebugpage.cpp
  code/sound/movingpositional/actorplayer.cpp
  code/sound/movingpositional/aivehiclesoundplayer.cpp
  code/sound/movingpositional/animobjsoundplayer.cpp
  code/sound/movingpositional/avatarvehicleposnplayer.cpp
  code/sound/movingpositional/movingsoundmanager.cpp
  code/sound/movingpositional/platformsoundplayer.cpp
  code/sound/movingpositional/trafficsoundplayer.cpp
  code/sound/movingpositional/vehicleposnsoundplayer.cpp
  code/sound/movingpositional/waspsoundplayer.cpp
  code/worldsim/avatar.cpp
  code/worldsim/avatarmanager.cpp
  code/worldsim/groundplanepool.cpp
  code/worldsim/hitnrunmanager.cpp
  code/worldsim/huskpool.cpp
  code/worldsim/vehiclecentral.cpp
  code/worldsim/worldcollisionsolveragent.cpp
  code/worldsim/worldobject.cpp
  code/worldsim/worldphysicsmanager.cpp
  code/worldsim/redbrick/geometryvehicle.cpp
  code/worldsim/redbrick/physicslocomotion.cpp
  code/worldsim/redbrick/physicslocomotioncontrollerforces.cpp
  code/worldsim/redbrick/redbrickcollisionsolveragent.cpp
  code/worldsim/redbrick/rootmatrixdriver.cpp
  code/worldsim/redbrick/suspensionjointdriver.cpp
  code/worldsim/redbrick/trafficbodydrawable.cpp
  code/worldsim/redbrick/trafficlocomotion.cpp
  code/worldsim/redbrick/vehicle.cpp
  code/worldsim/redbrick/vehicleeventlistener.cpp
  code/worldsim/redbrick/vehicleinit.cpp
  code/worldsim/redbrick/vehiclelocomotion.cpp
  code/worldsim/redbrick/wheel.cpp
  code/worldsim/redbrick/vehiclecontroller/aivehiclecontroller.cpp
  code/worldsim/redbrick/vehiclecontroller/humanvehiclecontroller.cpp
  code/worldsim/redbrick/vehiclecontroller/vehiclecontroller.cpp
  code/worldsim/redbrick/vehiclecontroller/vehiclemappable.cpp
  code/worldsim/character/aicharactercontroller.cpp
  code/worldsim/character/character.cpp
  code/worldsim/character/charactercontroller.cpp
  code/worldsim/character/charactermanager.cpp
  code/worldsim/character/charactermappable.cpp
  code/worldsim/character/characterrenderable.cpp
  code/worldsim/character/charactertarget.cpp
  code/worldsim/character/footprint/footprintmanager.cpp
  code/worldsim/traffic/trafficmanager.cpp
  code/worldsim/ped/pedestrian.cpp
  code/worldsim/ped/pedestrianmanager.cpp
  code/worldsim/harass/chasemanager.cpp
  code/worldsim/spawn/spawnmanager.cpp
  code/worldsim/coins/coinmanager.cpp
  code/worldsim/coins/sparkle.cpp
  code/worldsim/parkedcars/parkedcarmanager.cpp
  code/worldsim/skidmarks/SkidMarkGenerator.cpp
  code/worldsim/skidmarks/skidmark.cpp
  code/worldsim/skidmarks/skidmarkmanager.cpp
  code/data/PersistentWorldManager.cpp
  code/data/gamedatamanager.cpp
  code/data/savegameinfo.cpp
  code/data/memcard/memorycardmanager.cpp
  code/data/config/configstring.cpp
  code/data/config/gameconfigmanager.cpp
  code/cheats/cheatinputhandler.cpp
  code/cheats/cheatinputsystem.cpp
  code/cheats/cheats.cpp
  code/pedpaths/path.cpp
  code/pedpaths/pathmanager.cpp
  code/pedpaths/pathsegment.cpp
  code/stateprop/stateprop.cpp
  code/stateprop/statepropdata.cpp
  code/meta/actioneventlocator.cpp
  code/meta/carstartlocator.cpp
  code/meta/directionallocator.cpp
  code/meta/eventlocator.cpp
  code/meta/fovlocator.cpp
  code/meta/interiorentrancelocator.cpp
  code/meta/locator.cpp
  code/meta/occlusionlocator.cpp
  code/meta/recttriggervolume.cpp
  code/meta/scriptlocator.cpp
  code/meta/spheretriggervolume.cpp
  code/meta/splinelocator.cpp
  code/meta/staticcamlocator.cpp
  code/meta/triggerlocator.cpp
  code/meta/triggervolume.cpp
  code/meta/triggervolumetracker.cpp
  code/meta/zoneeventlocator.cpp
  code/supersprint/supersprintdata.cpp
  code/supersprint/supersprintmanager.cpp
  code/main/linuxplatform_sdl.cpp
  code/console/devconsole.cpp
  code/mission/modscript.cpp
  code/mission/objectives/modobjectives.cpp
  code/mission/conditions/modconditions.cpp
  code/mission/charactersheet/modstatstotals.cpp
  code/mission/rewards/modrewardquests.cpp
  code/meta/modtriggeractions.cpp
  code/presentation/gui/frontend/guiscreengraphics.cpp
)
target_include_directories(srr2 PRIVATE port/third_party/stb port/third_party/dejavu libs code libs/radcore/inc libs/radmovie/inc libs/radsound/inc libs/radscript/inc libs/radmusic/inc libs/pure3d libs/scrooby/inc libs/scrooby/src libs/radmath libs/sim libs/poser/inc libs/choreo/inc libs/radcontent/inc libs/radcontent)
if(SHAR_RAD_DEBUG)
  target_compile_definitions(srr2 PRIVATE _DEBUG RAD_DEBUG RAD_WIN32 RAD_PC)
else()
  target_compile_definitions(srr2 PRIVATE NDEBUG RAD_RELEASE RAD_WIN32 RAD_PC)
endif()
target_compile_options(srr2 PRIVATE "SHELL:-include ${CMAKE_SOURCE_DIR}/code/main/pchsrr2.h")

add_library(choreo STATIC
  libs/choreo/src/blendtemplate.cpp
  libs/choreo/src/constants.cpp
  libs/choreo/src/driver.cpp
  libs/choreo/src/internalanimation.cpp
  libs/choreo/src/jointblenddriver.cpp
  libs/choreo/src/jointblender.cpp
  libs/choreo/src/replayblenddriver.cpp
  libs/choreo/src/replayblender.cpp
  libs/choreo/src/rootblenddriver.cpp
  libs/choreo/src/rootblender.cpp
  libs/choreo/src/utility.cpp
  libs/choreo/src/basebank.cpp
  libs/choreo/src/load.cpp
  libs/choreo/src/scriptreader.cpp
  libs/choreo/src/scriptwriter.cpp
  libs/choreo/src/footblenddriver.cpp
  libs/choreo/src/footblender.cpp
  libs/choreo/src/footplanter.cpp
  libs/choreo/src/bank.cpp
  libs/choreo/src/engine.cpp
  libs/choreo/src/partition.cpp
  libs/choreo/src/puppet.cpp
  libs/choreo/src/rig.cpp
  libs/choreo/src/animation.cpp
  libs/choreo/src/blend.cpp
  libs/choreo/src/foot.cpp
  libs/choreo/src/locomotion.cpp
  libs/choreo/src/replay.cpp
  libs/choreo/src/root.cpp
  libs/choreo/src/synchronization.cpp
  libs/choreo/src/transition.cpp
)
target_include_directories(choreo PRIVATE libs libs/choreo/inc libs/pure3d libs/poser/inc libs/sim libs/radmath libs/radcore/inc libs/radcontent/inc code)
if(SHAR_RAD_DEBUG)
  target_compile_definitions(choreo PRIVATE _DEBUG RAD_DEBUG RAD_WIN32 RAD_PC)
else()
  target_compile_definitions(choreo PRIVATE NDEBUG RAD_RELEASE RAD_WIN32 RAD_PC)
endif()

add_library(libpng STATIC
  libs/pure3d/lib/libpng/png.c
  libs/pure3d/lib/libpng/pngerror.c
  libs/pure3d/lib/libpng/pngget.c
  libs/pure3d/lib/libpng/pngmem.c
  libs/pure3d/lib/libpng/pngpread.c
  libs/pure3d/lib/libpng/pngread.c
  libs/pure3d/lib/libpng/pngrio.c
  libs/pure3d/lib/libpng/pngrtran.c
  libs/pure3d/lib/libpng/pngrutil.c
  libs/pure3d/lib/libpng/pngset.c
  libs/pure3d/lib/libpng/pngtrans.c
  libs/pure3d/lib/libpng/pngwio.c
  libs/pure3d/lib/libpng/pngwrite.c
  libs/pure3d/lib/libpng/pngwtran.c
  libs/pure3d/lib/libpng/pngwutil.c
)
target_include_directories(libpng PRIVATE libs libs/pure3d/lib/zlib)
if(SHAR_RAD_DEBUG)
  target_compile_definitions(libpng PRIVATE PNG_USER_MEM_SUPPORTED _DEBUG RAD_WIN32 RAD_PC RAD_DEBUG)
else()
  target_compile_definitions(libpng PRIVATE NDEBUG PNG_USER_MEM_SUPPORTED RAD_PC RAD_WIN32 RAD_TUNE RAD_RELEASE)
endif()

add_library(pddigl STATIC
  libs/pure3d/pddi/base/basecontext.cpp
  libs/pure3d/pddi/base/baseshader.cpp
  libs/pure3d/pddi/base/font.cpp
  libs/pure3d/pddi/base/pddiobj.cpp
  libs/pure3d/pddi/gl/glcon.cpp
  libs/pure3d/pddi/gl/gldev.cpp
  libs/pure3d/pddi/gl/glmat.cpp
  libs/pure3d/pddi/gl/gltex.cpp
  libs/pure3d/pddi/gl/glpipeline.cpp
  libs/pure3d/pddi/gl/glpost.cpp
  libs/pure3d/pddi/gl/glcustom.cpp
  libs/pure3d/pddi/gl/glshaders.cpp
  libs/pure3d/pddi/gl/display_linux/gldisplay.cpp
  libs/pure3d/pddi/vk/vkfuncs.cpp
  libs/pure3d/pddi/vk/vkcore.cpp
  libs/pure3d/pddi/vk/vkpipeline.cpp
  libs/pure3d/pddi/vk/vktex.cpp
  libs/pure3d/pddi/vk/vkcon.cpp
  libs/pure3d/pddi/vk/vkmat.cpp
  libs/pure3d/pddi/vk/vkdisplay.cpp
  libs/pure3d/pddi/vk/vkdev.cpp
  libs/pure3d/pddi/vk/vkpost.cpp
  libs/pure3d/pddi/vk/vksun.cpp
)
target_include_directories(pddigl PRIVATE libs libs/radmath libs/pure3d libs/pure3d/lib/libpng libs/pure3d/lib/zlib port/third_party/glslang)
if(SHAR_RAD_DEBUG)
  target_compile_definitions(pddigl PRIVATE RAD_DEBUG _DEBUG)
else()
  target_compile_definitions(pddigl PRIVATE RAD_RELEASE NDEBUG)
endif()

add_library(pure3d STATIC
  libs/pure3d/p3d/ambientlight.cpp
  libs/pure3d/p3d/billboardobject.cpp
  libs/pure3d/p3d/bmp.cpp
  libs/pure3d/p3d/camera.cpp
  libs/pure3d/p3d/cameraloader.cpp
  libs/pure3d/p3d/chunkfile.cpp
  libs/pure3d/p3d/context.cpp
  libs/pure3d/p3d/debugdraw.cpp
  libs/pure3d/p3d/directionallight.cpp
  libs/pure3d/p3d/displaylist.cpp
  libs/pure3d/p3d/drawable.cpp
  libs/pure3d/p3d/dxtn.cpp
  libs/pure3d/p3d/entity.cpp
  libs/pure3d/p3d/error.cpp
  libs/pure3d/p3d/file.cpp
  libs/pure3d/p3d/fileftt.cpp
  libs/pure3d/p3d/font.cpp
  libs/pure3d/p3d/gameattr.cpp
  libs/pure3d/p3d/geometry.cpp
  libs/pure3d/p3d/image.cpp
  libs/pure3d/p3d/imageconverter.cpp
  libs/pure3d/p3d/imagefactory.cpp
  libs/pure3d/p3d/imagefont.cpp
  libs/pure3d/p3d/inventory.cpp
  libs/pure3d/p3d/light.cpp
  libs/pure3d/p3d/lightloader.cpp
  libs/pure3d/p3d/lightschooser.cpp
  libs/pure3d/p3d/loaders.cpp
  libs/pure3d/p3d/loadmanager.cpp
  libs/pure3d/p3d/locator.cpp
  libs/pure3d/p3d/lzr.cpp
  libs/pure3d/p3d/matrixstack.cpp
  libs/pure3d/p3d/memheap.cpp
  libs/pure3d/p3d/memory.cpp
  libs/pure3d/p3d/memorysection.cpp
  libs/pure3d/p3d/png.cpp
  libs/pure3d/p3d/pointcamera.cpp
  libs/pure3d/p3d/pointlight.cpp
  libs/pure3d/p3d/primgroup.cpp
  libs/pure3d/p3d/rawimage.cpp
  libs/pure3d/p3d/refcounted.cpp
  libs/pure3d/p3d/shader.cpp
  libs/pure3d/p3d/spotlight.cpp
  libs/pure3d/p3d/sprite.cpp
  libs/pure3d/p3d/table.cpp
  libs/pure3d/p3d/targa.cpp
  libs/pure3d/p3d/textdataparser.cpp
  libs/pure3d/p3d/textstring.cpp
  libs/pure3d/p3d/texture.cpp
  libs/pure3d/p3d/texturefont.cpp
  libs/pure3d/p3d/unicode.cpp
  libs/pure3d/p3d/utility.cpp
  libs/pure3d/p3d/vectorcamera.cpp
  libs/pure3d/p3d/vertexlist.cpp
  libs/pure3d/p3d/view.cpp
  libs/pure3d/p3d/platform/linux/plat_filemap.cpp
  libs/pure3d/p3d/platform/linux/platform.cpp
  libs/pure3d/p3d/anim/animate.cpp
  libs/pure3d/p3d/anim/animatedobject.cpp
  libs/pure3d/p3d/anim/billboardobjectanimation.cpp
  libs/pure3d/p3d/anim/cameraanimation.cpp
  libs/pure3d/p3d/anim/channel.cpp
  libs/pure3d/p3d/anim/compositedrawable.cpp
  libs/pure3d/p3d/anim/drawablepose.cpp
  libs/pure3d/p3d/anim/event.cpp
  libs/pure3d/p3d/anim/eventanimation.cpp
  libs/pure3d/p3d/anim/expression.cpp
  libs/pure3d/p3d/anim/expressionanimation.cpp
  libs/pure3d/p3d/anim/expressionoffsets.cpp
  libs/pure3d/p3d/anim/instancedgeometry.cpp
  libs/pure3d/p3d/anim/lightanimation.cpp
  libs/pure3d/p3d/anim/multicontroller.cpp
  libs/pure3d/p3d/anim/polyskin.cpp
  libs/pure3d/p3d/anim/pose.cpp
  libs/pure3d/p3d/anim/poseanimation.cpp
  libs/pure3d/p3d/anim/sequencer.cpp
  libs/pure3d/p3d/anim/shaderanimation.cpp
  libs/pure3d/p3d/anim/skeleton.cpp
  libs/pure3d/p3d/anim/textureanimation.cpp
  libs/pure3d/p3d/anim/vertexanimcontroller.cpp
  libs/pure3d/p3d/anim/vertexanimkey.cpp
  libs/pure3d/p3d/anim/vertexanimobject.cpp
  libs/pure3d/p3d/anim/vertexoffsetexpression.cpp
  libs/pure3d/p3d/anim/visibilityanimation.cpp
  libs/pure3d/p3d/effects/effect.cpp
  libs/pure3d/p3d/effects/optic.cpp
  libs/pure3d/p3d/effects/opticlensflare.cpp
  libs/pure3d/p3d/effects/opticloader.cpp
  libs/pure3d/p3d/effects/particlearray.cpp
  libs/pure3d/p3d/effects/particleemitter.cpp
  libs/pure3d/p3d/effects/particlegenerator.cpp
  libs/pure3d/p3d/effects/particleloader.cpp
  libs/pure3d/p3d/effects/particlepool.cpp
  libs/pure3d/p3d/effects/particlesystem.cpp
  libs/pure3d/p3d/effects/particletype.cpp
  libs/pure3d/p3d/effects/particleutility.cpp
  libs/pure3d/p3d/effects/transitionmanager.cpp
  libs/pure3d/p3d/scenegraph/nodeanimation.cpp
  libs/pure3d/p3d/scenegraph/scenegraph.cpp
  libs/pure3d/p3d/shadow/shadow_common.cpp
  libs/pure3d/p3d/shadow/shadow_generic.cpp
)
target_include_directories(pure3d PRIVATE libs libs/radcontent/inc libs/pure3d libs/pure3d/lib/libpng libs/pure3d/lib/zlib libs/radcore/inc libs/radmath code)
if(SHAR_RAD_DEBUG)
  target_compile_definitions(pure3d PRIVATE _DEBUG PNG_USER_MEM_SUPPORTED RAD_DEBUG RAD_PC RAD_WIN32)
else()
  target_compile_definitions(pure3d PRIVATE NDEBUG PNG_USER_MEM_SUPPORTED RAD_RELEASE RAD_PC RAD_WIN32)
endif()

add_library(zlib STATIC
  libs/pure3d/lib/zlib/adler32.c
  libs/pure3d/lib/zlib/compress.c
  libs/pure3d/lib/zlib/crc32.c
  libs/pure3d/lib/zlib/deflate.c
  libs/pure3d/lib/zlib/gzio.c
  libs/pure3d/lib/zlib/infblock.c
  libs/pure3d/lib/zlib/infcodes.c
  libs/pure3d/lib/zlib/inffast.c
  libs/pure3d/lib/zlib/inflate.c
  libs/pure3d/lib/zlib/inftrees.c
  libs/pure3d/lib/zlib/infutil.c
  libs/pure3d/lib/zlib/trees.c
  libs/pure3d/lib/zlib/uncompr.c
  libs/pure3d/lib/zlib/zutil.c
)
target_include_directories(zlib PRIVATE libs)
if(SHAR_RAD_DEBUG)
  target_compile_definitions(zlib PRIVATE _DEBUG RAD_WIN32 RAD_PC RAD_DEBUG)
else()
  target_compile_definitions(zlib PRIVATE NDEBUG RAD_PC RAD_WIN32 RAD_RELEASE RAD_TUNE)
endif()

add_library(radcontent STATIC
  libs/radcontent/src/radload/hashtable.cpp
  libs/radcontent/src/radload/inventory.cpp
  libs/radcontent/src/radload/manager.cpp
  libs/radcontent/src/radload/object.cpp
  libs/radcontent/src/radload/queue.cpp
  libs/radcontent/src/radload/request.cpp
  libs/radcontent/src/radload/stream.cpp
)
target_include_directories(radcontent PRIVATE libs libs/radcontent/inc libs/radcontent/src libs/radcore/inc libs/radmath code libs/radcontent/src/pch)
if(SHAR_RAD_DEBUG)
  target_compile_definitions(radcontent PRIVATE _DEBUG RAD_PC RAD_WIN32 RAD_DEBUG)
else()
  target_compile_definitions(radcontent PRIVATE NDEBUG RAD_PC RAD_WIN32 RAD_RELEASE)
endif()

add_library(radcore STATIC
  libs/radcore/src/pch/pch.cpp
  libs/radcore/src/raddebug/debug.cpp
  libs/radcore/src/radobject/object.cpp
  libs/radcore/src/raddispatch/dispatcher.cpp
  libs/radcore/src/radtime/stopwatch.cpp
  libs/radcore/src/radtime/time.cpp
  libs/radcore/src/radmemory/align.cpp
  libs/radcore/src/radmemory/binallocator.cpp
  libs/radcore/src/radmemory/dlheap.cpp
  libs/radcore/src/radmemory/externalmemoryheap.cpp
  libs/radcore/src/radmemory/externalmemoryobject.cpp
  libs/radcore/src/radmemory/memorymanager.cpp
  libs/radcore/src/radmemory/memoryobject.cpp
  libs/radcore/src/radmemory/memorypool.cpp
  libs/radcore/src/radmemory/memoryspacewin32.cpp
  libs/radcore/src/radmemory/platalloc.cpp
  libs/radcore/src/radmemory/staticheap.cpp
  libs/radcore/src/radmemory/trackingheap.cpp
  libs/radcore/src/radmemory/twowayallocator.cpp
  libs/radcore/src/radstring/string.cpp
  libs/radcore/src/radplatform/platform.cpp
  libs/radcore/src/radobjectlist/dynamicarray.cpp
  libs/radcore/src/radobjectlist/objectlist.cpp
  libs/radcore/src/radobjectlist/weakcallbackwrapper.cpp
  libs/radcore/src/radobjectlist/weakinterfacewrapper.cpp
  libs/radcore/src/raddebugconsole/consoleclient.cpp
  libs/radcore/src/raddebugwatch/watchclient.cpp
  libs/radcore/src/radremotecommand/functionlist.cpp
  libs/radcore/src/radremotecommand/remotecommandserver.cpp
  libs/radcore/src/radremotecommand/remotecommandtarget.cpp
  libs/radcore/src/radfile/common/cementer.cpp
  libs/radcore/src/radfile/common/drive.cpp
  libs/radcore/src/radfile/common/drivethread.cpp
  libs/radcore/src/radfile/common/file.cpp
  libs/radcore/src/radfile/common/filecache.cpp
  libs/radcore/src/radfile/common/filesystem.cpp
  libs/radcore/src/radfile/common/instancedrive.cpp
  libs/radcore/src/radfile/common/platformdrives.cpp
  libs/radcore/src/radfile/common/radfile.cpp
  libs/radcore/src/radfile/common/remotedrive.cpp
  libs/radcore/src/radfile/common/requests.cpp
  libs/radcore/src/radfile/linux/linuxdrive.cpp
  libs/radcore/src/radthread/mutex.cpp
  libs/radcore/src/radthread/semaphore.cpp
  libs/radcore/src/radthread/system.cpp
  libs/radcore/src/radthread/thread.cpp
  libs/radcore/src/radobjectbtree/objectavltree.cpp
  libs/radcore/src/radobjectbtree/objectbtree.cpp
  libs/radcore/src/radstacktrace/linux/stacktrace.cpp
  libs/radcore/src/radstats/simplestat.cpp
  libs/radcore/src/radstats/statmanager.cpp
  libs/radcore/src/radtextdisplay/textdisplay.cpp
  libs/radcore/src/radmemorymonitor/memmonitorclient.cpp
  libs/radcore/src/radmemorymonitor/memmonitorclienthelp.cpp
  libs/radcore/src/radprofiler/profiler.cpp
  libs/radcore/src/radprofiler/profiler2.cpp
  libs/radcore/src/radprofiler/profilesample.cpp
  libs/radcore/src/radkey/radkey.cpp
  libs/radcore/src/raddebugcommunication/linux/dbgcomstub.cpp
  libs/radcore/src/radcontroller/linux/sdlcontroller.cpp
)
target_include_directories(radcore PRIVATE libs libs/radcore/inc code libs/radcore/src/pch)
if(SHAR_RAD_DEBUG)
  target_compile_definitions(radcore PRIVATE _DEBUG DEBUG RAD_WIN32 RAD_DEBUG)
else()
  target_compile_definitions(radcore PRIVATE RELEASE NDEBUG RAD_WIN32 RAD_RELEASE)
endif()

add_library(radmath STATIC
  libs/radmath/radmath/matrix.cpp
  libs/radmath/radmath/numerical.cpp
  libs/radmath/radmath/plane.cpp
  libs/radmath/radmath/quaternion.cpp
  libs/radmath/radmath/radmath.cpp
  libs/radmath/radmath/random.cpp
  libs/radmath/radmath/spline.cpp
  libs/radmath/radmath/triangle.cpp
  libs/radmath/radmath/trig.cpp
  libs/radmath/radmath/vector.cpp
)
target_include_directories(radmath PRIVATE libs libs/radmath)
if(SHAR_RAD_DEBUG)
  target_compile_definitions(radmath PRIVATE RAD_DEBUG _DEBUG RAD_WIN32 RAD_PC)
else()
  target_compile_definitions(radmath PRIVATE RAD_RELEASE NDEBUG RAD_WIN32 RAD_PC)
endif()

add_library(radmovie STATIC
  libs/radmovie/src/common/binkmovieplayer.cpp
  libs/radmovie/src/common/binkrenderstrategy.cpp
  libs/radmovie/src/pch/pch.cpp
  libs/radmovie/src/linux/binkffmpeg.cpp
  libs/radmovie/src/linux/binkvideotexture.cpp
)
target_include_directories(radmovie PRIVATE libs/radmovie/src/linux libs libs/radmovie/inc libs/radcore/inc libs/radsound/inc libs/pure3d/p3d libs/pure3d libs/radmath libs/radmath/radmath libs/radcontent/inc code libs/radmovie/src/pch)
if(SHAR_RAD_DEBUG)
  target_compile_definitions(radmovie PRIVATE _DEBUG RAD_DEBUG RAD_WIN32 RAD_PC RAD_TOOL)
else()
  target_compile_definitions(radmovie PRIVATE NDEBUG RELEASE RAD_RELEASE RAD_WIN32 RAD_PC RAD_TOOL)
endif()

add_library(radscript STATIC
  libs/radscript/src/script/remotescript.cpp
  libs/radscript/src/script/script.cpp
  libs/radscript/src/typeinfo/TypeInfoEnum.cpp
  libs/radscript/src/typeinfo/TypeInfoIntLiteral.cpp
  libs/radscript/src/typeinfo/TypeInfoParam.cpp
  libs/radscript/src/typeinfo/TypeInfoInstance.cpp
  libs/radscript/src/typeinfo/TypeInfoInterface.cpp
  libs/radscript/src/typeinfo/TypeInfoLoader.cpp
  libs/radscript/src/typeinfo/TypeInfoMethod.cpp
  libs/radscript/src/typeinfo/TypeInfoSystem.cpp
  libs/radscript/src/typeinfo/linux/linuxtypeinfovfcall.cpp
  libs/radscript/src/typeinfoutil/typeinfodistributor.cpp
  libs/radscript/src/typeinfoutil/typeinfoutil.cpp
  libs/radscript/src/factory/radfactory.cpp
  libs/radscript/src/namespace/namespace.cpp
  libs/radscript/src/pch/pch.cpp
)
target_include_directories(radscript PRIVATE libs libs/radscript/inc libs/radcore/inc code libs/radscript/src/pch)
if(SHAR_RAD_DEBUG)
  target_compile_definitions(radscript PRIVATE _DEBUG DEBUG RAD_WIN32 RAD_DEBUG)
else()
  target_compile_definitions(radscript PRIVATE NDEBUG RELEASE RAD_WIN32 RAD_RELEASE)
endif()

add_library(radsound STATIC
  libs/radsound/src/pch/pch.cpp
  libs/radsound/src/hal/common/audioformat.cpp
  libs/radsound/src/hal/common/banner.cpp
  libs/radsound/src/hal/common/memoryregion.cpp
  libs/radsound/src/hal/common/radsoundfile.cpp
  libs/radsound/src/hal/common/rolloff.cpp
  libs/radsound/src/radsound/buffereddatasource.cpp
  libs/radsound/src/radsound/clip.cpp
  libs/radsound/src/radsound/clipplayer.cpp
  libs/radsound/src/radsound/datacache.cpp
  libs/radsound/src/radsound/memorydatasource.cpp
  libs/radsound/src/radsound/memoryspaceobject.cpp
  libs/radsound/src/radsound/radicaladpcm.cpp
  libs/radsound/src/radsound/rsdfiledatasource.cpp
  libs/radsound/src/radsound/stitcheddatasource.cpp
  libs/radsound/src/radsound/streamplayer.cpp
  libs/radsound/src/common/radsoundobject.cpp
  libs/radsound/src/common/radsoundupdatableobject.cpp
  libs/radsound/src/math/radsoundmath.cpp
  libs/radsound/src/hal/linux/linuxhal.cpp
  libs/radsound/src/hal/win32/bufferloader.cpp
  libs/radsound/src/hal/common/softwarelistener.cpp
  libs/radsound/src/hal/common/softwarepositionalgroup.cpp
  libs/radsound/src/radsound/linux/oggdecoder.cpp
)
target_include_directories(radsound PRIVATE libs libs/radsound/src/common libs/radsound/inc libs/radcore/inc code libs/radsound/src/pch)
if(SHAR_RAD_DEBUG)
  target_compile_definitions(radsound PRIVATE _DEBUG DEBUG RAD_WIN32 RAD_DEBUG RAD_TOOL)
else()
  target_compile_definitions(radsound PRIVATE NDEBUG RELEASE RAD_WIN32 RAD_RELEASE RAD_TOOL)
endif()

add_library(scrooby STATIC
  libs/scrooby/src/FeApp.cpp
  libs/scrooby/src/FeBoundedDrawable.cpp
  libs/scrooby/src/FeDrawable.cpp
  libs/scrooby/src/FeEntity.cpp
  libs/scrooby/src/FeGroup.cpp
  libs/scrooby/src/FeLanguage.cpp
  libs/scrooby/src/FeLayer.cpp
  libs/scrooby/src/FeMovie.cpp
  libs/scrooby/src/FeOwner.cpp
  libs/scrooby/src/FePage.cpp
  libs/scrooby/src/FeParent.cpp
  libs/scrooby/src/FePolygon.cpp
  libs/scrooby/src/FeProject.cpp
  libs/scrooby/src/FePure3dObject.cpp
  libs/scrooby/src/FeScreen.cpp
  libs/scrooby/src/FeSprite.cpp
  libs/scrooby/src/FeText.cpp
  libs/scrooby/src/FeTextBible.cpp
  libs/scrooby/src/FeTextStyle.cpp
  libs/scrooby/src/scrooby/App.cpp
  libs/scrooby/src/FeChunkHandler.cpp
  libs/scrooby/src/FeLoaders.cpp
  libs/scrooby/src/utility/BufferReader.cpp
  libs/scrooby/src/xml/XMLParser.cpp
  libs/scrooby/src/xml/XMLTree.cpp
  libs/scrooby/src/utility/AsyncFileLoader.cpp
  libs/scrooby/src/utility/EnumConversion.cpp
  libs/scrooby/src/utility/debugMessages.cpp
  libs/scrooby/src/tLinearTable.cpp
  libs/scrooby/src/ResourceManager/FeResourceManager.cpp
  libs/scrooby/src/strings/UnicodeString.cpp
  libs/scrooby/src/strings/pcstring.cpp
  libs/scrooby/src/strings/stricmp.cpp
)
target_include_directories(scrooby PRIVATE libs libs/radmath libs/pure3d libs/radcore/inc libs/scrooby/inc libs/scrooby/src libs/radcontent/inc code)
if(SHAR_RAD_DEBUG)
  target_compile_definitions(scrooby PRIVATE SCROOBY_RUNTIME RAD_PC RAD_WIN32 RAD_DEBUG)
else()
  target_compile_definitions(scrooby PRIVATE NDEBUG SCROOBY_RUNTIME RAD_PC RAD_WIN32 RAD_RELEASE)
endif()

add_library(sim STATIC
  libs/sim/simcollision/collision.cpp
  libs/sim/simcollision/collisionanalyser.cpp
  libs/sim/simcollision/collisionanalyserdata.cpp
  libs/sim/simcollision/collisionanalyserdataUID.cpp
  libs/sim/simcollision/collisionanalyserevent.cpp
  libs/sim/simcollision/collisionanalyserinfo.cpp
  libs/sim/simcollision/collisionanalysertranslator.cpp
  libs/sim/simcollision/collisiondetector.cpp
  libs/sim/simcollision/collisiondisplay.cpp
  libs/sim/simcollision/collisionmanager.cpp
  libs/sim/simcollision/collisionobject.cpp
  libs/sim/simcollision/collisionvolume.cpp
  libs/sim/simcollision/impulsebasedcollisionsolver.cpp
  libs/sim/simcollision/proximitydetection.cpp
  libs/sim/simcollision/subcollisiondetector.cpp
  libs/sim/simcommon/arraymath.cpp
  libs/sim/simcommon/dline2.cpp
  libs/sim/simcommon/impulselink.cpp
  libs/sim/simcommon/kalmann.cpp
  libs/sim/simcommon/largesymmetricmatrix.cpp
  libs/sim/simcommon/physicsproperties.cpp
  libs/sim/simcommon/sbmatrix.cpp
  libs/sim/simcommon/simconstraint.cpp
  libs/sim/simcommon/simenvironment.cpp
  libs/sim/simcommon/simmath.cpp
  libs/sim/simcommon/simstate.cpp
  libs/sim/simcommon/simstatearticulated.cpp
  libs/sim/simcommon/simstateflexible.cpp
  libs/sim/simcommon/simstatetarget.cpp
  libs/sim/simcommon/simtarget.cpp
  libs/sim/simcommon/simulatedobject.cpp
  libs/sim/simcommon/simutility.cpp
  libs/sim/simcommon/skeletoninfo.cpp
  libs/sim/simcommon/symmatrix.cpp
  libs/sim/simcommon/tlist.cpp
  libs/sim/simcommon/trackerjointmodifier.cpp
  libs/sim/simcommon/trajectoryextrapolator.cpp
  libs/sim/simphysics/articulatedphysicsobject.cpp
  libs/sim/simphysics/physicsjoint.cpp
  libs/sim/simphysics/physicsobject.cpp
  libs/sim/simphysics/restingdetector.cpp
  libs/sim/simphysics/virtualcm.cpp
)
target_include_directories(sim PRIVATE libs libs/sim libs/pure3d libs/radmath libs/radcontent/inc libs/poser/inc libs/radcore/inc code)
if(SHAR_RAD_DEBUG)
  target_compile_definitions(sim PRIVATE _DEBUG PNG_USER_MEM_SUPPORTED RAD_DEBUG RAD_PC RAD_WIN32)
else()
  target_compile_definitions(sim PRIVATE NDEBUG PNG_USER_MEM_SUPPORTED RAD_RELEASE RAD_PC RAD_WIN32)
endif()

add_library(poser STATIC
  libs/poser/src/joint.cpp
  libs/poser/src/pose.cpp
  libs/poser/src/posedriver.cpp
  libs/poser/src/poseengine.cpp
  libs/poser/src/transform.cpp
)
target_include_directories(poser PRIVATE libs libs/poser/inc libs/pure3d libs/radmath libs/radcore/inc libs/radcontent/inc code)
if(SHAR_RAD_DEBUG)
  target_compile_definitions(poser PRIVATE _DEBUG RAD_DEBUG RAD_WIN32 RAD_PC)
else()
  target_compile_definitions(poser PRIVATE NDEBUG RAD_RELEASE RAD_WIN32 RAD_PC)
endif()

add_library(radmusic STATIC
  libs/radmusic/src/pch/pch.cpp
  libs/radmusic/src/radmusic/framework/framework.cpp
  libs/radmusic/src/radmusic/schema/schema_util.cpp
  libs/radmusic/src/radmusic/resource/resource_manager.cpp
  libs/radmusic/src/radmusic/music/music_composition.cpp
  libs/radmusic/src/radmusic/music/music_engine.cpp
  libs/radmusic/src/radmusic/music/music_engine_state_fade.cpp
  libs/radmusic/src/radmusic/music/music_engine_state_steady.cpp
  libs/radmusic/src/radmusic/music/music_engine_state_stitch.cpp
  libs/radmusic/src/radmusic/music/music_engine_state_stopped.cpp
  libs/radmusic/src/radmusic/music/music_performance.cpp
  libs/radmusic/src/radmusic/sequence/sequence_player.cpp
  libs/radmusic/src/radmusic/sequence/sequence_region.cpp
  libs/radmusic/src/radmusic/sequence/sequence_stream_graph.cpp
  libs/radmusic/src/memory/memory.cpp
  libs/radmusic/src/ods/ods.cpp
  libs/radmusic/src/ods/ods_codegen.cpp
  libs/radmusic/src/ods/ods_memory.cpp
  libs/radmusic/src/ods/ods_parser.cpp
  libs/radmusic/src/ods/ods_util.cpp
)
target_include_directories(radmusic PRIVATE libs libs/radsound/inc libs/radcore/inc libs/radmusic/src libs/radmusic/inc libs/radcontent/inc code libs/radmusic/src/pch)
if(SHAR_RAD_DEBUG)
  target_compile_definitions(radmusic PRIVATE _DEBUG RAD_WIN32 RAD_DEBUG RAD_TOOL)
else()
  target_compile_definitions(radmusic PRIVATE NDEBUG RELEASE RAD_WIN32 RAD_RELEASE RAD_TOOL)
endif()

# Win32 API subset implemented on POSIX (threads/sync/timers); linked after the libraries using it
add_library(shar_compat STATIC port/compat/win32_threads.cpp port/compat/win32_misc.cpp port/compat/pddi_heap.cpp port/compat/shar_mods.cpp port/compat/shar_modlua.cpp port/compat/shar_modshops.cpp port/compat/shar_modcars.cpp port/compat/shar_modinteriors.cpp port/compat/shar_modroads.cpp port/compat/shar_modaudio.cpp port/compat/shar_modbonus.cpp port/compat/shar_modshaders.cpp port/compat/shar_modcharacters.cpp port/compat/shar_modtraffic.cpp port/compat/shar_modcards.cpp port/compat/shar_moddutch.cpp port/compat/shar_crash.cpp)
# the renderer allocates from its own heap, as pddidx8.dll did on Windows (port/compat/pddi_heap.cpp)
if(SHAR_64BIT)
  set(SHAR_NEW_SYM m)
else()
  set(SHAR_NEW_SYM j)
endif()
add_custom_command(TARGET pddigl POST_BUILD COMMAND objcopy --redefine-sym _Znw${SHAR_NEW_SYM}=pddi_heap_new --redefine-sym _Zna${SHAR_NEW_SYM}=pddi_heap_new_array --redefine-sym _ZdlPv=pddi_heap_delete --redefine-sym _ZdaPv=pddi_heap_delete_array $<TARGET_FILE:pddigl> VERBATIM)
target_include_directories(shar_compat PRIVATE port/compat port/third_party/lua)
target_link_libraries(srr2 PRIVATE -Wl,--start-group choreo libpng pddigl pure3d zlib radcontent radcore radmath radmovie radscript radsound scrooby sim poser radmusic shar_compat lua -Wl,--end-group shar_glslang SDL2 GL openal avformat avcodec swscale swresample avutil pthread dl)
