Skip to content

Commit

Permalink
[Irrlicht] Add new port (microsoft#5431)
Browse files Browse the repository at this point in the history
  • Loading branch information
adrido authored and Rastaban committed Feb 25, 2019
1 parent 7befb86 commit ecff299
Show file tree
Hide file tree
Showing 3 changed files with 312 additions and 0 deletions.
208 changes: 208 additions & 0 deletions ports/irrlicht/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,208 @@
#
# Irrlicht 3D engine
#
cmake_minimum_required(VERSION 3.8)
project(Irrlicht)

set_property(GLOBAL PROPERTY USE_FOLDERS ON)

# Irrlicht directories
# -------------------------------------------------------------------------------------------------
set(IRR_ROOT_DIR "")
set(IRR_SRC_DIR "source/Irrlicht")
set(IRR_INC_DIR "include")

# Options
# -------------------------------------------------------------------------------------------------
set(DXSDK "")
if(DEFINED ENV{DXSDK_DIR})
set(DXSDK "ENV{DXSDK_DIR}")
endif()

set(IRR_FAST_MATH 0 CACHE BOOL "Whether to enable fast maths (at the expense of precision)")
set(IRR_SHARED_LIB 1 CACHE BOOL "Whether to generate shared libraries instead of static libraries")
set(IRR_DIRECTX_SDK ${DXSDK} CACHE PATH "Path to the DirectX SDK (for DirectX 9, this folder should contain /Include, /Lib)")
set(IRR_BUILD_TOOLS 0 CACHE BOOL "Whether to generate the tools")

# Some helper functions
# -------------------------------------------------------------------------------------------------
function(glob_c_cpp_sources result folder)
file(GLOB res
"${folder}/*.c"
"${folder}/*.cpp"
"${folder}/*.h"
"${folder}/*.hpp"
"${folder}/*.rc")
set(${result} ${res} PARENT_SCOPE)
endfunction()

# Source files
# -------------------------------------------------------------------------------------------------
glob_c_cpp_sources(IRR_SRC_FILES ${IRR_SRC_DIR})
glob_c_cpp_sources(IRR_SRC_FILES_INTERFACE ${IRR_INC_DIR})
glob_c_cpp_sources(IRR_SRC_FILES_AESGLADMAN ${IRR_SRC_DIR}/aesGladman)
glob_c_cpp_sources(IRR_SRC_FILES_LZMA ${IRR_SRC_DIR}/lzma)

glob_c_cpp_sources(IRR_TOOL_FILES_FILE_TO_HEADER ${IRR_ROOT_DIR}/tools/FileToHeader/)
glob_c_cpp_sources(IRR_TOOL_FILES_GUI_EDITOR ${IRR_ROOT_DIR}/tools/GUIEditor/)
glob_c_cpp_sources(IRR_TOOL_FILES_FONT_TOOL ${IRR_ROOT_DIR}/tools/IrrFontTool/newFontTool/)
glob_c_cpp_sources(IRR_TOOL_FILES_MESH_CONVERTER ${IRR_ROOT_DIR}/tools/MeshConverter/)

# Group files
# -------------------------------------------------------------------------------------------------
source_group(Irrlicht\\engine FILES ${IRR_SRC_FILES})
source_group(Irrlicht\\interface FILES ${IRR_SRC_FILES_INTERFACE})
source_group(Irrlicht\\libs\\aesGladman FILES ${IRR_SRC_FILES_AESGLADMAN})
source_group(Irrlicht\\libs\\lzma FILES ${IRR_SRC_FILES_LZMA})

# Library files
# -------------------------------------------------------------------------------------------------
find_package(ZLIB REQUIRED)
find_package(PNG REQUIRED)
find_package(JPEG REQUIRED)
find_package(BZip2 REQUIRED)
#find_package(LIBLZMA REQUIRED) # LIBLZMA does not export _LzmaDecode

# Irrlicht target
# -------------------------------------------------------------------------------------------------
set(IRR_ALL_SRC_FILES
${IRR_SRC_FILES}
${IRR_SRC_FILES_INTERFACE}
${IRR_SRC_FILES_AESGLADMAN}
${IRR_SRC_FILES_LZMA}
)

if(${IRR_SHARED_LIB})
add_library(Irrlicht SHARED ${IRR_ALL_SRC_FILES})
else()
add_library(Irrlicht STATIC ${IRR_ALL_SRC_FILES})
endif()

target_link_libraries(Irrlicht PRIVATE
${ZLIB_LIBRARY}
${PNG_LIBRARY}
${JPEG_LIBRARY}
${BZIP2_LIBRARY}
)

if(IRR_BUILD_TOOLS)
add_executable(FileToHeader ${IRR_TOOL_FILES_FILE_TO_HEADER})

add_executable(GUIEditor ${IRR_TOOL_FILES_GUI_EDITOR})
target_link_libraries(GUIEditor Irrlicht)

add_executable(FontTool ${IRR_TOOL_FILES_FONT_TOOL})
target_link_libraries(FontTool Irrlicht)

add_executable(MeshConverter ${IRR_TOOL_FILES_MESH_CONVERTER})
target_link_libraries(MeshConverter Irrlicht)
endif()

# Target properties (for compilation & export)
# -------------------------------------------------------------------------------------------------
target_include_directories(Irrlicht
PRIVATE ${IRR_SRC_DIR}
PRIVATE ${IRR_SRC_DIR}/aesGladman
PRIVATE ${BZIP2_INCLUDE_DIR}
PRIVATE ${JPEG_INCLUDE_DIR}
PRIVATE ${LIBPNG_INCLUDE_DIR}
PRIVATE ${IRR_SRC_DIR}/lzma
PRIVATE ${ZLIB_INCLUDE_DIR}
)

# I dont realy understand why this is necesary or what it is doing,
# but it is necesarry to build and export a package.
# See: https://cmake.org/cmake/help/v3.8/command/target_include_directories.html
target_include_directories(Irrlicht PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include/irrlicht> # <prefix>/include/irrlicht
)

if(NOT ${IRR_DIRECTX_SDK} STREQUAL "")
target_include_directories(Irrlicht PRIVATE ${IRR_DIRECTX_SDK}/Include)
if(${CMAKE_SIZEOF_VOID_P} EQUAL 4)
set(DX_LIBS ${IRR_DIRECTX_SDK}/Lib/x86)
else()
set(DX_LIBS ${IRR_DIRECTX_SDK}/Lib/x64)
endif()
target_link_libraries(Irrlicht
PRIVATE ${DX_LIBS}/d3dx9.lib
PRIVATE ${DX_LIBS}/dinput8.lib
PRIVATE ${DX_LIBS}/dxguid.lib)
else()
target_compile_definitions(Irrlicht PRIVATE NO_IRR_COMPILE_WITH_DIRECT3D_9_)
endif()

if(NOT ${IRR_SHARED_LIB})
target_compile_definitions(Irrlicht PUBLIC _IRR_STATIC_LIB_)
endif()

# Per platform config
# -------------------------------------------------------------------------------------------------

# Export symbols
target_compile_definitions(Irrlicht PRIVATE IRRLICHT_EXPORTS)

if(WIN32)
# Import the symbols of bzip2
target_compile_definitions(Irrlicht PRIVATE BZ_IMPORT)

# Disable the ton of warnings from standard library
target_compile_definitions(Irrlicht PRIVATE _CRT_SECURE_NO_WARNINGS)

# Multi processor compilation
target_compile_options(Irrlicht PRIVATE /MP)

# Fast math options
if(${IRR_FAST_MATH})
target_compile_options(Irrlicht PRIVATE /fp:fast)
message("Fast Math Enabled")
# SSE2 is automatically activated on x64
if(${CMAKE_SIZEOF_VOID_P} EQUAL 4)
target_compile_options(Irrlicht PRIVATE /arch:SSE2)
endif()
endif()

elseif(UNIX)
# Standard mode
target_compile_options(Irrlicht
PRIVATE -Wall
PRIVATE -pipe
PRIVATE -fno-exceptions
PRIVATE -fno-strict-aliasing)

# Disable RTTI on C++ files only (no sense for C files)
set_source_files_properties(${IRR_SRC_FILES} ${IRR_SRC_FILES_AESGLADMAN}
PROPERTIES COMPILE_FLAGS -fno-rtti)

# Debug macro
target_compile_options(Irrlicht PRIVATE $<$<CONFIG:Debug>:-D_DEBUG>)

# X11 and OpenGL
target_link_libraries(Irrlicht
PRIVATE X11
PRIVATE GL
PRIVATE Xxf86vm)
endif()

# Installation
# -------------------------------------------------------------------------------------------------
install(
TARGETS Irrlicht
EXPORT Irrlicht
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
)

install(FILES ${IRR_SRC_FILES_INTERFACE} DESTINATION "include/irrlicht" CONFIGURATIONS Release)

if(IRR_BUILD_TOOLS)
install(
TARGETS FileToHeader GUIEditor FontTool MeshConverter
RUNTIME DESTINATION tools/irrlicht/
CONFIGURATIONS Release
)
endif()

install(EXPORT Irrlicht FILE irrlicht-targets.cmake DESTINATION share/irrlicht)
10 changes: 10 additions & 0 deletions ports/irrlicht/CONTROL
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
Source: irrlicht
Version: 1.8.4
Description: Irrlicht lightning fast 3d engine
Build-Depends: zlib, libpng, bzip2, libjpeg-turbo

Feature: fast-fpu
Description: Enable fast maths (at the expense of precision)

Feature: tools
Description: Build the Tools FileToHeader, FontTool, GUIEditor and MeshConverter
94 changes: 94 additions & 0 deletions ports/irrlicht/portfile.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
# Common Ambient Variables:
# CURRENT_BUILDTREES_DIR = ${VCPKG_ROOT_DIR}\buildtrees\${PORT}
# CURRENT_PACKAGES_DIR = ${VCPKG_ROOT_DIR}\packages\${PORT}_${TARGET_TRIPLET}
# CURRENT_PORT_DIR = ${VCPKG_ROOT_DIR}\ports\${PORT}
# PORT = current port name (zlib, etc)
# TARGET_TRIPLET = current triplet (x86-windows, x64-windows-static, etc)
# VCPKG_CRT_LINKAGE = C runtime linkage type (static, dynamic)
# VCPKG_LIBRARY_LINKAGE = target library linkage type (static, dynamic)
# VCPKG_ROOT_DIR = <C:\path\to\current\vcpkg>
# VCPKG_TARGET_ARCHITECTURE = target architecture (x64, x86, arm)
#

include(vcpkg_common_functions)

vcpkg_download_distfile(ARCHIVE
URLS "https://downloads.sourceforge.net/project/irrlicht/Irrlicht%20SDK/1.8/1.8.4/irrlicht-1.8.4.zip"
FILENAME "irrlicht-1.8.4.zip"
SHA512 de69ddd2c6bc80a1b27b9a620e3697b1baa552f24c7d624076d471f3aecd9b15f71dce3b640811e6ece20f49b57688d428e3503936a7926b3e3b0cc696af98d1
)

vcpkg_extract_source_archive_ex(
OUT_SOURCE_PATH SOURCE_PATH
ARCHIVE ${ARCHIVE}
REF "1.8.4"
# [NO_REMOVE_ONE_LEVEL]
# [WORKING_DIRECTORY <${CURRENT_BUILDTREES_DIR}/src>]
# [PATCHES <a.patch>...]
)

# Copy CMakeLists.txt to the source, because Irrlicht does not have one.
file(COPY ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt DESTINATION ${SOURCE_PATH})

set(FAST_MATH FALSE)
if("fast-fpu" IN_LIST FEATURES)
set(FAST_MATH TRUE)
endif()

set(BUILD_TOOLS FALSE)
if("tools" IN_LIST FEATURES)
set(BUILD_TOOLS TRUE)
endif()

set(SHARED_LIB TRUE)
if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
set(SHARED_LIB FALSE)
endif()

vcpkg_configure_cmake(
SOURCE_PATH ${SOURCE_PATH}
PREFER_NINJA # Disable this option if project cannot be built with Ninja
OPTIONS
-DIRR_SHARED_LIB=${SHARED_LIB}
-DIRR_FAST_MATH=${FAST_MATH}
-DIRR_BUILD_TOOLS=${BUILD_TOOLS}
# OPTIONS_RELEASE -DOPTIMIZE=1
# OPTIONS_DEBUG -DDEBUGGABLE=1
)

vcpkg_install_cmake()

vcpkg_fixup_cmake_targets()

if(BUILD_TOOLS)
vcpkg_copy_tool_dependencies(${CURRENT_PACKAGES_DIR}/tools/irrlicht/)
endif()

file(WRITE ${CURRENT_PACKAGES_DIR}/share/irrlicht/irrlicht-config.cmake "include(\${CMAKE_CURRENT_LIST_DIR}/irrlicht-targets.cmake)")
# Handle copyright
file(WRITE ${CURRENT_PACKAGES_DIR}/share/irrlicht/copyright "
The Irrlicht Engine License
===========================
Copyright (C) 2002-2015 Nikolaus Gebhardt
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgement in the product documentation would be
appreciated but is not required.
2. Altered source versions must be clearly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.")

vcpkg_copy_pdbs()

# Post-build test for cmake libraries
vcpkg_test_cmake(PACKAGE_NAME irrlicht)

0 comments on commit ecff299

Please sign in to comment.