Skip to content
Snippets Groups Projects
Commit 65f2900a authored by Nicolai Hähnle's avatar Nicolai Hähnle Committed by Tom Denis
Browse files

Add UMR_STATIC_EXECUTABLE option for CMake


Allows building a static executable with the --server option

Signed-off-by: default avatarNicolai Hähnle <nicolai.haehnle@amd.com>
parent 9e82ac99
No related branches found
No related tags found
Loading
......@@ -61,6 +61,7 @@ include_directories(${PCIACCESS_INCLUDE_DIR})
option(BUILD_SHARED_LIBS "Build shared libraries" OFF)
option(UMR_NO_DRM "Disable libdrm functions to read memory stats (disables server and GUI)" OFF)
option(UMR_NO_LLVM "Disable LLVM shader disasm functions, suggested for LLVM < 7" OFF)
option(UMR_STATIC_EXECUTABLE "Build a static executable" OFF)
option(UMR_STATIC_LLVM "Force using static LLVM libraries instead of preferring dynamic" OFF)
option(UMR_NO_GUI "Disable umr --gui option" OFF)
option(UMR_NO_SERVER "Disable umr --server option" ${UMR_NO_GUI})
......@@ -74,6 +75,19 @@ include(CMakeDependentOption)
cmake_dependent_option(UMR_GUI "Enable umr --gui option" ON "NOT UMR_NO_GUI" OFF)
cmake_dependent_option(UMR_SERVER "Enable umr --server option" ON "NOT UMR_NO_SERVER" OFF)
if(UMR_STATIC_EXECUTABLE)
if(NOT UMR_NO_LLVM AND NOT UMR_STATIC_LLVM)
message(STATUS "Static executable build sets UMR_STATIC_LLVM = ON")
set(UMR_STATIC_LLVM ON)
endif()
if(UMR_GUI)
message(WARNING "Static executable build disables GUI")
set(UMR_GUI OFF)
endif()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -static")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static")
endif()
if(UMR_NO_DRM)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DUMR_NO_DRM")
......@@ -114,30 +128,33 @@ if(UMR_GUI AND NOT UMR_SERVER)
endif()
if(UMR_GUI OR UMR_SERVER)
set(OpenGL_GL_PREFERENCE "LEGACY" CACHE STRING "Select OpenGL version [LEGACY, GLVND]")
check_symbol_exists(SYS_pidfd_getfd sys/syscall.h HAVE_SYS_PIDFD_GETFD)
check_symbol_exists(SYS_pidfd_open sys/syscall.h HAVE_SYS_PIDFD_OPEN)
if(NOT UMR_STATIC_EXECUTABLE)
set(OpenGL_GL_PREFERENCE "LEGACY" CACHE STRING "Select OpenGL version [LEGACY, GLVND]")
check_symbol_exists(SYS_pidfd_getfd sys/syscall.h HAVE_SYS_PIDFD_GETFD)
check_symbol_exists(SYS_pidfd_open sys/syscall.h HAVE_SYS_PIDFD_OPEN)
if (HAVE_SYS_PIDFD_GETFD AND HAVE_SYS_PIDFD_OPEN)
find_package(OpenGL COMPONENTS EGL OpenGL)
pkg_check_modules(GBM IMPORTED_TARGET gbm)
add_definitions(-DCAN_IMPORT_BO=1)
if (HAVE_SYS_PIDFD_GETFD AND HAVE_SYS_PIDFD_OPEN)
find_package(OpenGL COMPONENTS EGL OpenGL)
pkg_check_modules(GBM IMPORTED_TARGET gbm)
add_definitions(-DCAN_IMPORT_BO=1)
set(BO_IMPORT_LIBS OpenGL::EGL PkgConfig::DRM PkgConfig::GBM)
else()
# if(UMR_GUI) OpenGL isn't needed for server-only builds
find_package(OpenGL COMPONENTS OpenGL)
# endif()
set(BO_IMPORT_LIBS "")
set(BO_IMPORT_LIBS OpenGL::EGL PkgConfig::DRM PkgConfig::GBM)
else()
# if(UMR_GUI) OpenGL isn't needed for server-only builds
find_package(OpenGL COMPONENTS OpenGL)
# endif()
set(BO_IMPORT_LIBS "")
endif()
if (OpenGL_OpenGL_FOUND AND (NOT BO_IMPORT_LIBS OR (OpenGL_EGL_FOUND AND DRM_FOUND AND GBM_FOUND)))
set(REQUIRED_EXTERNAL_LIBS_GUI ${REQUIRED_EXTERNAL_LIBS_GUI} OpenGL::GL ${BO_IMPORT_LIBS})
else()
message(WARNING "Required library (drm: ${DRM_FOUND}, gbm: ${GBM_FOUND}, OpenGL: ${OpenGL_OpenGL_FOUND}, EGL: ${OpenGL_EGL_FOUND}) not found. Disabling --gui")
set (UMR_GUI OFF)
endif()
endif()
if (OpenGL_OpenGL_FOUND AND (NOT BO_IMPORT_LIBS OR (OpenGL_EGL_FOUND AND DRM_FOUND AND GBM_FOUND)))
set(REQUIRED_EXTERNAL_LIBS_GUI ${REQUIRED_EXTERNAL_LIBS_GUI} OpenGL::GL ${BO_IMPORT_LIBS} parson)
else()
message(WARNING "Required library (drm: ${DRM_FOUND}, gbm: ${GBM_FOUND}, OpenGL: ${OpenGL_OpenGL_FOUND}, EGL: ${OpenGL_EGL_FOUND}) not found. Disabling --gui and --server")
set (UMR_GUI OFF)
set (UMR_SERVER OFF)
endif()
set(REQUIRED_EXTERNAL_LIBS_GUI ${REQUIRED_EXTERNAL_LIBS_GUI} parson)
endif()
if(UMR_GUI)
......
......@@ -81,6 +81,26 @@ environment. e.g.,
$ cmake -DUMR_NO_SERVER=ON ...
NOTE: You can build a static UMR executable by adding UMR_STATIC_EXECUTABLE
to your environment:
$ cmake -DUMR_STATIC_EXECUTABLE=ON ...
This makes it easier to distribute UMR to test machines. However, static
executable builds have some limitations:
* GUI is not supported
* BO import is not supported
* Hostname lookup when specifying addresses on the command-line may not work
* NanoMsg only builds a shared library by default. If you want GUI server
support, you may have to build and install your own static NanoMsg library
from source and set the PKG_CONFIG_PATH environment variable appropriately.
You may also see linker warnings:
* A warning related to the getaddrinfo limitation.
* Warnings related to libLLVMSupport.a; those are harmless.
Running umr
------------
......
......@@ -6,7 +6,6 @@ include_directories(inc)
if(UMR_GUI OR UMR_SERVER)
include_directories("gui/parson")
set (GUI_SOURCE gui/commands.c)
set (UMRAPP_DRM_LIBS "PkgConfig::DRM")
endif()
if(UMR_GUI)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment