[c-host] restructure project to use cmake

This commit is contained in:
Geoffrey McRae 2019-04-09 16:28:11 +10:00
parent ccd0fd8902
commit a82b1a2e2f
25 changed files with 237 additions and 99 deletions

2
c-host/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
build/
*.swp

63
c-host/CMakeLists.txt Normal file
View File

@ -0,0 +1,63 @@
cmake_minimum_required(VERSION 3.0)
project(looking-glass-host C)
set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/")
include(CheckCCompilerFlag)
include(FeatureSummary)
option(OPTIMIZE_FOR_NATIVE "Build with -march=native" ON)
if(OPTIMIZE_FOR_NATIVE)
CHECK_C_COMPILER_FLAG("-march=native" COMPILER_SUPPORTS_MARCH_NATIVE)
if(COMPILER_SUPPORTS_MARCH_NATIVE)
add_compile_options("-march=native")
endif()
endif()
add_compile_options(
"-Wall"
"-Werror"
"-Wfatal-errors"
"-ffast-math"
"-fdata-sections"
"-ffunction-sections"
"$<$<CONFIG:DEBUG>:-O0;-g3;-ggdb>"
)
set(CMAKE_EXE_LINKER FLAGS "-Wl,--gc-sections")
set(CMAKE_C_STANDARD 11)
execute_process(
COMMAND cat ../VERSION
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
OUTPUT_VARIABLE BUILD_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE
)
add_definitions(-D BUILD_VERSION='"${BUILD_VERSION}"')
include_directories(
${PROJECT_SOURCE_DIR}/include
${CMAKE_BINARY_DIR}/include
${PROJECT_SOURCE_DIR}/../common
${PROJECT_SOURCE_DIR}/../vendor/kvm-guest-drivers-windows
${PKGCONFIG_INCLUDE_DIRS}
${GMP_INCLUDE_DIR}
)
#link_libraries(
#)
set(SOURCES
src/app.c
)
add_subdirectory(platform)
add_executable(looking-glass-host ${SOURCES})
target_link_libraries(looking-glass-host
platform
)
install(PROGRAMS ${CMAKE_BINARY_DIR}/looking-glass-host DESTINATION bin/ COMPONENT binary)
feature_summary(WHAT ENABLED_FEATURES DISABLED_FEATURES)

View File

@ -1,52 +0,0 @@
USE_DXGI ?= 1
USE_XCB ?= 1
OUTPUT = looking-glass-host
EXT =
CFLAGS = -std=gnu99 -Wall -Werror
CFLAGS += -g -O3
CFLAGS += -I.
CFLAGS += -I../common
OBJS = app.o
# if windows
ifdef OS
CC = gcc.exe
LDFLAGS = -L./windows/dll -mwindows
LIBS += -lsetupapi
OBJS += windows/platform.o
OBJS += windows/windebug.o
CFLAGS += -I../vendor/kvm-guest-drivers-windows
EXT = .exe
ifeq ($(USE_DXGI), 1)
CFLAGS += -DUSE_DXGI -DCOBJMACROS -DINITGUID
LIBS += -ld3d11 -ldxgi
DLLS += windows/dll/libd3d11.a
OBJS += windows/capture/dxgi.o
endif
else
CC = gcc
OBJS += linux/platform.o
LIBS += -lpthread
ifeq ($(USE_XCB), 1)
CFLAGS += -DUSE_XCB
LIBS += -lxcb -lxcb-shm -lXfixes
OBJS += linux/capture/xcb.o
endif
endif
all: $(OBJS) $(DLLS)
$(CC) $(CFLAGS) $(LDFLAGS) -o $(OUTPUT)$(EXT) $(OBJS) $(LIBS)
clean:
rm -v $(OBJS) $(DLLS) $(OUTPUT)$(EXT)
%.o: %.c
$(CC) $(CFLAGS) -c -o $@ $<
%.a: %.def
dlltool --def $< --output-lib $@

View File

@ -25,10 +25,20 @@ Yes, but only when it is feature complete.
# Why doesn't this use CMake?
Because win-builds doesn't distribute it, so to make it easy for everyone to compile we do not require it.
It does now...
~~Because win-builds doesn't distribute it, so to make it easy for everyone to compile we do not require it.~~
# How do I build it?
Don't ask if you can't figure it out, this code is the very definition of experiemental and incomplete and should not be in use yet.
Hint:
```
mkdir build
cd build
cmake -G "MSYS Makefiles" ..
make
```
_-Geoff_

View File

@ -1,39 +0,0 @@
/*
Looking Glass - KVM FrameRelay (KVMFR) Client
Copyright (C) 2017-2019 Geoffrey McRae <geoff@hostfission.com>
https://looking-glass.hostfission.com
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation; either version 2 of the License, or (at your option) any later
version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "interface.h"
#if defined(USE_DXGI)
struct CaptureInterface Capture_DXGI;
#endif
#if defined(USE_XCB)
struct CaptureInterface Capture_XCB;
#endif
struct CaptureInterface * CaptureInterfaces[] =
{
#if defined(USE_DXGI)
&Capture_DXGI,
#endif
#if defined(USE_XCB)
&Capture_XCB,
#endif
NULL
};

View File

@ -0,0 +1,15 @@
list(REMOVE_AT CAPTURE 0)
list(REMOVE_AT CAPTURE_LINK 0)
list(LENGTH CAPTURE CAPTURE_COUNT)
file(APPEND ${CAPTURE_H} "#define LG_CAPTURE_COUNT ${CAPTURE_COUNT}\n")
foreach(renderer ${CAPTURE})
file(APPEND ${CAPTURE_C} "extern CaptureInterface Capture_${renderer};\n")
endforeach()
file(APPEND ${CAPTURE_C} "\nconst CaptureInterface * CaptureInterfaces[] =\n{\n")
foreach(renderer ${CAPTURE})
file(APPEND ${CAPTURE_C} " &Capture_${renderer},\n")
endforeach()
file(APPEND ${CAPTURE_C} " NULL\n};")

View File

@ -0,0 +1,16 @@
set(CAPTURE_H "${CMAKE_BINARY_DIR}/include/dynamic/capture.h")
set(CAPTURE_C "${CMAKE_BINARY_DIR}/src/capture.c")
file(WRITE ${CAPTURE_H} "#include \"interface/capture.h\"\n\n")
file(APPEND ${CAPTURE_H} "extern CaptureInterface * CaptureInterfaces[];\n\n")
file(WRITE ${CAPTURE_C} "#include \"interface/capture.h\"\n\n")
file(APPEND ${CAPTURE_C} "#include <stddef.h>\n\n")
set(CAPTURE "_")
set(CAPTURE_LINK "_")
function(add_capture name)
set(CAPTURE "${CAPTURE};${name}" PARENT_SCOPE)
set(CAPTURE_LINK "${CAPTURE_LINK};capture_${name}" PARENT_SCOPE)
add_subdirectory(${name})
endfunction()

View File

@ -0,0 +1,13 @@
cmake_minimum_required(VERSION 3.0)
project(platform LANGUAGES C)
if (UNIX)
set(PLATFORM "Linux")
elseif(WIN32)
set(PLATFORM "Windows")
endif()
add_subdirectory(${PLATFORM})
add_library(platform INTERFACE)
target_link_libraries(platform INTERFACE platform_${PLATFORM})

View File

@ -0,0 +1,22 @@
cmake_minimum_required(VERSION 3.0)
project(platform_Linux LANGUAGES C)
include_directories(
${PROJECT_SOURCE_DIR}/include
)
add_library(platform_Linux STATIC
src/platform.c
)
add_subdirectory("capture")
target_link_libraries(platform_Linux
capture
pthread
)
target_include_directories(platform_Linux
PRIVATE
src
)

View File

@ -0,0 +1,11 @@
cmake_minimum_required(VERSION 3.0)
project(capture LANGUAGES C)
include("PreCapture")
add_capture("XCB")
include("PostCapture")
add_library(capture STATIC ${CAPTURE_C})
target_link_libraries(capture ${CAPTURE_LINK})

View File

@ -0,0 +1,17 @@
cmake_minimum_required(VERSION 3.0)
project(capture_XCB LANGUAGES C)
add_library(capture_XCB STATIC
src/xcb.c
)
target_link_libraries(capture_XCB
xcb
xcb-shm
Xfixes
)
target_include_directories(capture_XCB
PRIVATE
src
)

View File

@ -0,0 +1,23 @@
cmake_minimum_required(VERSION 3.0)
project(platform_Windows LANGUAGES C)
include_directories(
${PROJECT_SOURCE_DIR}/include
)
add_library(platform_Windows STATIC
src/platform.c
src/windebug.c
)
add_subdirectory("capture")
target_link_libraries(platform_Windows
capture
setupapi
)
target_include_directories(platform_Windows
PRIVATE
src
)

View File

@ -0,0 +1,11 @@
cmake_minimum_required(VERSION 3.0)
project(capture LANGUAGES C)
include("PreCapture")
add_capture("DXGI")
include("PostCapture")
add_library(capture STATIC ${CAPTURE_C})
target_link_libraries(capture ${CAPTURE_LINK})

View File

@ -0,0 +1,25 @@
cmake_minimum_required(VERSION 3.0)
project(capture_DXGI LANGUAGES C)
add_library(capture_DXGI STATIC
src/dxgi.c
)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DCOBJMACROS -DINITGUID")
FIND_PROGRAM(DLLTOOL_EXECUTABLE NAMES "dlltool.exe" DOC "dlltool executable")
ADD_CUSTOM_COMMAND(TARGET capture_DXGI POST_BUILD
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}/dll"
COMMAND ${DLLTOOL_EXECUTABLE} --def libd3d11.def --output-lib "${PROJECT_BINARY_DIR}/libd3d11.dll"
VERBATIM
)
target_link_libraries(capture_DXGI
${PROJECT_BINARY_DIR}/libd3d11.dll
dxgi
)
target_include_directories(capture_DXGI
PRIVATE
src
)

View File

@ -17,8 +17,8 @@ this program; if not, write to the Free Software Foundation, Inc., 59 Temple
Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "capture/interface.h"
#include "app.h"
#include "interface/capture.h"
#include "interface/platform.h"
#include "debug.h"
#include "windows/windebug.h"

View File

@ -20,9 +20,9 @@ Place, Suite 330, Boston, MA 02111-1307 USA
#include <windows.h>
#include <setupapi.h>
#include "app.h"
#include "interface/platform.h"
#include "debug.h"
#include "windebug.h"
#include "windows/windebug.h"
#include "ivshmem/Public.h"
static HANDLE shmemHandle = INVALID_HANDLE_VALUE;

View File

@ -17,7 +17,7 @@ this program; if not, write to the Free Software Foundation, Inc., 59 Temple
Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "windebug.h"
#include "windows/windebug.h"
#include <stdio.h>
void DebugWinError(const char * file, const unsigned int line, const char * function, const char * desc, HRESULT status)

View File

@ -17,7 +17,9 @@ this program; if not, write to the Free Software Foundation, Inc., 59 Temple
Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "app.h"
#include "interface/platform.h"
#include "interface/capture.h"
#include "dynamic/capture.h"
#include <stdio.h>
#include <inttypes.h>
@ -26,7 +28,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA
#include <string.h>
#include "debug.h"
#include "locking.h"
#include "capture/interfaces.h"
#include "KVMFR.h"
#define ALIGN_DN(x) ((uintptr_t)(x) & ~0x7F)