From f8a3ff08795a1fa40a012fe41a497abeaaed88f9 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Tue, 20 Aug 2019 15:53:47 +0800 Subject: [PATCH] first commit --- FindValgrind.cmake | 22 ++++++++++++ FindVulkan.cmake | 81 +++++++++++++++++++++++++++++++++++++++++++++ FindWayland.cmake | 66 ++++++++++++++++++++++++++++++++++++ FindX11_XCB.cmake | 32 ++++++++++++++++++ FindXCB.cmake | 51 ++++++++++++++++++++++++++++ compiler.cmake | 47 ++++++++++++++++++++++++++ output_path.cmake | 33 ++++++++++++++++++ system_bit.cmake | 31 +++++++++++++++++ use_cm_module.cmake | 5 +++ version.cmake | 25 ++++++++++++++ 10 files changed, 393 insertions(+) create mode 100644 FindValgrind.cmake create mode 100644 FindVulkan.cmake create mode 100644 FindWayland.cmake create mode 100644 FindX11_XCB.cmake create mode 100644 FindXCB.cmake create mode 100644 compiler.cmake create mode 100644 output_path.cmake create mode 100644 system_bit.cmake create mode 100644 use_cm_module.cmake create mode 100644 version.cmake diff --git a/FindValgrind.cmake b/FindValgrind.cmake new file mode 100644 index 0000000..5c1fb56 --- /dev/null +++ b/FindValgrind.cmake @@ -0,0 +1,22 @@ +# - FindValgrind +# +# Copyright (C) 2015 Valve Corporation + +find_package(PkgConfig) + +pkg_check_modules(PC_VALGRIND QUIET valgrind) + +find_path(VALGRIND_INCLUDE_DIR NAMES valgrind.h memcheck.h + HINTS + ${PC_VALGRIND_INCLUDEDIR} + ${PC_VALGRIND_INCLUDE_DIRS} + ) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Valgrind DEFAULT_MSG + VALGRIND_INCLUDE_DIR) + +mark_as_advanced(VALGRIND_INCLUDE_DIR) + +set(VALGRIND_INCLUDE_DIRS ${VALGRIND_INCLUDE_DIR}) +set(VALGRIND_LIBRARIES "") diff --git a/FindVulkan.cmake b/FindVulkan.cmake new file mode 100644 index 0000000..41496a6 --- /dev/null +++ b/FindVulkan.cmake @@ -0,0 +1,81 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +#.rst: +# FindVulkan +# ---------- +# +# Try to find Vulkan +# +# IMPORTED Targets +# ^^^^^^^^^^^^^^^^ +# +# This module defines :prop_tgt:`IMPORTED` target ``Vulkan::Vulkan``, if +# Vulkan has been found. +# +# Result Variables +# ^^^^^^^^^^^^^^^^ +# +# This module defines the following variables:: +# +# Vulkan_FOUND - True if Vulkan was found +# Vulkan_INCLUDE_DIRS - include directories for Vulkan +# Vulkan_LIBRARIES - link against this library to use Vulkan +# +# The module will also define two cache variables:: +# +# Vulkan_INCLUDE_DIR - the Vulkan include directory +# Vulkan_LIBRARY - the path to the Vulkan library +# + +if(WIN32) + find_path(Vulkan_INCLUDE_DIR + NAMES vulkan/vulkan.h + PATHS + "$ENV{VULKAN_SDK}/Include" + ) + + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + find_library(Vulkan_LIBRARY + NAMES vulkan-1 + PATHS + "$ENV{VULKAN_SDK}/Lib" + "$ENV{VULKAN_SDK}/Bin" + ) + elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) + find_library(Vulkan_LIBRARY + NAMES vulkan-1 + PATHS + "$ENV{VULKAN_SDK}/Lib32" + "$ENV{VULKAN_SDK}/Bin32" + NO_SYSTEM_ENVIRONMENT_PATH + ) + endif() +else() + find_path(Vulkan_INCLUDE_DIR + NAMES vulkan/vulkan.h + PATHS + "$ENV{VULKAN_SDK}/include") + find_library(Vulkan_LIBRARY + NAMES vulkan + PATHS + "$ENV{VULKAN_SDK}/lib") +endif() + +set(Vulkan_LIBRARIES ${Vulkan_LIBRARY}) +set(Vulkan_INCLUDE_DIRS ${Vulkan_INCLUDE_DIR}) + +#include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Vulkan + DEFAULT_MSG + Vulkan_LIBRARY Vulkan_INCLUDE_DIR) + +mark_as_advanced(Vulkan_INCLUDE_DIR Vulkan_LIBRARY) + +if(Vulkan_FOUND AND NOT TARGET Vulkan::Vulkan) + add_library(Vulkan::Vulkan UNKNOWN IMPORTED) + set_target_properties(Vulkan::Vulkan PROPERTIES + IMPORTED_LOCATION "${Vulkan_LIBRARIES}" + INTERFACE_INCLUDE_DIRECTORIES "${Vulkan_INCLUDE_DIRS}") +endif() diff --git a/FindWayland.cmake b/FindWayland.cmake new file mode 100644 index 0000000..f93218b --- /dev/null +++ b/FindWayland.cmake @@ -0,0 +1,66 @@ +# Try to find Wayland on a Unix system +# +# This will define: +# +# WAYLAND_FOUND - True if Wayland is found +# WAYLAND_LIBRARIES - Link these to use Wayland +# WAYLAND_INCLUDE_DIR - Include directory for Wayland +# WAYLAND_DEFINITIONS - Compiler flags for using Wayland +# +# In addition the following more fine grained variables will be defined: +# +# WAYLAND_CLIENT_FOUND WAYLAND_CLIENT_INCLUDE_DIR WAYLAND_CLIENT_LIBRARIES +# WAYLAND_SERVER_FOUND WAYLAND_SERVER_INCLUDE_DIR WAYLAND_SERVER_LIBRARIES +# WAYLAND_EGL_FOUND WAYLAND_EGL_INCLUDE_DIR WAYLAND_EGL_LIBRARIES +# +# Copyright (c) 2013 Martin Gräßlin +# +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. + +IF (NOT WIN32) + IF (WAYLAND_INCLUDE_DIR AND WAYLAND_LIBRARIES) + # In the cache already + SET(WAYLAND_FIND_QUIETLY TRUE) + ENDIF () + + # Use pkg-config to get the directories and then use these values + # in the FIND_PATH() and FIND_LIBRARY() calls + FIND_PACKAGE(PkgConfig) + PKG_CHECK_MODULES(PKG_WAYLAND QUIET wayland-client wayland-server wayland-egl wayland-cursor) + + SET(WAYLAND_DEFINITIONS ${PKG_WAYLAND_CFLAGS}) + + FIND_PATH(WAYLAND_CLIENT_INCLUDE_DIR NAMES wayland-client.h HINTS ${PKG_WAYLAND_INCLUDE_DIRS}) + FIND_PATH(WAYLAND_SERVER_INCLUDE_DIR NAMES wayland-server.h HINTS ${PKG_WAYLAND_INCLUDE_DIRS}) + FIND_PATH(WAYLAND_EGL_INCLUDE_DIR NAMES wayland-egl.h HINTS ${PKG_WAYLAND_INCLUDE_DIRS}) + FIND_PATH(WAYLAND_CURSOR_INCLUDE_DIR NAMES wayland-cursor.h HINTS ${PKG_WAYLAND_INCLUDE_DIRS}) + + FIND_LIBRARY(WAYLAND_CLIENT_LIBRARIES NAMES wayland-client HINTS ${PKG_WAYLAND_LIBRARY_DIRS}) + FIND_LIBRARY(WAYLAND_SERVER_LIBRARIES NAMES wayland-server HINTS ${PKG_WAYLAND_LIBRARY_DIRS}) + FIND_LIBRARY(WAYLAND_EGL_LIBRARIES NAMES wayland-egl HINTS ${PKG_WAYLAND_LIBRARY_DIRS}) + FIND_LIBRARY(WAYLAND_CURSOR_LIBRARIES NAMES wayland-cursor HINTS ${PKG_WAYLAND_LIBRARY_DIRS}) + + set(WAYLAND_INCLUDE_DIR ${WAYLAND_CLIENT_INCLUDE_DIR} ${WAYLAND_SERVER_INCLUDE_DIR} ${WAYLAND_EGL_INCLUDE_DIR} ${WAYLAND_CURSOR_INCLUDE_DIR}) + + set(WAYLAND_LIBRARIES ${WAYLAND_CLIENT_LIBRARIES} ${WAYLAND_SERVER_LIBRARIES} ${WAYLAND_EGL_LIBRARIES} ${WAYLAND_CURSOR_LIBRARIES}) + + list(REMOVE_DUPLICATES WAYLAND_INCLUDE_DIR) + + include(FindPackageHandleStandardArgs) + + FIND_PACKAGE_HANDLE_STANDARD_ARGS(WAYLAND_CLIENT DEFAULT_MSG WAYLAND_CLIENT_LIBRARIES WAYLAND_CLIENT_INCLUDE_DIR) + FIND_PACKAGE_HANDLE_STANDARD_ARGS(WAYLAND_SERVER DEFAULT_MSG WAYLAND_SERVER_LIBRARIES WAYLAND_SERVER_INCLUDE_DIR) + FIND_PACKAGE_HANDLE_STANDARD_ARGS(WAYLAND_EGL DEFAULT_MSG WAYLAND_EGL_LIBRARIES WAYLAND_EGL_INCLUDE_DIR) + FIND_PACKAGE_HANDLE_STANDARD_ARGS(WAYLAND_CURSOR DEFAULT_MSG WAYLAND_CURSOR_LIBRARIES WAYLAND_CURSOR_INCLUDE_DIR) + FIND_PACKAGE_HANDLE_STANDARD_ARGS(WAYLAND DEFAULT_MSG WAYLAND_LIBRARIES WAYLAND_INCLUDE_DIR) + + MARK_AS_ADVANCED( + WAYLAND_INCLUDE_DIR WAYLAND_LIBRARIES + WAYLAND_CLIENT_INCLUDE_DIR WAYLAND_CLIENT_LIBRARIES + WAYLAND_SERVER_INCLUDE_DIR WAYLAND_SERVER_LIBRARIES + WAYLAND_EGL_INCLUDE_DIR WAYLAND_EGL_LIBRARIES + WAYLAND_CURSOR_INCLUDE_DIR WAYLAND_CURSOR_LIBRARIES + ) + +ENDIF () diff --git a/FindX11_XCB.cmake b/FindX11_XCB.cmake new file mode 100644 index 0000000..956bf89 --- /dev/null +++ b/FindX11_XCB.cmake @@ -0,0 +1,32 @@ +# - Try to find libX11-xcb +# Once done this will define +# +# X11_XCB_FOUND - system has libX11-xcb +# X11_XCB_LIBRARIES - Link these to use libX11-xcb +# X11_XCB_INCLUDE_DIR - the libX11-xcb include dir +# X11_XCB_DEFINITIONS - compiler switches required for using libX11-xcb + +# Copyright (c) 2011 Fredrik Höglund +# Copyright (c) 2008 Helio Chissini de Castro, +# Copyright (c) 2007 Matthias Kretz, +# +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. + +IF (NOT WIN32) + # use pkg-config to get the directories and then use these values + # in the FIND_PATH() and FIND_LIBRARY() calls + FIND_PACKAGE(PkgConfig) + PKG_CHECK_MODULES(PKG_X11_XCB QUIET x11-xcb) + + SET(X11_XCB_DEFINITIONS ${PKG_X11_XCB_CFLAGS}) + + FIND_PATH(X11_XCB_INCLUDE_DIR NAMES X11/Xlib-xcb.h HINTS ${PKG_X11_XCB_INCLUDE_DIRS}) + FIND_LIBRARY(X11_XCB_LIBRARIES NAMES X11-xcb HINTS ${PKG_X11_XCB_LIBRARY_DIRS}) + + include(FindPackageHandleStandardArgs) + FIND_PACKAGE_HANDLE_STANDARD_ARGS(X11_XCB DEFAULT_MSG X11_XCB_LIBRARIES X11_XCB_INCLUDE_DIR) + + MARK_AS_ADVANCED(X11_XCB_INCLUDE_DIR X11_XCB_LIBRARIES) +ENDIF (NOT WIN32) + diff --git a/FindXCB.cmake b/FindXCB.cmake new file mode 100644 index 0000000..2311591 --- /dev/null +++ b/FindXCB.cmake @@ -0,0 +1,51 @@ +# - FindXCB +# +# Copyright (C) 2015 Valve Corporation + +find_package(PkgConfig) + +if(NOT XCB_FIND_COMPONENTS) + set(XCB_FIND_COMPONENTS xcb) +endif() + +include(FindPackageHandleStandardArgs) +set(XCB_FOUND true) +set(XCB_INCLUDE_DIRS "") +set(XCB_LIBRARIES "") +foreach(comp ${XCB_FIND_COMPONENTS}) + # component name + string(TOUPPER ${comp} compname) + string(REPLACE "-" "_" compname ${compname}) + # header name + string(REPLACE "xcb-" "" headername xcb/${comp}.h) + # library name + set(libname ${comp}) + + pkg_check_modules(PC_${comp} QUIET ${comp}) + + find_path(${compname}_INCLUDE_DIR NAMES ${headername} + HINTS + ${PC_${comp}_INCLUDEDIR} + ${PC_${comp}_INCLUDE_DIRS} + ) + + find_library(${compname}_LIBRARY NAMES ${libname} + HINTS + ${PC_${comp}_LIBDIR} + ${PC_${comp}_LIBRARY_DIRS} + ) + + find_package_handle_standard_args(${comp} + FOUND_VAR ${comp}_FOUND + REQUIRED_VARS ${compname}_INCLUDE_DIR ${compname}_LIBRARY) + mark_as_advanced(${compname}_INCLUDE_DIR ${compname}_LIBRARY) + + list(APPEND XCB_INCLUDE_DIRS ${${compname}_INCLUDE_DIR}) + list(APPEND XCB_LIBRARIES ${${compname}_LIBRARY}) + + if(NOT ${comp}_FOUND) + set(XCB_FOUND false) + endif() +endforeach() + +list(REMOVE_DUPLICATES XCB_INCLUDE_DIRS) diff --git a/compiler.cmake b/compiler.cmake new file mode 100644 index 0000000..d7f5bca --- /dev/null +++ b/compiler.cmake @@ -0,0 +1,47 @@ +macro(set_compiler_param) + + IF(WIN32) + + SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MDd") + SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MDd") + + SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /MD") + SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MD") + + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++14") + + add_compile_options(/arch:AVX2) + add_definitions(-D_CRT_SECURE_NO_WARNINGS) + + ELSE() + IF(NOT ANDROID) + IF(APPLE) + SET(USE_CLANG ON) + ELSE() + OPTION(USE_CLANG OFF) + ENDIF() + + if(USE_CLANG) + SET(CMAKE_C_COMPILER clang) + SET(CMAKE_CXX_COMPILER clang++) + endif() + ENDIF() + + add_compile_options(-mavx) + + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11") + + SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -ggdb3") + SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -ggdb3") + + SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Ofast") + SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Ofast") + ENDIF() + + MESSAGE("C Compiler: " ${CMAKE_C_COMPILER}) + MESSAGE("C++ Compiler: " ${CMAKE_CXX_COMPILER}) + MESSAGE("C Flag: " ${CMAKE_C_FLAGS}) + MESSAGE("C++ Flag: " ${CMAKE_CXX_FLAGS}) + +endmacro() diff --git a/output_path.cmake b/output_path.cmake new file mode 100644 index 0000000..b435b2f --- /dev/null +++ b/output_path.cmake @@ -0,0 +1,33 @@ +macro(set_output_directory) + + IF(ANDROID) + SET(OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/out/android/${ANDROID_ABI}) + ELSEIF(IOS) + SET(OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/out/iOS/${IOS_PLATFORM}) + ELSE() + IF(WIN32) + SET(USE_GUI ON) + ENDIF() + + SET(OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/out/${CMAKE_SYSTEM_NAME}_${HGL_BITS}) + ENDIF() + + MESSAGE("SYSTEM NAME: " ${CMAKE_SYSTEM_NAME}) + MESSAGE("OUTPUT DIRECTORY: " ${OUTPUT_DIRECTORY}) + + SET(OUTPUT_DIRECTORY_DEBUG ${OUTPUT_DIRECTORY}_Debug) + SET(OUTPUT_DIRECTORY_RELEASE ${OUTPUT_DIRECTORY}_Release) + + SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}) + SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}) + SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}) + + SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${OUTPUT_DIRECTORY_DEBUG}) + SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${OUTPUT_DIRECTORY_DEBUG}) + SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${OUTPUT_DIRECTORY_DEBUG}) + + SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${OUTPUT_DIRECTORY_RELEASE}) + SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${OUTPUT_DIRECTORY_RELEASE}) + SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${OUTPUT_DIRECTORY_RELEASE}) + +endmacro() diff --git a/system_bit.cmake b/system_bit.cmake new file mode 100644 index 0000000..cf0d8b3 --- /dev/null +++ b/system_bit.cmake @@ -0,0 +1,31 @@ +macro(check_system_bits) + + IF(APPLE) + SET(HGL_BITS 64) + ELSE() + IF(ANDROID) + if(ANDROID_ABI MATCHES ".*64.*") + SET(HGL_BITS 64) + else() + SET(HGL_BITS 32) + endif() + ELSE() + IF(CMAKE_SIZEOF_VOID_P EQUAL 8) + SET(HGL_BITS 64) + ELSE() + SET(HGL_BITS 32) + ENDIF() + endif() + endif() + + IF(HGL_BITS EQUAL 32) + add_definitions(-DHGL_32_BITS) + add_definitions(-DHGL_POINTER_UINT=uint32) + ELSE() + add_definitions(-DHGL_64_BITS) + add_definitions(-DHGL_POINTER_UINT=uint64) + ENDIF() + + Message("System is ${HGL_BITS} Bit") + +endmacro() diff --git a/use_cm_module.cmake b/use_cm_module.cmake new file mode 100644 index 0000000..9757e8a --- /dev/null +++ b/use_cm_module.cmake @@ -0,0 +1,5 @@ +macro(use_cm_module module) + add_subdirectory(CM${module}) + include(CM${module}/path_config.cmake) + include_directories(CM${module}/inc) +endmacro() \ No newline at end of file diff --git a/version.cmake b/version.cmake new file mode 100644 index 0000000..090f70d --- /dev/null +++ b/version.cmake @@ -0,0 +1,25 @@ +macro(check_system_version) + + message("Host system: " ${CMAKE_HOST_SYSTEM}) + message("Host system name: " ${CMAKE_HOST_SYSTEM_NAME}) + message("Host system version: " ${CMAKE_HOST_SYSTEM_VERSION}) + + message("Compile features: " ${CMAKE_CXX_COMPILE_FEATURES}) + message("Compile Flags: " ${CMAKE_C_FLAGS}) + message("C++ Compile Flags: " ${CMAKE_CXX_FLAGS}) + message("Build type: " ${CMAKE_BUILD_TYPE}) + + add_definitions(-DHGL_HOST_SYSTEM="${CMAKE_HOST_SYSTEM}") + + add_definitions(-DHGL_COMPILE_C_FLAGS="${CMAKE_C_FLAGS}") + add_definitions(-DHGL_COMPILE_CXX_FLAGS="${CMAKE_CXX_FLAGS}") + + add_definitions(-DCMAKE_VERSION="${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}") + + MESSAGE("C Compile Features: " ${CMAKE_C_COMPILE_FEATURES}) + MESSAGE("C++ Compile Features: " ${CMAKE_CXX_COMPILE_FEATURES}) + + # add_definitions(-DHGL_COMPILE_C_FEATURES="${CMAKE_C_COMPILE_FEATURES}") + # add_definitions(-DHGL_COMPILE_CXX_FEATURES="${CMAKE_CXX_COMPILE_FEATURES}") + +endmacro()