Raikiri / LegitEngine

A rendergraph-based graphical framework for Vulkan
MIT License
592 stars 25 forks source link

Unable to build on MSYS2 MINGW64 #5

Open ghost opened 1 year ago

ghost commented 1 year ago
$ cmake ..
-- Building for: Ninja
-- The C compiler identification is GNU 12.2.0
-- The CXX compiler identification is GNU 12.2.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/msys64/mingw64/bin/cc.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/msys64/mingw64/bin/c++.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found Vulkan: C:/msys64/mingw64/lib/libvulkan-1.dll.a (found version "1.3.248") found components: glslc glslangValidator
-- Found Vulkan in C:/msys64/mingw64/include
-- Found Vulkan libs in C:/msys64/mingw64/lib/libvulkan-1.dll.a
-- Configuring done (0.8s)
-- Generating done (0.0s)
-- Build files have been written to: C:/msys64/home/Administrator/LegitEngine/build
$ ninja
[1/14] Building CXX object CMakeFiles/LegitEngine.dir/dependencies/spirv-cross/spirv_cross_util.cpp.obj
[2/14] Building CXX object CMakeFiles/LegitEngine.dir/dependencies/spirv-cross/spirv_cfg.cpp.obj
[3/14] Building CXX object CMakeFiles/LegitEngine.dir/dependencies/spirv-cross/spirv_cross_parsed_ir.cpp.obj
[4/14] Building CXX object CMakeFiles/LegitEngine.dir/dependencies/spirv-cross/spirv_cpp.cpp.obj
[5/14] Building CXX object CMakeFiles/LegitEngine.dir/dependencies/jsoncpp/jsoncpp.cpp.obj
[6/14] Building CXX object CMakeFiles/LegitEngine.dir/dependencies/spirv-cross/spirv_reflect.cpp.obj
[7/14] Building CXX object CMakeFiles/LegitEngine.dir/dependencies/spirv-cross/spirv_cross.cpp.obj
[8/14] Building CXX object CMakeFiles/LegitEngine.dir/dependencies/spirv-cross/spirv_parser.cpp.obj
[9/14] Building CXX object CMakeFiles/LegitEngine.dir/dependencies/spirv-cross/spirv_hlsl.cpp.obj
[10/14] Building CXX object CMakeFiles/LegitEngine.dir/src/main.cpp.obj
FAILED: CMakeFiles/LegitEngine.dir/src/main.cpp.obj
C:\msys64\mingw64\bin\c++.exe  -IC:/msys64/home/Administrator/LegitEngine/./dependencies/glm/include -IC:/msys64/home/Administrator/LegitEngine/./dependencies/glfw/include -IC:/msys64/home/Administrator/LegitEngine/./dependencies/spirv-cross -IC:/msys64/home/Administrator/LegitEngine/./dependencies/gli -IC:/msys64/home/Administrator/LegitEngine/./dependencies/tiny_obj_loader/include -IC:/msys64/home/Administrator/LegitEngine/./dependencies/jsoncpp  -MD -MT CMakeFiles/LegitEngine.dir/src/main.cpp.obj -MF CMakeFiles\LegitEngine.dir\src\main.cpp.obj.d -o CMakeFiles/LegitEngine.dir/src/main.cpp.obj -c C:/msys64/home/Administrator/LegitEngine/src/main.cpp
C:/msys64/home/Administrator/LegitEngine/src/main.cpp:43:10: fatal error: imgui.h: No such file or directory
   43 | #include "imgui.h"
      |          ^~~~~~~~~
compilation terminated.
[11/14] Building CXX object CMakeFiles/LegitEngine.dir/dependencies/tiny_obj_loader/include/tiny_obj_loader.cc.obj
[12/14] Building CXX object CMakeFiles/LegitEngine.dir/dependencies/spirv-cross/spirv_glsl.cpp.obj
[13/14] Building CXX object CMakeFiles/LegitEngine.dir/dependencies/spirv-cross/spirv_msl.cpp.obj
ninja: build stopped: subcommand failed.
proton991 commented 9 months ago

I edited the CMakeLists.txt, the original has missing dependencies on IMGUI. I build successfully using MSVC cmake on windows.

cmake_minimum_required(VERSION 3.0.0)
project(LegitEngineCMake VERSION 0.1.0)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj")

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules/")

find_package(Vulkan)
message(STATUS "Found Vulkan in ${Vulkan_INCLUDE_DIRS}")
message(STATUS "Found Vulkan libs in ${Vulkan_LIBRARIES}")

set(TINYOBJ_INCLUDE_DIR ./dependencies/tiny_obj_loader/include)
set(SPIRVCROSS_INCLUDE_DIR ./dependencies/spirv-cross)
set(GLI_INCLUDE_DIR ./dependencies/gli)
set(GLM_INCLUDE_DIR ./dependencies/glm/include)
set(GLFW3_INCLUDE_DIR ./dependencies/glfw/include)
set(JSONCPP_INCLUDE_DIR ./dependencies/jsoncpp)

set(GLFW3_LIBRARIES "${CMAKE_SOURCE_DIR}/dependencies/glfw/lib-vc2015/glfw3.lib")
#find_package(GLM)
#find_package(GLFW3)

include_directories ("${Vulkan_INCLUDE_DIRS}")
include_directories ("${GLM_INCLUDE_DIR}")
include_directories ("${GLFW3_INCLUDE_DIR}")
include_directories ("${SPIRVCROSS_INCLUDE_DIR}")
include_directories ("${GLI_INCLUDE_DIR}")
include_directories ("${TINYOBJ_INCLUDE_DIR}")
include_directories ("${JSONCPP_INCLUDE_DIR}")

# imgui
set(IMGUI_DIR "${CMAKE_CURRENT_SOURCE_DIR}/dependencies/imgui")
set(IMGUI_FILES
        "${IMGUI_DIR}/imgui.cpp"
        "${IMGUI_DIR}/imgui_demo.cpp"
        "${IMGUI_DIR}/imgui_draw.cpp"
        "${IMGUI_DIR}/imgui_widgets.cpp"
        "${IMGUI_DIR}/imconfig.h"
        "${IMGUI_DIR}/imgui.h"
        "${IMGUI_DIR}/imgui_internal.h"
        "${IMGUI_DIR}/imstb_rectpack.h"
        "${IMGUI_DIR}/imstb_textedit.h"
        "${IMGUI_DIR}/imstb_truetype.h")

add_library(imgui STATIC ${IMGUI_FILES})

target_include_directories(imgui PUBLIC ${IMGUI_DIR})

#include_directories ("${CMAKE_SOURCE_DIR}/dependencies/glm/include")
#include_directories ("${CMAKE_SOURCE_DIR}/dependencies/glfw/include")

file(GLOB_RECURSE dep_sources ${SPIRVCROSS_INCLUDE_DIR}/*.cpp ${TINYOBJ_INCLUDE_DIR}/*.cc ${JSONCPP_INCLUDE_DIR}/*.cpp)
file(GLOB_RECURSE legit_sources ./src/*.cpp)
file(GLOB_RECURSE legit_headers ./src/*.h)

add_executable(LegitEngine)

#source_group(TREE src/)
target_sources(LegitEngine PRIVATE ${dep_sources} ${legit_sources} ${legit_headers})
target_link_libraries(LegitEngine ${Vulkan_LIBRARIES} ${GLFW3_LIBRARIES} imgui)
set_target_properties(LegitEngine PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_SOURCE_DIR}/bin/cmaked")
set_target_properties(LegitEngine PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_SOURCE_DIR}/bin/cmake")
Raikiri commented 9 months ago

I'll accept a pull request if you add imgui the same way how everything else is added (or change the way everything else is added to something better), I just want it to be done uniformly.

If not, then it's alright, I'm planning at some point in the future to do a large update to this repo and upload 2 years worth of changes and I'll have a look at updating CMakeLists.txt while I'm at it.