cmake_minimum_required(VERSION 3.14) project(ImXui VERSION 0.1.0 LANGUAGES C CXX) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(IMXUI_CORE_SOURCES src/Element.cpp src/Canvas.cpp src/XurParser.cpp src/XuiClasses.cpp src/XurXml.cpp src/Application.cpp src/RenderCommands.cpp src/XuiControls.cpp src/XzpPackage.cpp src/XuiXmlWriter.cpp src/XurWriter.cpp src/Audio.cpp src/ImageManager.cpp ) if(WIN32) list(APPEND IMXUI_CORE_SOURCES src/XuiCompat.cpp src/X360Backend.cpp) endif() set(IMXUI_BACKEND_SOURCES src/Renderer.cpp src/TextureManager.cpp src/Skin.cpp ) set(IMXUI_HEADERS include/ImXui/ImXui.h include/ImXui/RenderCommands.h include/ImXui/XurFormat.h include/ImXui/Renderer.h include/ImXui/TextureManager.h include/ImXui/Skin.h include/ImXui/XurWriter.h include/ImXui/XuiXmlWriter.h include/ImXui/Audio.h ) add_library(ImXuiCore STATIC ${IMXUI_CORE_SOURCES} ${IMXUI_HEADERS}) target_include_directories(ImXuiCore PUBLIC include compat/include third_party) target_include_directories(ImXuiCore PRIVATE src) target_include_directories(ImXuiCore PUBLIC include) set(IMXUI_HEADERS ${IMXUI_HEADERS} compat/include/xui.h compat/include/xuiapp.h compat/include/xuirender.h compat/include/xuiresource.h) add_library(ImXuiSoft STATIC src/FontEngine.cpp src/SoftwareRenderer.cpp ) target_include_directories(ImXuiSoft PUBLIC include) target_include_directories(ImXuiSoft PRIVATE src third_party) target_link_libraries(ImXuiSoft PUBLIC ImXuiCore) if(NOT WIN32) find_package(OpenGL) endif() if(WIN32) add_library(ImXui STATIC ${IMXUI_BACKEND_SOURCES} ${IMXUI_HEADERS}) target_include_directories(ImXui PUBLIC include) target_include_directories(ImXui PRIVATE src) target_link_libraries(ImXui PUBLIC ImXuiCore d3d11.lib dxgi.lib d3dcompiler.lib d2d1.lib dwrite.lib) endif() if(WIN32) add_executable(NotepadDemo WIN32 examples/NotepadDemo.cpp) target_link_libraries(NotepadDemo PRIVATE ImXui comdlg32.lib) target_include_directories(NotepadDemo PRIVATE include) add_custom_command(TARGET NotepadDemo POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/examples/assets/notepad.xui" "$" COMMENT "Copying notepad.xui" VERBATIM) endif() if(UNIX AND NOT APPLE) if(OpenGL_FOUND) target_sources(ImXuiSoft PRIVATE src/OpenGLRenderer.cpp) target_compile_definitions(ImXuiCore PRIVATE IMXUI_HAS_OPENGL IMXUI_HAS_GLX) target_compile_definitions(ImXuiSoft PRIVATE IMXUI_HAS_OPENGL IMXUI_HAS_GLX) target_compile_definitions(ImXuiSoft PRIVATE IMXUI_HAS_OPENGL IMXUI_HAS_GLX) target_link_libraries(ImXuiSoft PUBLIC OpenGL::GL) endif() add_executable(NotepadDemo examples/NotepadDemo.cpp) target_link_libraries(NotepadDemo PRIVATE ImXuiSoft ImXuiCore X11) target_include_directories(NotepadDemo PRIVATE include) add_custom_command(TARGET NotepadDemo POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/examples/assets/notepad.xui" "$" COMMENT "Copying notepad.xui" VERBATIM) endif() if(WIN32) find_file(D3DCOMPILER_DLL d3dcompiler_46.dll PATHS "C:/Program Files (x86)/Windows Kits/8.0/Redist/D3D/x86" "C:/Program Files (x86)/Windows Kits/8.1/Redist/D3D/x86" "C:/Program Files (x86)/Windows Kits/10/Redist/D3D/x86" NO_DEFAULT_PATH ) mark_as_advanced(D3DCOMPILER_DLL) if(D3DCOMPILER_DLL) add_custom_command(TARGET NotepadDemo POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${D3DCOMPILER_DLL}" "$" COMMENT "Copying d3dcompiler_46.dll") endif() endif() add_executable(XUITool tools/xuitool.cpp third_party/zlib/adler32.c third_party/zlib/compress.c third_party/zlib/crc32.c third_party/zlib/deflate.c third_party/zlib/infback.c third_party/zlib/inffast.c third_party/zlib/inflate.c third_party/zlib/inftrees.c third_party/zlib/trees.c third_party/zlib/uncompr.c third_party/zlib/zutil.c ) target_link_libraries(XUITool PRIVATE ImXuiCore) target_include_directories(XUITool PRIVATE include third_party/zlib) if(WIN32) install(TARGETS ImXui LIBRARY DESTINATION lib ARCHIVE DESTINATION lib) endif() install(DIRECTORY include/ DESTINATION include)