diff options
| author | KiritoDv <kiritodev01@gmail.com> | 2024-03-24 02:01:28 -0600 |
|---|---|---|
| committer | KiritoDv <kiritodev01@gmail.com> | 2024-04-06 04:32:13 -0600 |
| commit | 641a43cbf9b4f4c4f545218e201fb58bbe15fcd7 (patch) | |
| tree | 50ecef61c66e171580ef1a09c2d3a9fc32591768 /CMakeLists.txt | |
| parent | 126a55aa0eadaf8b2ed8f370cbba63368be7a964 (diff) | |
First compilation, we just need more stupid assets
Diffstat (limited to 'CMakeLists.txt')
| -rw-r--r-- | CMakeLists.txt | 440 |
1 files changed, 440 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..d3b1a6e0 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,440 @@ +cmake_minimum_required(VERSION 3.16.0 FATAL_ERROR) + +# Set the project version and language +project(Lylat64 VERSION 0.1.0 LANGUAGES C CXX ASM) + +if(APPLE) + enable_language(OBJCXX) +endif() + +# Set the minimum version of CMake and the deployment target for macOS +set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15" CACHE STRING "Minimum OS X deployment version") + +# Set the C++ standard and enable the MSVC parallel build option +set(CMAKE_CXX_STANDARD 20 CACHE STRING "The C++ standard to use") +set(CMAKE_C_STANDARD 11 CACHE STRING "The C standard to use") +#add_compile_options(-fsanitize=address) +#add_link_options(-fsanitize=address) + +# Add a custom module path to locate additional CMake modules +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules/") +include(FindFontconfig) + +if (WIN32) +include(cmake/automate-vcpkg.cmake) +# Forced to use MSVC +set(MSVC ON) + +if(MSVC) +set(VCPKG_TRIPLET x64-windows-static) +set(VCPKG_TARGET_TRIPLET x64-windows-static) +else() +set(VCPKG_TRIPLET x64-mingw-static) +set(VCPKG_TARGET_TRIPLET x64-mingw-static) +endif() + +vcpkg_bootstrap() +vcpkg_install_packages(fontconfig sdl2 zlib bzip2 libpng getopt dirent libusb pthread glew glfw3) +endif() + +if (MSVC) +set(CPP "${CMAKE_C_COMPILER}" "/EP") +else() +set(CPP "${CMAKE_C_COMPILER}" "-E" "-P" "-Wno-trigraphs" "-x" "c") +endif() + +# Set game compilation version +set(VERSION us) +set(USE_NETWORKING ON) + +# Add compile definitions for the target +add_compile_definitions( + VERSION_US=1 + ENABLE_RUMBLE=1 + F3DEX_GBI=1 + _LANGUAGE_C + _USE_MATH_DEFINES + CIMGUI_DEFINE_ENUMS_AND_STRUCTS + NON_MATCHING=1 + NON_EQUIVALENT=1 +) + +# Find necessary libraries +if (UNIX AND NOT APPLE) +find_package(OpenGL REQUIRED) +endif() + +# Include directories +include_directories( + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/include + ${CMAKE_CURRENT_SOURCE_DIR}/src +) + +# Collect source files to build the executable +file(GLOB_RECURSE ALL_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + "src/libultra/io/aisetfreq.c" + "src/libultra/gu/sqrtf.c" + "src/libultra/gu/mtxutil.c" + "src/libultra/gu/ortho.c" + "src/main/*.c" + "src/main/*.h" + "src/port/*.h" + "src/port/*.cpp" + "src/assets/*.c" + "src/overlays/*.c" + "src/port/importer/*.cpp" + "src/port/importer/types/*.cpp" +) + +# Exclude specific files from the ALL_FILES list +list(FILTER ALL_FILES EXCLUDE REGEX ".*.inc.c") +# list(FILTER ALL_FILES EXCLUDE REGEX "src/main/audio_context.c") +# list(FILTER ALL_FILES EXCLUDE REGEX "src/main/audio_effects.c") +# list(FILTER ALL_FILES EXCLUDE REGEX "src/main/audio_general.c") +# list(FILTER ALL_FILES EXCLUDE REGEX "src/main/audio_heap.c") +# list(FILTER ALL_FILES EXCLUDE REGEX "src/main/audio_load.c") +# list(FILTER ALL_FILES EXCLUDE REGEX "src/main/audio_playback.c") +# list(FILTER ALL_FILES EXCLUDE REGEX "src/main/audio_seqplayer.c") +# list(FILTER ALL_FILES EXCLUDE REGEX "src/main/audio_synthesis.c") +# list(FILTER ALL_FILES EXCLUDE REGEX "src/main/audio_thread.c") +# list(FILTER ALL_FILES EXCLUDE REGEX "src/main/audiotables.c") +list(FILTER ALL_FILES EXCLUDE REGEX "src/main/sys_fault.c") + +add_executable(${PROJECT_NAME} ${ALL_FILES} ${GENERATED_SOURCES}) + +################################################################################ +# MSVC runtime library +################################################################################ +if (MSVC) + if (CMAKE_SYSTEM_NAME STREQUAL "Windows") + get_property(MSVC_RUNTIME_LIBRARY_DEFAULT TARGET ${PROJECT_NAME} PROPERTY MSVC_RUNTIME_LIBRARY) + if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") + string(CONCAT "MSVC_RUNTIME_LIBRARY_STR" + $<$<CONFIG:Debug>: + MultiThreadedDebug + > + $<$<CONFIG:Release>: + MultiThreaded + > + $<$<NOT:$<OR:$<CONFIG:Debug>,$<CONFIG:Release>>>:${MSVC_RUNTIME_LIBRARY_DEFAULT}> + ) + elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "Win32") + string(CONCAT "MSVC_RUNTIME_LIBRARY_STR" + $<$<CONFIG:Debug>: + MultiThreadedDebug + > + $<$<CONFIG:Release>: + MultiThreaded + > + $<$<NOT:$<OR:$<CONFIG:Debug>,$<CONFIG:Release>>>:${MSVC_RUNTIME_LIBRARY_DEFAULT}> + ) + endif() + set_target_properties(${PROJECT_NAME} PROPERTIES MSVC_RUNTIME_LIBRARY ${MSVC_RUNTIME_LIBRARY_STR}) + endif() +endif() + +#==============================================================================# +# Libultraship Integration # +#==============================================================================# + +include_directories( + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/src + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/include + ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/include/libultraship + ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/src + ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/src/log + ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/src/debug + ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/src/menu + ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/src/utils + ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/src/utils/binarytools + ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/src/config + ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/src/resource + ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/src/resource/type + ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/src/resource/factory + ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/src/audio + ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/src/window + ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/src/window/gui + ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/src/config + ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/src/public + ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/src/public/libultra + ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/src/public/bridge + ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/extern + ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/extern/tinyxml2 + ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/libultraship/Lib/ + ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/libultraship/Lib/libjpeg/include/ + ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/libultraship/Lib/spdlog/include/ + ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/src/graphic/Fast3D/U64/PR + ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/src/graphic + ${SDL2_INCLUDE_DIRS} + ${GLEW_INCLUDE_DIRS} +) + +if (CMAKE_SYSTEM_NAME STREQUAL "Windows") + if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") + target_compile_definitions(${PROJECT_NAME} PRIVATE + "$<$<CONFIG:Debug>:" + "_DEBUG;" + "_CRT_SECURE_NO_WARNINGS;" + "ENABLE_DX11;" + ">" + "$<$<CONFIG:Release>:" + "NDEBUG" + ">" + "INCLUDE_GAME_PRINTF;" + "UNICODE;" + "_UNICODE" + STORMLIB_NO_AUTO_LINK + "_CRT_SECURE_NO_WARNINGS;" + ) + elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "Win32") + target_compile_definitions(${PROJECT_NAME} PRIVATE + "$<$<CONFIG:Debug>:" + "NOINCLUDE_GAME_PRINTF;" + "_DEBUG;" + "_CRT_SECURE_NO_WARNINGS;" + "ENABLE_OPENGL" + ">" + "$<$<CONFIG:Release>:" + "NDEBUG;" + ">" + "INCLUDE_GAME_PRINTF;" + "WIN32;" + "UNICODE;" + "_UNICODE" + STORMLIB_NO_AUTO_LINK + ) + endif() +elseif (CMAKE_SYSTEM_NAME STREQUAL "CafeOS") + target_compile_definitions(${PROJECT_NAME} PRIVATE + "$<$<CONFIG:Debug>:" + "_DEBUG" + ">" + "$<$<CONFIG:Release>:" + "NDEBUG" + ">" + "SPDLOG_ACTIVE_LEVEL=3;" + "SPDLOG_NO_THREAD_ID;" + "SPDLOG_NO_TLS;" + "STBI_NO_THREAD_LOCALS;" + ) +elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU|Clang|AppleClang") + target_compile_definitions(${PROJECT_NAME} PRIVATE + "$<$<CONFIG:Debug>:" + "_DEBUG" + ">" + "$<$<CONFIG:Release>:" + "NDEBUG" + ">" + "$<$<BOOL:${BUILD_CROWD_CONTROL}>:ENABLE_CROWD_CONTROL>" + "SPDLOG_ACTIVE_LEVEL=0;" + "_CONSOLE;" + "_CRT_SECURE_NO_WARNINGS;" + "ENABLE_OPENGL;" + "UNICODE;" + "_UNICODE" + ) +endif() + +add_subdirectory(libultraship ${CMAKE_CURRENT_SOURCE_DIR}/libultraship) + +add_dependencies(${PROJECT_NAME} libultraship) +target_link_libraries(${PROJECT_NAME} PRIVATE libultraship) + +if(USE_NETWORKING) + if(MSVC) + vcpkg_install_packages(sdl2-net) + endif() + find_package(SDL2_net REQUIRED) + include_directories(${SDL2_NET_INCLUDE_DIRS}) + target_link_libraries(${PROJECT_NAME} PRIVATE SDL2_net::SDL2_net) + target_compile_definitions(${PROJECT_NAME} PRIVATE USE_NETWORKING) +endif() + +################################################################################ +# Compile and link options +################################################################################ +if(MSVC) + if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") + target_compile_options(${PROJECT_NAME} PRIVATE + $<$<CONFIG:Debug>: + /w; + /Od; + /MTd + > + $<$<CONFIG:Release>: + /Oi; + /Gy; + /W3; + /MT + > + /permissive-; + /MP; + ${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT}; + ${DEFAULT_CXX_EXCEPTION_HANDLING} + ) + target_compile_options(${PROJECT_NAME} PRIVATE $<$<CONFIG:Debug>:/ZI;>) + elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "Win32") + target_compile_options(${PROJECT_NAME} PRIVATE + $<$<CONFIG:Debug>: + /MTd + > + $<$<CONFIG:Release>: + /O2; + /Oi; + /Gy; + /MT + > + /permissive-; + /MP; + /w; + ${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT}; + ${DEFAULT_CXX_EXCEPTION_HANDLING} + ) + endif() + if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64") + target_link_options(${PROJECT_NAME} PRIVATE + $<$<CONFIG:Debug>: + /INCREMENTAL + > + $<$<CONFIG:Release>: + /OPT:REF; + /OPT:ICF; + /INCREMENTAL:NO; + /FORCE:MULTIPLE + > + /MANIFEST:NO; + /DEBUG; + /SUBSYSTEM:WINDOWS + ) + elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "Win32") + target_link_options(${PROJECT_NAME} PRIVATE + $<$<CONFIG:Debug>: + /STACK:8777216 + > + $<$<CONFIG:Release>: + /OPT:REF; + /OPT:ICF; + /INCREMENTAL:NO; + /FORCE:MULTIPLE + > + /MANIFEST:NO; + /DEBUG; + /SUBSYSTEM:WINDOWS + ) + endif() + + # Remove /RTC from msvc flags + foreach (fentry + CMAKE_C_FLAGS + CMAKE_CXX_FLAGS + ) + string (REGEX REPLACE "/RTC(su|[1su])" "" ${fentry} "${${fentry}}") + endforeach(fentry) +endif() + +if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang|AppleClang") + if (CMAKE_SYSTEM_NAME STREQUAL "Darwin") + target_compile_options(${PROJECT_NAME} PRIVATE + -Wall -Wextra -Wno-error + -Wno-return-type + -Wno-unused-parameter + -Wno-unused-function + -Wno-unused-variable + -Wno-missing-field-initializers + -Wno-parentheses + -Wno-narrowing + -Wno-missing-braces + $<$<COMPILE_LANGUAGE:C>: + -Werror-implicit-function-declaration + -Wno-incompatible-pointer-types + > + $<$<COMPILE_LANGUAGE:CXX>:-fpermissive> + $<$<COMPILE_LANGUAGE:CXX>: + -Wno-c++11-narrowing + -Wno-deprecated-enum-enum-conversion + > + -pthread + ) + + target_link_options(${PROJECT_NAME} PRIVATE + -pthread + ) + elseif (CMAKE_SYSTEM_NAME STREQUAL "NintendoSwitch") + target_compile_options(${PROJECT_NAME} PRIVATE + -Wall -Wextra -Wno-error + -Wno-return-type + -Wno-unused-parameter + -Wno-unused-function + -Wno-unused-variable + -Wno-missing-field-initializers + -Wno-parentheses + -Wno-narrowing + -Wno-missing-braces + $<$<COMPILE_LANGUAGE:C>: + -Werror-implicit-function-declaration + -Wno-incompatible-pointer-types + > + $<$<COMPILE_LANGUAGE:CXX>:-fpermissive> + $<$<COMPILE_LANGUAGE:CXX>: + -Wno-c++11-narrowing + -Wno-deprecated-enum-enum-conversion + > + -pthread + ) + + target_link_options(${PROJECT_NAME} PRIVATE + -pthread + ) + elseif (CMAKE_SYSTEM_NAME STREQUAL "CafeOS") + target_compile_options(${PROJECT_NAME} PRIVATE + -O2 + + # disable some warnings to not clutter output + -Wno-multichar + -Wno-return-type + -Wno-narrowing + -Wno-switch-outside-range + $<$<COMPILE_LANGUAGE:C>: + -Werror-implicit-function-declaration + -Wno-incompatible-pointer-types + -Wno-discarded-array-qualifiers + -Wno-discarded-qualifiers + -Wno-int-conversion + -Wno-builtin-declaration-mismatch + -Wno-switch-unreachable + -Wno-stringop-overflow + > + ) + else() + if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64") + set(CPU_OPTION -msse2 -mfpmath=sse) + endif() + + target_compile_options(${PROJECT_NAME} PRIVATE + -Wall -Wextra -Wno-error + -Wno-unused-parameter + -Wno-unused-function + -Wno-unused-variable + -Wno-missing-field-initializers + -Wno-parentheses + -Wno-narrowing + -Wno-missing-braces + $<$<COMPILE_LANGUAGE:C>: + -Werror-implicit-function-declaration + -Wno-incompatible-pointer-types + > + $<$<COMPILE_LANGUAGE:CXX>:-fpermissive> + $<$<COMPILE_LANGUAGE:CXX>:-Wno-deprecated-enum-enum-conversion> + -pthread + ${CPU_OPTION} + ) + + target_link_options(${PROJECT_NAME} PRIVATE + -pthread + -Wl,-export-dynamic + ) + endif() +endif() |
