Files
ImXui/CMakeLists.txt

147 lines
4.4 KiB
CMake

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"
"$<TARGET_FILE_DIR:NotepadDemo>"
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"
"$<TARGET_FILE_DIR:NotepadDemo>"
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}"
"$<TARGET_FILE_DIR:NotepadDemo>"
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)