Update to modern standard i guess
This commit is contained in:
+175
-2
@@ -1,4 +1,177 @@
|
||||
cmake_minimum_required(VERSION 2.8.12)
|
||||
################################################################################
|
||||
# CMake Setup
|
||||
################################################################################
|
||||
cmake_minimum_required(VERSION 3.26...)
|
||||
project(BlitzLLVM)
|
||||
list(APPEND CMAKE_MESSAGE_INDENT "[${PROJECT_NAME}] ")
|
||||
|
||||
ADD_SUBDIRECTORY("projects/code_compiler")
|
||||
# Module Search Paths
|
||||
list(APPEND CMAKE_MODULE_PATH
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake-clang"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake-version"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/cmake"
|
||||
)
|
||||
|
||||
# Include default modules
|
||||
#- Interprocedural optimizations
|
||||
include("CheckIPOSupported")
|
||||
|
||||
#- CMake-based Versioning
|
||||
include("version")
|
||||
|
||||
#- CMake-based Clang integration
|
||||
include("clang")
|
||||
|
||||
|
||||
SET_PROPERTY( GLOBAL PROPERTY USE_FOLDERS ON)
|
||||
|
||||
################################################################################
|
||||
# Versioning
|
||||
################################################################################
|
||||
|
||||
version(GENERATE _VERSION COMPRESSED MAJOR 0 MINOR 0 PATCH 0 TWEAK 0 REQUIRE "PATCH;")
|
||||
version(PARSE _VERSION "${_VERSION}" REQUIRE "PATCH;TWEAK")
|
||||
|
||||
# If possible, automatically generate versions from git.
|
||||
if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/.git")
|
||||
find_program(GIT
|
||||
NAMES
|
||||
git
|
||||
git.exe
|
||||
)
|
||||
|
||||
if(EXISTS "${GIT}")
|
||||
# Try and calculate the exist version using git.
|
||||
execute_process(COMMAND "${GIT}" describe --tags --long --abbrev=8 HEAD WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} RESULT_VARIABLE GIT_RESULT OUTPUT_VARIABLE GIT_OUTPUT ERROR_VARIABLE GIT_ERROR OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_STRIP_TRAILING_WHITESPACE ERROR_QUIET)
|
||||
if((GIT_RESULT EQUAL 0) AND (NOT "${GIT_OUTPUT}" STREQUAL ""))
|
||||
# Result will be MAJOR.MINOR.PATCH-TWEAK-gHASH
|
||||
string(REPLACE "-" ";" GIT_OUTPUT "${GIT_OUTPUT}")
|
||||
string(REPLACE "." ";" GIT_OUTPUT "${GIT_OUTPUT}")
|
||||
|
||||
# Split into components
|
||||
list(GET GIT_OUTPUT 0 GIT_OUTPUT_MAJOR)
|
||||
list(GET GIT_OUTPUT 1 GIT_OUTPUT_MINOR)
|
||||
list(GET GIT_OUTPUT 2 GIT_OUTPUT_PATCH)
|
||||
list(GET GIT_OUTPUT 3 GIT_OUTPUT_TWEAK)
|
||||
list(GET GIT_OUTPUT 4 GIT_OUTPUT_BUILD)
|
||||
|
||||
# Special case: Tag contains prerelease
|
||||
if(GIT_OUTPUT_PATCH MATCHES "([0-9]+)([a-zA-Z]+)([0-9]*)")
|
||||
# Patch requires special parsing.
|
||||
set(GIT_OUTPUT_PATCH "${CMAKE_MATCH_1}")
|
||||
if(CMAKE_MATCH_3 GREATER 0)
|
||||
set(GIT_OUTPUT_PRERELEASE "${CMAKE_MATCH_2}")
|
||||
else()
|
||||
set(GIT_OUTPUT_PRERELEASE "a")
|
||||
endif()
|
||||
MATH(EXPR GIT_OUTPUT_TWEAK "${GIT_OUTPUT_TWEAK} + ${CMAKE_MATCH_3}")
|
||||
|
||||
# Modify the global version
|
||||
version(MODIFY _VERSION "${_VERSION}" COMPRESS
|
||||
MAJOR "${GIT_OUTPUT_MAJOR}"
|
||||
MINOR "${GIT_OUTPUT_MINOR}"
|
||||
PATCH "${GIT_OUTPUT_PATCH}"
|
||||
TWEAK "${GIT_OUTPUT_TWEAK}"
|
||||
BUILD "${GIT_OUTPUT_BUILD}"
|
||||
PRERELEASE "${GIT_OUTPUT_PRERELEASE}"
|
||||
REQUIRE "PATCH;TWEAK"
|
||||
)
|
||||
else()
|
||||
# Modify the global version
|
||||
version(MODIFY _VERSION "${_VERSION}" COMPRESS
|
||||
MAJOR "${GIT_OUTPUT_MAJOR}"
|
||||
MINOR "${GIT_OUTPUT_MINOR}"
|
||||
PATCH "${GIT_OUTPUT_PATCH}"
|
||||
TWEAK "${GIT_OUTPUT_TWEAK}"
|
||||
BUILD "${GIT_OUTPUT_BUILD}"
|
||||
PRERELEASE "a"
|
||||
REQUIRE "PATCH;TWEAK"
|
||||
)
|
||||
endif()
|
||||
else()
|
||||
execute_process(COMMAND "${GIT}" rev-list --count HEAD WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} RESULT_VARIABLE GIT_RESULT OUTPUT_VARIABLE GIT_OUTPUT ERROR_VARIABLE GIT_ERROR OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_STRIP_TRAILING_WHITESPACE ERROR_QUIET)
|
||||
if((GIT_RESULT EQUAL 0) AND (NOT "${GIT_OUTPUT}" STREQUAL ""))
|
||||
version(MODIFY _VERSION "${_VERSION}" COMPRESS
|
||||
TWEAK "${GIT_OUTPUT}"
|
||||
PRERELEASE "a"
|
||||
REQUIRE "PATCH;TWEAK"
|
||||
)
|
||||
|
||||
# Determine the build using git.
|
||||
execute_process(COMMAND "${GIT}" log -1 "--pretty=format:g%h" --abbrev=8 HEAD WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} RESULT_VARIABLE GIT_RESULT OUTPUT_VARIABLE GIT_OUTPUT ERROR_VARIABLE GIT_ERROR OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_STRIP_TRAILING_WHITESPACE ERROR_QUIET)
|
||||
if((GIT_RESULT EQUAL 0) AND (NOT "${GIT_OUTPUT}" STREQUAL ""))
|
||||
version(MODIFY _VERSION "${_VERSION}" COMPRESS
|
||||
BUILD "${GIT_OUTPUT}"
|
||||
REQUIRE "PATCH;TWEAK"
|
||||
)
|
||||
else()
|
||||
message(WARNING "Failed to detect build version with 'git'.")
|
||||
endif()
|
||||
else()
|
||||
message(WARNING "Failed to automatically detect version with 'git'.")
|
||||
endif()
|
||||
endif()
|
||||
else()
|
||||
message(WARNING "'git' not found, automatic version detection disabled.")
|
||||
endif()
|
||||
else()
|
||||
message(STATUS "Not a git repository, automatic version detection disabled.")
|
||||
endif()
|
||||
|
||||
# Allow manual overrides of the detected version.
|
||||
if(${PREFIX}VERSION)
|
||||
version(PARSE _VERSION_CFG "${${PREFIX}VERSION}" REQUIRE "PATCH;TWEAK")
|
||||
if("${_VERSION_CFG_BUILD}" STREQUAL "")
|
||||
set(_VERSION_CFG_BUILD "${_VERSION_BUILD}")
|
||||
endif()
|
||||
version(GENERATE _VERSION COMPRESS
|
||||
MAJOR "${_VERSION_CFG_MAJOR}"
|
||||
MINOR "${_VERSION_CFG_MINOR}"
|
||||
PATCH "${_VERSION_CFG_PATCH}"
|
||||
TWEAK "${_VERSION_CFG_TWEAK}"
|
||||
PRERELEASE "${_VERSION_CFG_PRERELEASE}"
|
||||
BUILD "${_VERSION_CFG_BUILD}"
|
||||
)
|
||||
endif()
|
||||
|
||||
# Fix up missing parts of the Version
|
||||
version(PARSE _VERSION "${_VERSION}" REQUIRE "PATCH;TWEAK")
|
||||
|
||||
set(_VERSION_THIN "${_VERSION_MAJOR}.${_VERSION_MINOR}.${_VERSION_PATCH}")
|
||||
if(NOT (_VERSION_PRERELEASE STREQUAL ""))
|
||||
set(_VERSION_THIN "${_VERSION_THIN}${_VERSION_PRERELEASE}${_VERSION_TWEAK}")
|
||||
endif()
|
||||
if(NOT (VERSION_COMMIT STREQUAL ""))
|
||||
set(_VERSION_THIN "${_VERSION_THIN}-${_VERSION_BUILD}")
|
||||
endif()
|
||||
|
||||
# Parse & Log the detected version.
|
||||
message(STATUS "Version ${_VERSION_THIN}")
|
||||
|
||||
################################################################################
|
||||
# Project
|
||||
################################################################################
|
||||
|
||||
# Metadata
|
||||
version(GENERATE PROJECT_VERSION
|
||||
MAJOR "${_VERSION_MAJOR}"
|
||||
MINOR "${_VERSION_MINOR}"
|
||||
PATCH "${_VERSION_PATCH}"
|
||||
TWEAK "${_VERSION_TWEAK}"
|
||||
REQUIRE "PATCH;TWEAK"
|
||||
)
|
||||
project(
|
||||
${PROJECT_NAME}
|
||||
VERSION ${PROJECT_VERSION}
|
||||
)
|
||||
set(PROJECT_IDENTIFER "com.xaymar.BlitzLLVM")
|
||||
set(PROJECT_TITLE "BlitzLLVM")
|
||||
set(PROJECT_AUTHORS "See AUTHORS file")
|
||||
set(PROJECT_COPYRIGHT "All Rights Reserved. See LICENSE file for more information")
|
||||
set(PROJECT_TRADEMARKS "")
|
||||
|
||||
################################################################################
|
||||
# Sub-projects
|
||||
################################################################################
|
||||
ADD_SUBDIRECTORY("code_compiler")
|
||||
|
||||
Reference in New Issue
Block a user