mirror of
https://github.com/isledecomp/isle-portable.git
synced 2026-01-11 10:31:16 +00:00
728 lines
29 KiB
CMake
728 lines
29 KiB
CMake
cmake_minimum_required(VERSION 3.25...4.0 FATAL_ERROR)
|
|
|
|
project(isle LANGUAGES CXX C VERSION 0.1)
|
|
|
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
|
|
|
|
include(CheckCXXSourceCompiles)
|
|
include(CMakeDependentOption)
|
|
include(CMakePushCheckState)
|
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
|
|
|
if (NOT MINGW)
|
|
set(NOT_MINGW ON)
|
|
else()
|
|
set(NOT_MINGW OFF)
|
|
endif()
|
|
|
|
find_program(SDL_SHADERCROSS_BIN NAMES "shadercross")
|
|
find_package(Python3 COMPONENTS Interpreter)
|
|
|
|
option(ISLE_BUILD_APP "Build isle application" ON)
|
|
option(ISLE_ASAN "Enable Address Sanitizer" OFF)
|
|
option(ISLE_UBSAN "Enable Undefined Behavior Sanitizer" OFF)
|
|
option(ISLE_WERROR "Treat warnings as errors" OFF)
|
|
option(ISLE_DEBUG "Enable imgui debug" ON)
|
|
cmake_dependent_option(ISLE_USE_DX5 "Build with internal DirectX 5 SDK" "${NOT_MINGW}" "WIN32;CMAKE_SIZEOF_VOID_P EQUAL 4" OFF)
|
|
cmake_dependent_option(ISLE_MINIWIN "Use miniwin and minimfc" ON "NOT ISLE_USE_DX5" OFF)
|
|
cmake_dependent_option(ISLE_BUILD_CONFIG "Build CONFIG.EXE application" ON "MSVC OR ISLE_MINIWIN" OFF)
|
|
cmake_dependent_option(ISLE_COMPILE_SHADERS "Compile shaders" ON "SDL_SHADERCROSS_BIN;TARGET Python3::Interpreter" OFF)
|
|
option(CMAKE_POSITION_INDEPENDENT_CODE "Build with -fPIC" ON)
|
|
option(ENABLE_CLANG_TIDY "Enable clang-tidy")
|
|
option(DOWNLOAD_DEPENDENCIES "Download dependencies" ON)
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}" CACHE PATH "Directory where to put executables and dll")
|
|
|
|
message(STATUS "Isle app: ${ISLE_BUILD_APP}")
|
|
message(STATUS "Config app: ${ISLE_BUILD_CONFIG}")
|
|
message(STATUS "Internal DirectX5 SDK: ${ISLE_USE_DX5}")
|
|
message(STATUS "Internal miniwin: ${ISLE_MINIWIN}")
|
|
message(STATUS "Isle debugging: ${ISLE_DEBUG}")
|
|
message(STATUS "Compile shaders: ${ISLE_COMPILE_SHADERS}")
|
|
|
|
if (DOWNLOAD_DEPENDENCIES)
|
|
# FetchContent downloads and configures dependencies
|
|
include(FetchContent)
|
|
FetchContent_Declare(
|
|
SDL3
|
|
GIT_REPOSITORY "https://github.com/libsdl-org/SDL.git"
|
|
GIT_TAG "main"
|
|
EXCLUDE_FROM_ALL
|
|
)
|
|
FetchContent_MakeAvailable(SDL3)
|
|
|
|
FetchContent_Declare(
|
|
iniparser
|
|
GIT_REPOSITORY "https://gitlab.com/iniparser/iniparser.git"
|
|
GIT_TAG "main"
|
|
EXCLUDE_FROM_ALL
|
|
)
|
|
set(BUILD_DOCS off)
|
|
set(BUILD_SHARED_LIBS off)
|
|
FetchContent_MakeAvailable(iniparser)
|
|
else()
|
|
# find_package looks for already-installed system packages.
|
|
# Configure with `-DCMAKE_PREFIX_PATH="/path/to/package1;/path/to/package2"`
|
|
# to add search paths.
|
|
find_package(SDL3 CONFIG REQUIRED)
|
|
|
|
find_package(iniparser CONFIG COMPONENTS static)
|
|
if (NOT TARGET iniparser-static)
|
|
find_package(iniparser REQUIRED MODULE COMPONENTS static)
|
|
endif()
|
|
endif()
|
|
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
if (ENABLE_CLANG_TIDY)
|
|
find_program(CLANG_TIDY_BIN NAMES "clang-tidy" ENV "LLVM_ROOT" REQUIRED)
|
|
set(CMAKE_C_CLANG_TIDY "${CLANG_TIDY_BIN}")
|
|
set(CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY_BIN}")
|
|
endif()
|
|
|
|
if (ISLE_ASAN)
|
|
add_compile_options(-fsanitize=address -fno-omit-frame-pointer)
|
|
add_link_options(-fsanitize=address)
|
|
endif()
|
|
|
|
if (ISLE_UBSAN)
|
|
add_compile_options(-fsanitize=undefined -fno-sanitize-recover=undefined)
|
|
add_link_options(-fsanitize=undefined)
|
|
endif()
|
|
|
|
set(miniwin_sdl3gpu_sources
|
|
miniwin/sdl3gpu/src/miniwin_ddpalette.cpp
|
|
miniwin/sdl3gpu/src/miniwin_ddsurface.cpp
|
|
miniwin/sdl3gpu/src/miniwin_ddraw.cpp
|
|
miniwin/sdl3gpu/src/miniwin_d3drm.cpp
|
|
miniwin/sdl3gpu/src/miniwin_d3drmdevice.cpp
|
|
miniwin/sdl3gpu/src/miniwin_d3drmframe.cpp
|
|
miniwin/sdl3gpu/src/miniwin_d3drmlight.cpp
|
|
miniwin/sdl3gpu/src/miniwin_d3drmmesh.cpp
|
|
miniwin/sdl3gpu/src/miniwin_d3drmtexture.cpp
|
|
miniwin/sdl3gpu/src/miniwin_d3drmviewport.cpp
|
|
)
|
|
set_property(SOURCE ${miniwin_sdl3gpu_sources} APPEND PROPERTY INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/miniwin/sdl3gpu/shaders/generated")
|
|
|
|
add_library(miniwin STATIC EXCLUDE_FROM_ALL
|
|
miniwin/common/src/d3drm.cpp
|
|
miniwin/common/src/miniwin.cpp
|
|
${miniwin_sdl3gpu_sources}
|
|
)
|
|
# Force reported render mods from MiniWin
|
|
target_compile_definitions(miniwin PRIVATE MINIWIN_PIXELFORMAT=SDL_PIXELFORMAT_RGB565)
|
|
target_include_directories(miniwin PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/miniwin/include>")
|
|
target_include_directories(miniwin PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/miniwin/common/include")
|
|
target_include_directories(miniwin PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/miniwin/sdl3gpu/include")
|
|
target_compile_definitions(miniwin PUBLIC "MINIWIN")
|
|
target_link_libraries(miniwin PRIVATE SDL3::SDL3)
|
|
|
|
set(shader_src_dir "${CMAKE_CURRENT_SOURCE_DIR}/miniwin/sdl3gpu/shaders/src")
|
|
set(shader_gen_dir "${CMAKE_CURRENT_SOURCE_DIR}/miniwin/sdl3gpu/shaders/generated")
|
|
set(py_gencshadersource "${CMAKE_CURRENT_SOURCE_DIR}/miniwin/sdl3gpu/shaders/gencshadersource.py")
|
|
set(miniwin_shaders
|
|
"${shader_src_dir}/PositionColor.vert.hlsl"
|
|
"${shader_src_dir}/SolidColor.frag.hlsl"
|
|
)
|
|
if(ISLE_COMPILE_SHADERS)
|
|
set(compiled_bindir "${CMAKE_CURRENT_BINARY_DIR}/shaders/compiled")
|
|
set(compiled_srcdir "${CMAKE_CURRENT_SOURCE_DIR}/miniwin/sdl3gpu/shaders/compiled")
|
|
set(generated_dirs "${compiled_srcdir}" "${compiled_bindir}/dxil" "${compiled_bindir}/msl" "${compiled_bindir}/spirv")
|
|
add_custom_command(OUTPUT ${generated_dirs}
|
|
COMMAND "${CMAKE_COMMAND}" -E make_directory ${generated_dirs})
|
|
add_custom_target(create-generated-shader-directories DEPENDS ${generated_dirs})
|
|
endif()
|
|
target_sources(miniwin PRIVATE ${py_gencshadersource})
|
|
set(shader_variables )
|
|
set(shader_headers )
|
|
set(shader_stages )
|
|
foreach(shader_src IN LISTS miniwin_shaders)
|
|
get_filename_component(filename_wle "${shader_src}" NAME_WLE)
|
|
get_filename_component(shader_name "${filename_wle}" NAME_WLE)
|
|
get_filename_component(src_format_ext "${shader_src}" LAST_EXT)
|
|
get_filename_component(src_stage_ext "${filename_wle}" LAST_EXT)
|
|
string(MAKE_C_IDENTIFIER "${filename_wle}" shader_variable)
|
|
set(shader_json "${shader_src}.json")
|
|
if(src_format_ext STREQUAL ".hlsl")
|
|
set(src_format "HLSL")
|
|
else()
|
|
message(FATAL_ERROR "Unknown source format (${src_format_ext})")
|
|
endif()
|
|
if(src_stage_ext STREQUAL ".vert")
|
|
set(shader_stage "vertex")
|
|
elseif(src_stage_ext STREQUAL ".frag")
|
|
set(shader_stage "fragment")
|
|
elseif(src_stage_ext STREQUAL ".comp")
|
|
set(shader_stage "compute")
|
|
message(FATAL_ERROR "Compute shaders are not (yet) supported")
|
|
else()
|
|
message(FATAL_ERROR "Unknown stage (${src_stage_ext})")
|
|
endif()
|
|
set(dxil "${compiled_bindir}/dxil/${filename_wle}.dxil")
|
|
set(msl "${compiled_bindir}/msl/${filename_wle}.msl")
|
|
set(spirv "${compiled_bindir}/spirv/${filename_wle}.spv")
|
|
set(shader_filename "${filename_wle}.h")
|
|
set(shader_header "${shader_gen_dir}/${shader_filename}")
|
|
if(ISLE_COMPILE_SHADERS)
|
|
add_custom_command(OUTPUT "${dxil}"
|
|
COMMAND "${SDL_SHADERCROSS_BIN}" "${shader_src}" -o "${dxil}"
|
|
-s "${src_format}" -d "DXIL" -t "${shader_stage}"
|
|
DEPENDS create-generated-shader-directories "${shader_src}")
|
|
add_custom_command(OUTPUT "${msl}"
|
|
COMMAND "${SDL_SHADERCROSS_BIN}" "${shader_src}" -o "${msl}"
|
|
-s "${src_format}" -d "MSL" -t "${shader_stage}"
|
|
DEPENDS create-generated-shader-directories "${shader_src}")
|
|
add_custom_command(OUTPUT "${spirv}"
|
|
COMMAND "${SDL_SHADERCROSS_BIN}" "${shader_src}" -o "${spirv}"
|
|
-s "${src_format}" -d "SPIRV" -t "${shader_stage}"
|
|
DEPENDS create-generated-shader-directories "${shader_src}")
|
|
add_custom_command(OUTPUT "${shader_header}"
|
|
COMMAND Python3::Interpreter "${py_gencshadersource}" "header" "--output" "${shader_header}"
|
|
"--stage" "${shader_stage}" "--variable" "${shader_variable}"
|
|
"--dxil" "${dxil}" "--msl" "${msl}" "--spirv" "${spirv}"
|
|
DEPENDS "${py_gencshadersource}" "${dxil}" "${msl}" "${spirv}")
|
|
endif()
|
|
target_sources(miniwin PRIVATE "${shader_header}")
|
|
list(APPEND shader_names "${shader_name}")
|
|
list(APPEND shader_variables "${shader_variable}")
|
|
list(APPEND shader_headers "${shader_header}")
|
|
list(APPEND shader_stages "${shader_stage}")
|
|
list(APPEND shader_jsons "${shader_json}")
|
|
endforeach()
|
|
|
|
set(index_cpp "${shader_gen_dir}/ShaderIndex.cpp")
|
|
set(index_h "${shader_gen_dir}/ShaderIndex.h")
|
|
|
|
if(ISLE_COMPILE_SHADERS)
|
|
add_custom_command(OUTPUT "${index_h}" "${index_cpp}"
|
|
COMMAND Python3::Interpreter "${py_gencshadersource}" "index"
|
|
"--output" "${index_cpp}"
|
|
"--header" "${index_h}"
|
|
"--shader-names" ${shader_names}
|
|
"--shader-variables" ${shader_variables}
|
|
"--shader-headers" ${shader_headers}
|
|
"--shader-stages" ${shader_stages}
|
|
"--shader-jsons" ${shader_jsons}
|
|
DEPENDS "${py_gencshadersource}" ${shader_headers} ${shader_jsons})
|
|
endif()
|
|
target_sources(miniwin PRIVATE "${index}" "${index_cpp}")
|
|
|
|
add_library(minimfc STATIC EXCLUDE_FROM_ALL
|
|
miniwin/minimfc/src/minimfc.cpp
|
|
)
|
|
target_include_directories(minimfc PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/miniwin/minimfc/include>")
|
|
target_include_directories(minimfc PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/miniwin/include")
|
|
target_include_directories(minimfc PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/miniwin/common/include")
|
|
target_compile_definitions(minimfc PUBLIC "MINIMFC")
|
|
target_link_libraries(minimfc PRIVATE SDL3::SDL3 miniwin)
|
|
|
|
set(isle_targets)
|
|
|
|
function(add_cxx_warning WARNING)
|
|
if (ISLE_WERROR)
|
|
set(compiler_option "-Werror=${WARNING}")
|
|
else()
|
|
set(compiler_option "-W${WARNING}")
|
|
endif()
|
|
string(MAKE_C_IDENTIFIER "COMPILER_SUPPORTS${compiler_option}" varname)
|
|
|
|
cmake_push_check_state(RESET)
|
|
set(CMAKE_REQUIRED_FLAGS "${compiler_option} ")
|
|
if (MSVC)
|
|
string(APPEND CMAKE_REQUIRED_FLAGS "/WX")
|
|
else()
|
|
string(APPEND CMAKE_REQUIRED_FLAGS "-Werror")
|
|
endif()
|
|
check_cxx_source_compiles("int main() { return 0; }" ${varname})
|
|
cmake_pop_check_state()
|
|
|
|
if (${varname})
|
|
add_compile_options(${compiler_option})
|
|
endif()
|
|
endfunction()
|
|
|
|
add_subdirectory(3rdparty EXCLUDE_FROM_ALL SYSTEM)
|
|
|
|
add_cxx_warning(parentheses)
|
|
|
|
add_library(DirectX5::DirectX5 INTERFACE IMPORTED)
|
|
target_include_directories(DirectX5::DirectX5 INTERFACE "${CMAKE_SOURCE_DIR}/3rdparty/dx5/inc")
|
|
target_link_directories(DirectX5::DirectX5 INTERFACE "${CMAKE_SOURCE_DIR}/3rdparty/dx5/lib")
|
|
|
|
add_library(Vec::Vec INTERFACE IMPORTED)
|
|
target_include_directories(Vec::Vec INTERFACE "${CMAKE_SOURCE_DIR}/3rdparty/vec")
|
|
|
|
add_library(lego1 SHARED
|
|
LEGO1/main.cpp
|
|
)
|
|
target_precompile_headers(lego1 PRIVATE "LEGO1/lego1_pch.h")
|
|
set_property(TARGET lego1 PROPERTY DEFINE_SYMBOL "LEGO1_DLL")
|
|
target_include_directories(lego1 PUBLIC "$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/util>")
|
|
target_include_directories(lego1 PUBLIC "$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/LEGO1>")
|
|
target_include_directories(lego1 PUBLIC "$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/LEGO1/omni/include>")
|
|
target_include_directories(lego1 PUBLIC "$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/LEGO1/lego/sources>")
|
|
target_include_directories(lego1 PUBLIC "$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/LEGO1/lego/legoomni/include>")
|
|
target_include_directories(lego1 PUBLIC "$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/LEGO1/lego/legoomni/include/actions>")
|
|
target_link_libraries(lego1 PRIVATE SDL3::SDL3)
|
|
target_link_libraries(lego1 PUBLIC SDL3::Headers)
|
|
target_link_libraries(lego1 PRIVATE $<$<BOOL:${ISLE_USE_DX5}>:DirectX5::DirectX5>)
|
|
if(WIN32)
|
|
set_property(TARGET lego1 PROPERTY PREFIX "")
|
|
endif()
|
|
|
|
target_compile_definitions(lego1 PRIVATE $<$<BOOL:${ISLE_USE_DX5}>:DIRECTX5_SDK>)
|
|
list(APPEND isle_targets lego1)
|
|
|
|
# tglrl sources
|
|
target_sources(lego1 PRIVATE
|
|
LEGO1/tgl/d3drm/camera.cpp
|
|
LEGO1/tgl/d3drm/device.cpp
|
|
LEGO1/tgl/d3drm/group.cpp
|
|
LEGO1/tgl/d3drm/light.cpp
|
|
LEGO1/tgl/d3drm/mesh.cpp
|
|
LEGO1/tgl/d3drm/meshbuilder.cpp
|
|
LEGO1/tgl/d3drm/renderer.cpp
|
|
LEGO1/tgl/d3drm/texture.cpp
|
|
LEGO1/tgl/d3drm/view.cpp
|
|
)
|
|
target_include_directories(lego1 PUBLIC "${CMAKE_SOURCE_DIR}/LEGO1")
|
|
|
|
# realtime sources
|
|
target_sources(lego1 PRIVATE
|
|
LEGO1/realtime/orientableroi.cpp
|
|
LEGO1/realtime/realtime.cpp
|
|
LEGO1/realtime/realtimeview.cpp
|
|
)
|
|
target_include_directories(lego1 PRIVATE "${CMAKE_SOURCE_DIR}/LEGO1")
|
|
target_link_libraries(lego1 PRIVATE Vec::Vec)
|
|
|
|
# viewmanager sources
|
|
target_sources(lego1 PRIVATE
|
|
LEGO1/viewmanager/viewlod.cpp
|
|
LEGO1/viewmanager/viewlodlist.cpp
|
|
LEGO1/viewmanager/viewmanager.cpp
|
|
LEGO1/viewmanager/viewroi.cpp
|
|
)
|
|
target_include_directories(lego1 PRIVATE "${CMAKE_SOURCE_DIR}/LEGO1")
|
|
target_link_libraries(lego1 PRIVATE Vec::Vec)
|
|
|
|
# mxdirectx sources
|
|
target_sources(lego1 PRIVATE
|
|
LEGO1/mxdirectx/mxdirect3d.cpp
|
|
LEGO1/mxdirectx/mxdirectdraw.cpp
|
|
LEGO1/mxdirectx/mxdirectxinfo.cpp
|
|
LEGO1/mxdirectx/legodxinfo.cpp
|
|
)
|
|
target_include_directories(lego1 PRIVATE "${CMAKE_SOURCE_DIR}/LEGO1")
|
|
if (WIN32)
|
|
target_link_libraries(lego1 PRIVATE ddraw)
|
|
endif()
|
|
|
|
# roi sources
|
|
target_sources(lego1 PRIVATE
|
|
LEGO1/lego/sources/roi/legolod.cpp
|
|
LEGO1/lego/sources/roi/legoroi.cpp
|
|
)
|
|
target_include_directories(lego1 PRIVATE "${CMAKE_SOURCE_DIR}/LEGO1/omni/include" "${CMAKE_SOURCE_DIR}/LEGO1" "${CMAKE_SOURCE_DIR}/LEGO1/lego/sources")
|
|
target_link_libraries(lego1 PRIVATE Vec::Vec)
|
|
|
|
# geom sources
|
|
target_sources(lego1 PRIVATE
|
|
LEGO1/lego/sources/geom/legoedge.cpp
|
|
LEGO1/lego/sources/geom/legoorientededge.cpp
|
|
LEGO1/lego/sources/geom/legoweedge.cpp
|
|
LEGO1/lego/sources/geom/legowegedge.cpp
|
|
)
|
|
target_include_directories(lego1 PRIVATE "${CMAKE_SOURCE_DIR}/LEGO1/omni/include" "${CMAKE_SOURCE_DIR}/LEGO1" "${CMAKE_SOURCE_DIR}/LEGO1/lego/sources")
|
|
|
|
# shape sources
|
|
target_sources(lego1 PRIVATE
|
|
LEGO1/lego/sources/shape/legocolor.cpp
|
|
LEGO1/lego/sources/shape/legobox.cpp
|
|
LEGO1/lego/sources/shape/legomesh.cpp
|
|
LEGO1/lego/sources/shape/legosphere.cpp
|
|
LEGO1/lego/sources/shape/legovertex.cpp
|
|
)
|
|
target_include_directories(lego1 PRIVATE "${CMAKE_SOURCE_DIR}/LEGO1/omni/include" "${CMAKE_SOURCE_DIR}/LEGO1" "${CMAKE_SOURCE_DIR}/LEGO1/lego/sources")
|
|
|
|
# anim sources
|
|
target_sources(lego1 PRIVATE
|
|
LEGO1/lego/sources/anim/legoanim.cpp
|
|
)
|
|
target_include_directories(lego1 PRIVATE "${CMAKE_SOURCE_DIR}/LEGO1/omni/include" "${CMAKE_SOURCE_DIR}/LEGO1" "${CMAKE_SOURCE_DIR}/LEGO1/lego/sources")
|
|
|
|
# misc sources
|
|
target_sources(lego1 PRIVATE
|
|
LEGO1/lego/sources/misc/legocontainer.cpp
|
|
LEGO1/lego/sources/misc/legoimage.cpp
|
|
LEGO1/lego/sources/misc/legostorage.cpp
|
|
LEGO1/lego/sources/misc/legotexture.cpp
|
|
LEGO1/lego/sources/misc/legotree.cpp
|
|
LEGO1/lego/sources/misc/legounknown.cpp
|
|
)
|
|
target_include_directories(lego1 PRIVATE "${CMAKE_SOURCE_DIR}/LEGO1/omni/include" "${CMAKE_SOURCE_DIR}/LEGO1" "${CMAKE_SOURCE_DIR}/LEGO1/lego/sources")
|
|
|
|
# 3dmanager sources
|
|
target_sources(lego1 PRIVATE
|
|
LEGO1/lego/sources/3dmanager/lego3dmanager.cpp
|
|
LEGO1/lego/sources/3dmanager/lego3dview.cpp
|
|
LEGO1/lego/sources/3dmanager/legoview1.cpp
|
|
LEGO1/lego/sources/3dmanager/tglsurface.cpp
|
|
)
|
|
target_include_directories(lego1 PRIVATE "${CMAKE_SOURCE_DIR}/LEGO1")
|
|
target_link_libraries(lego1 PRIVATE Vec::Vec)
|
|
|
|
# omni sources
|
|
target_sources(lego1 PRIVATE
|
|
LEGO1/omni/src/action/mxdsaction.cpp
|
|
LEGO1/omni/src/action/mxdsanim.cpp
|
|
LEGO1/omni/src/action/mxdsevent.cpp
|
|
LEGO1/omni/src/action/mxdsmediaaction.cpp
|
|
LEGO1/omni/src/action/mxdsmultiaction.cpp
|
|
LEGO1/omni/src/action/mxdsobjectaction.cpp
|
|
LEGO1/omni/src/action/mxdsobject.cpp
|
|
LEGO1/omni/src/action/mxdsparallelaction.cpp
|
|
LEGO1/omni/src/action/mxdsselectaction.cpp
|
|
LEGO1/omni/src/action/mxdsserialaction.cpp
|
|
LEGO1/omni/src/action/mxdssound.cpp
|
|
LEGO1/omni/src/action/mxdsstill.cpp
|
|
LEGO1/omni/src/action/mxdsstreamingaction.cpp
|
|
LEGO1/omni/src/audio/mxaudiomanager.cpp
|
|
LEGO1/omni/src/audio/mxaudiopresenter.cpp
|
|
LEGO1/omni/src/audio/mxsoundmanager.cpp
|
|
LEGO1/omni/src/audio/mxsoundpresenter.cpp
|
|
LEGO1/omni/src/audio/mxwavepresenter.cpp
|
|
LEGO1/omni/src/common/mxatom.cpp
|
|
LEGO1/omni/src/common/mxcompositepresenter.cpp
|
|
LEGO1/omni/src/common/mxcore.cpp
|
|
LEGO1/omni/src/common/mxdebug.cpp
|
|
LEGO1/omni/src/common/mxmediamanager.cpp
|
|
LEGO1/omni/src/common/mxmediapresenter.cpp
|
|
LEGO1/omni/src/common/mxmisc.cpp
|
|
LEGO1/omni/src/common/mxobjectfactory.cpp
|
|
LEGO1/omni/src/common/mxpresenter.cpp
|
|
LEGO1/omni/src/common/mxstring.cpp
|
|
LEGO1/omni/src/common/mxticklemanager.cpp
|
|
LEGO1/omni/src/common/mxtimer.cpp
|
|
LEGO1/omni/src/common/mxutilities.cpp
|
|
LEGO1/omni/src/common/mxvariable.cpp
|
|
LEGO1/omni/src/common/mxvariabletable.cpp
|
|
LEGO1/omni/src/entity/mxentity.cpp
|
|
LEGO1/omni/src/event/mxeventmanager.cpp
|
|
LEGO1/omni/src/event/mxeventpresenter.cpp
|
|
LEGO1/omni/src/main/mxomni.cpp
|
|
LEGO1/omni/src/main/mxomnicreateflags.cpp
|
|
LEGO1/omni/src/main/mxomnicreateparam.cpp
|
|
LEGO1/omni/src/notify/mxactionnotificationparam.cpp
|
|
LEGO1/omni/src/notify/mxnotificationmanager.cpp
|
|
LEGO1/omni/src/notify/mxnotificationparam.cpp
|
|
LEGO1/omni/src/stream/mxdiskstreamcontroller.cpp
|
|
LEGO1/omni/src/stream/mxdiskstreamprovider.cpp
|
|
LEGO1/omni/src/stream/mxdsbuffer.cpp
|
|
LEGO1/omni/src/stream/mxdschunk.cpp
|
|
LEGO1/omni/src/stream/mxdsfile.cpp
|
|
LEGO1/omni/src/stream/mxdssubscriber.cpp
|
|
LEGO1/omni/src/stream/mxio.cpp
|
|
LEGO1/omni/src/stream/mxramstreamcontroller.cpp
|
|
LEGO1/omni/src/stream/mxramstreamprovider.cpp
|
|
LEGO1/omni/src/stream/mxstreamchunk.cpp
|
|
LEGO1/omni/src/stream/mxstreamcontroller.cpp
|
|
LEGO1/omni/src/stream/mxstreamer.cpp
|
|
LEGO1/omni/src/system/mxautolock.cpp
|
|
LEGO1/omni/src/system/mxcriticalsection.cpp
|
|
LEGO1/omni/src/system/mxscheduler.cpp
|
|
LEGO1/omni/src/system/mxsemaphore.cpp
|
|
LEGO1/omni/src/system/mxthread.cpp
|
|
LEGO1/omni/src/system/mxticklethread.cpp
|
|
LEGO1/omni/src/video/flic.cpp
|
|
LEGO1/omni/src/video/mxbitmap.cpp
|
|
LEGO1/omni/src/video/mxdisplaysurface.cpp
|
|
LEGO1/omni/src/video/mxflcpresenter.cpp
|
|
LEGO1/omni/src/video/mxloopingflcpresenter.cpp
|
|
LEGO1/omni/src/video/mxloopingsmkpresenter.cpp
|
|
LEGO1/omni/src/video/mxpalette.cpp
|
|
LEGO1/omni/src/video/mxregion.cpp
|
|
LEGO1/omni/src/video/mxsmk.cpp
|
|
LEGO1/omni/src/video/mxsmkpresenter.cpp
|
|
LEGO1/omni/src/video/mxstillpresenter.cpp
|
|
LEGO1/omni/src/video/mxvideomanager.cpp
|
|
LEGO1/omni/src/video/mxvideoparam.cpp
|
|
LEGO1/omni/src/video/mxvideoparamflags.cpp
|
|
LEGO1/omni/src/video/mxvideopresenter.cpp
|
|
)
|
|
target_include_directories(lego1 PRIVATE "${CMAKE_SOURCE_DIR}/LEGO1/omni/include" "${CMAKE_SOURCE_DIR}/LEGO1")
|
|
if (WIN32)
|
|
target_link_libraries(lego1 INTERFACE winmm)
|
|
endif()
|
|
target_link_libraries(lego1 PRIVATE libsmacker miniaudio)
|
|
target_include_directories(lego1 PUBLIC $<BUILD_INTERFACE:$<TARGET_PROPERTY:miniaudio,INTERFACE_INCLUDE_DIRECTORIES>>)
|
|
|
|
# lego1_impl sources
|
|
target_sources(lego1 PRIVATE
|
|
LEGO1/define.cpp
|
|
LEGO1/lego/legoomni/src/actors/act2actor.cpp
|
|
LEGO1/lego/legoomni/src/actors/act2genactor.cpp
|
|
LEGO1/lego/legoomni/src/actors/act3actors.cpp
|
|
LEGO1/lego/legoomni/src/actors/act3ammo.cpp
|
|
LEGO1/lego/legoomni/src/actors/ambulance.cpp
|
|
LEGO1/lego/legoomni/src/actors/bike.cpp
|
|
LEGO1/lego/legoomni/src/actors/buildingentity.cpp
|
|
LEGO1/lego/legoomni/src/actors/buildings.cpp
|
|
LEGO1/lego/legoomni/src/actors/bumpbouy.cpp
|
|
LEGO1/lego/legoomni/src/actors/doors.cpp
|
|
LEGO1/lego/legoomni/src/actors/dunebuggy.cpp
|
|
LEGO1/lego/legoomni/src/actors/helicopter.cpp
|
|
LEGO1/lego/legoomni/src/actors/isleactor.cpp
|
|
LEGO1/lego/legoomni/src/actors/islepathactor.cpp
|
|
LEGO1/lego/legoomni/src/actors/jetski.cpp
|
|
LEGO1/lego/legoomni/src/actors/jukeboxentity.cpp
|
|
LEGO1/lego/legoomni/src/actors/motorcycle.cpp
|
|
LEGO1/lego/legoomni/src/actors/pizza.cpp
|
|
LEGO1/lego/legoomni/src/actors/pizzeria.cpp
|
|
LEGO1/lego/legoomni/src/actors/racecar.cpp
|
|
LEGO1/lego/legoomni/src/actors/radio.cpp
|
|
LEGO1/lego/legoomni/src/actors/skateboard.cpp
|
|
LEGO1/lego/legoomni/src/actors/towtrack.cpp
|
|
LEGO1/lego/legoomni/src/audio/lego3dsound.cpp
|
|
LEGO1/lego/legoomni/src/audio/lego3dwavepresenter.cpp
|
|
LEGO1/lego/legoomni/src/audio/legocachsound.cpp
|
|
LEGO1/lego/legoomni/src/audio/legocachesoundmanager.cpp
|
|
LEGO1/lego/legoomni/src/audio/legoloadcachesoundpresenter.cpp
|
|
LEGO1/lego/legoomni/src/audio/legosoundmanager.cpp
|
|
LEGO1/lego/legoomni/src/audio/mxbackgroundaudiomanager.cpp
|
|
LEGO1/lego/legoomni/src/build/legocarbuild.cpp
|
|
LEGO1/lego/legoomni/src/build/legocarbuildpresenter.cpp
|
|
LEGO1/lego/legoomni/src/common/legoactioncontrolpresenter.cpp
|
|
LEGO1/lego/legoomni/src/common/legoactors.cpp
|
|
LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp
|
|
LEGO1/lego/legoomni/src/common/legoanimmmpresenter.cpp
|
|
LEGO1/lego/legoomni/src/common/legobuildingmanager.cpp
|
|
LEGO1/lego/legoomni/src/common/legocharactermanager.cpp
|
|
LEGO1/lego/legoomni/src/common/legogamestate.cpp
|
|
LEGO1/lego/legoomni/src/common/legoobjectfactory.cpp
|
|
LEGO1/lego/legoomni/src/common/legophoneme.cpp
|
|
LEGO1/lego/legoomni/src/common/legoplantmanager.cpp
|
|
LEGO1/lego/legoomni/src/common/legoplants.cpp
|
|
LEGO1/lego/legoomni/src/common/legostate.cpp
|
|
LEGO1/lego/legoomni/src/common/legotextureinfo.cpp
|
|
LEGO1/lego/legoomni/src/common/legoutils.cpp
|
|
LEGO1/lego/legoomni/src/common/legovariables.cpp
|
|
LEGO1/lego/legoomni/src/common/misc.cpp
|
|
LEGO1/lego/legoomni/src/common/mxcompositemediapresenter.cpp
|
|
LEGO1/lego/legoomni/src/common/mxcontrolpresenter.cpp
|
|
LEGO1/lego/legoomni/src/common/mxtransitionmanager.cpp
|
|
LEGO1/lego/legoomni/src/control/legocontrolmanager.cpp
|
|
LEGO1/lego/legoomni/src/control/legometerpresenter.cpp
|
|
LEGO1/lego/legoomni/src/entity/act2brick.cpp
|
|
LEGO1/lego/legoomni/src/entity/act2policestation.cpp
|
|
LEGO1/lego/legoomni/src/entity/legoactor.cpp
|
|
LEGO1/lego/legoomni/src/entity/legoactorpresenter.cpp
|
|
LEGO1/lego/legoomni/src/entity/legocameracontroller.cpp
|
|
LEGO1/lego/legoomni/src/entity/legoentity.cpp
|
|
LEGO1/lego/legoomni/src/entity/legoentitypresenter.cpp
|
|
LEGO1/lego/legoomni/src/entity/legolocations.cpp
|
|
LEGO1/lego/legoomni/src/entity/legonavcontroller.cpp
|
|
LEGO1/lego/legoomni/src/entity/legopovcontroller.cpp
|
|
LEGO1/lego/legoomni/src/entity/legoworld.cpp
|
|
LEGO1/lego/legoomni/src/entity/legoworldpresenter.cpp
|
|
LEGO1/lego/legoomni/src/input/legoinputmanager.cpp
|
|
LEGO1/lego/legoomni/src/main/legomain.cpp
|
|
LEGO1/lego/legoomni/src/main/scripts.cpp
|
|
LEGO1/lego/legoomni/src/paths/legoanimactor.cpp
|
|
LEGO1/lego/legoomni/src/paths/legoextraactor.cpp
|
|
LEGO1/lego/legoomni/src/paths/legopathactor.cpp
|
|
LEGO1/lego/legoomni/src/paths/legopathboundary.cpp
|
|
LEGO1/lego/legoomni/src/paths/legopathcontroller.cpp
|
|
LEGO1/lego/legoomni/src/paths/legopathpresenter.cpp
|
|
LEGO1/lego/legoomni/src/paths/legopathstruct.cpp
|
|
LEGO1/lego/legoomni/src/race/carrace.cpp
|
|
LEGO1/lego/legoomni/src/race/jetskirace.cpp
|
|
LEGO1/lego/legoomni/src/race/legorace.cpp
|
|
LEGO1/lego/legoomni/src/race/legoraceactor.cpp
|
|
LEGO1/lego/legoomni/src/race/legoracemap.cpp
|
|
LEGO1/lego/legoomni/src/race/legoracers.cpp
|
|
LEGO1/lego/legoomni/src/race/legoracespecial.cpp
|
|
LEGO1/lego/legoomni/src/race/raceskel.cpp
|
|
LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp
|
|
LEGO1/lego/legoomni/src/video/legoflctexturepresenter.cpp
|
|
LEGO1/lego/legoomni/src/video/legohideanimpresenter.cpp
|
|
LEGO1/lego/legoomni/src/video/legolocomotionanimpresenter.cpp
|
|
LEGO1/lego/legoomni/src/video/legoloopinganimpresenter.cpp
|
|
LEGO1/lego/legoomni/src/video/legomodelpresenter.cpp
|
|
LEGO1/lego/legoomni/src/video/legopalettepresenter.cpp
|
|
LEGO1/lego/legoomni/src/video/legopartpresenter.cpp
|
|
LEGO1/lego/legoomni/src/video/legophonemepresenter.cpp
|
|
LEGO1/lego/legoomni/src/video/legotexturepresenter.cpp
|
|
LEGO1/lego/legoomni/src/video/legovideomanager.cpp
|
|
LEGO1/lego/legoomni/src/worlds/act3.cpp
|
|
LEGO1/lego/legoomni/src/worlds/elevatorbottom.cpp
|
|
LEGO1/lego/legoomni/src/worlds/gasstation.cpp
|
|
LEGO1/lego/legoomni/src/worlds/historybook.cpp
|
|
LEGO1/lego/legoomni/src/worlds/hospital.cpp
|
|
LEGO1/lego/legoomni/src/worlds/infocenter.cpp
|
|
LEGO1/lego/legoomni/src/worlds/infocenterdoor.cpp
|
|
LEGO1/lego/legoomni/src/worlds/isle.cpp
|
|
LEGO1/lego/legoomni/src/worlds/jukebox.cpp
|
|
LEGO1/lego/legoomni/src/worlds/legoact2.cpp
|
|
LEGO1/lego/legoomni/src/worlds/police.cpp
|
|
LEGO1/lego/legoomni/src/worlds/registrationbook.cpp
|
|
LEGO1/lego/legoomni/src/worlds/score.cpp
|
|
LEGO1/modeldb/modeldb.cpp
|
|
)
|
|
target_link_libraries(lego1 PRIVATE Vec::Vec)
|
|
if (NOT ISLE_MINIWIN)
|
|
target_link_libraries(lego1 PRIVATE d3drm dxguid)
|
|
target_compile_definitions(lego1 PRIVATE DIRECTINPUT_VERSION=0x0500)
|
|
endif()
|
|
|
|
if (ISLE_BUILD_APP)
|
|
add_executable(isle WIN32
|
|
ISLE/res/isle.rc
|
|
ISLE/isleapp.cpp
|
|
)
|
|
list(APPEND isle_targets isle)
|
|
if (WIN32)
|
|
add_custom_command(TARGET isle POST_BUILD
|
|
COMMAND "${CMAKE_COMMAND}" -E copy $<TARGET_RUNTIME_DLLS:isle> "$<TARGET_FILE_DIR:isle>"
|
|
COMMAND_EXPAND_LISTS
|
|
)
|
|
endif()
|
|
|
|
target_compile_definitions(isle PRIVATE ISLE_APP)
|
|
|
|
# Use internal DirectX 5 if required
|
|
target_link_libraries(isle PRIVATE $<$<BOOL:${ISLE_USE_DX5}>:DirectX5::DirectX5>)
|
|
|
|
# Link SDL and iniparser
|
|
target_link_libraries(isle PRIVATE SDL3::SDL3 iniparser-static)
|
|
|
|
# Link DSOUND and WINMM
|
|
if (WIN32)
|
|
target_link_libraries(isle PRIVATE winmm)
|
|
endif()
|
|
# Link LEGO1
|
|
target_link_libraries(isle PRIVATE lego1)
|
|
if(ISLE_DEBUG)
|
|
target_sources(isle PRIVATE
|
|
ISLE/isledebug.cpp
|
|
)
|
|
target_compile_definitions(isle PRIVATE ISLE_DEBUG)
|
|
target_link_libraries(isle PRIVATE imgui)
|
|
endif()
|
|
endif()
|
|
|
|
if (ISLE_BUILD_CONFIG)
|
|
add_executable(config WIN32
|
|
LEGO1/mxdirectx/mxdirectxinfo.cpp
|
|
LEGO1/mxdirectx/legodxinfo.cpp
|
|
CONFIG/config.cpp
|
|
CONFIG/ConfigCommandLineInfo.cpp
|
|
CONFIG/AboutDlg.cpp
|
|
CONFIG/MainDlg.cpp
|
|
CONFIG/detectdx5.cpp
|
|
CONFIG/StdAfx.cpp
|
|
CONFIG/res/config.rc
|
|
)
|
|
if (ISLE_MINIWIN)
|
|
target_link_libraries(config PRIVATE minimfc)
|
|
endif()
|
|
list(APPEND isle_targets config)
|
|
target_compile_definitions(config PRIVATE _AFXDLL MXDIRECTX_FOR_CONFIG)
|
|
target_include_directories(config PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/LEGO1")
|
|
target_include_directories(config PUBLIC "$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/util>")
|
|
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 14)
|
|
target_link_libraries(config PRIVATE DirectX5::DirectX5)
|
|
endif()
|
|
target_compile_definitions(config PRIVATE DIRECT3D_VERSION=0x500)
|
|
target_link_libraries(config PRIVATE SDL3::SDL3)
|
|
if (NOT ISLE_MINIWIN)
|
|
target_link_libraries(config PRIVATE ddraw dxguid)
|
|
endif()
|
|
endif()
|
|
|
|
if (ISLE_MINIWIN)
|
|
set_property(TARGET ${isle_targets} APPEND PROPERTY LINK_LIBRARIES "miniwin")
|
|
endif()
|
|
|
|
if (MSVC)
|
|
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "15")
|
|
set_property(TARGET ${isle_targets} APPEND PROPERTY COMPILE_DEFINITIONS "_CRT_SECURE_NO_WARNINGS")
|
|
if (TARGET isle)
|
|
target_compile_definitions(isle PRIVATE "_CRT_SECURE_NO_WARNINGS")
|
|
endif()
|
|
if (TARGET config)
|
|
target_compile_definitions(config PRIVATE "_CRT_SECURE_NO_WARNINGS")
|
|
endif()
|
|
endif()
|
|
# Visual Studio 2017 version 15.7 needs "/Zc:__cplusplus" for __cplusplus
|
|
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "19.14.26428")
|
|
set_property(TARGET ${isle_targets} APPEND PROPERTY COMPILE_OPTIONS "-Zc:__cplusplus")
|
|
if (TARGET isle)
|
|
target_compile_options(isle PRIVATE "-Zc:__cplusplus")
|
|
endif()
|
|
if (TARGET config)
|
|
target_compile_options(config PRIVATE "-Zc:__cplusplus")
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
if (MSVC)
|
|
target_link_options(isle PRIVATE "/SAFESEH:NO")
|
|
target_link_options(lego1 PRIVATE "/SAFESEH:NO")
|
|
endif()
|
|
|
|
find_program(CLANGFORMAT_BIN NAMES clang-format)
|
|
if (EXISTS "${CLANGFORMAT_BIN}")
|
|
execute_process(COMMAND "${CLANGFORMAT_BIN}" --version
|
|
OUTPUT_VARIABLE "CLANGFORMAT_VERSION_OUTPUT"
|
|
RESULT_VARIABLE "CLANGFORMAT_RESULT"
|
|
)
|
|
if (CLANGFORMAT_RESULT EQUAL 0 AND CLANGFORMAT_VERSION_OUTPUT MATCHES "version ([0-9\\.]+)")
|
|
set(CLANGFORMAT_VERSION "${CMAKE_MATCH_1}")
|
|
set(CLANGFORMAT_VERSION_REQUIRED "17.0")
|
|
message(DEBUG "Found clang-format version ${CLANGFORMAT_VERSION} (needs ${CLANGFORMAT_VERSION_REQUIRED}")
|
|
if (CLANGFORMAT_VERSION VERSION_GREATER_EQUAL "${CLANGFORMAT_VERSION_REQUIRED}")
|
|
file(GLOB_RECURSE isle_sources
|
|
"${PROJECT_SOURCE_DIR}/ISLE/*.cpp"
|
|
"${PROJECT_SOURCE_DIR}/ISLE/*.h"
|
|
"${PROJECT_SOURCE_DIR}/LEGO1/*.cpp"
|
|
"${PROJECT_SOURCE_DIR}/LEGO1/*.h"
|
|
)
|
|
string(REPLACE ";" "\n" isle_sources_lines "${isle_sources}")
|
|
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/isle_sources.txt" "${isle_sources_lines}\n")
|
|
add_custom_target(clang-format ${CLANGFORMAT_BIN} -i "--files=${CMAKE_CURRENT_BINARY_DIR}/isle_sources.txt")
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
set(install_extra_targets)
|
|
if(DOWNLOAD_DEPENDENCIES)
|
|
get_property(sdl3_type TARGET SDL3::SDL3 PROPERTY TYPE)
|
|
if(sdl3_type STREQUAL "SHARED_LIBRARY")
|
|
list(APPEND install_extra_targets "SDL3-shared")
|
|
endif()
|
|
endif()
|
|
|
|
if(MSVC)
|
|
set(CMAKE_INSTALL_BINDIR "." CACHE PATH "Binary install directory")
|
|
set(CMAKE_INSTALL_LIBDIR "." CACHE PATH "Binary install directory")
|
|
else()
|
|
include(GNUInstallDirs)
|
|
endif()
|
|
|
|
set(ISLE_PACKAGE_NAME "${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}" CACHE STRING "Platform name of the package")
|
|
install(TARGETS isle lego1 ${install_extra_targets}
|
|
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
|
|
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
|
)
|
|
|
|
set(CPACK_PACKAGE_DIRECTORY "dist")
|
|
set(CPACK_PACKAGE_FILE_NAME "isle-${PROJECT_VERSION}-${ISLE_PACKAGE_NAME}-${CMAKE_SYSTEM_PROCESSOR}")
|
|
if(MSVC)
|
|
set(CPACK_GENERATOR ZIP)
|
|
else()
|
|
set(CPACK_GENERATOR TGZ)
|
|
endif()
|
|
include(CPack)
|