[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? # 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? # 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. 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_ _-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 Place, Suite 330, Boston, MA 02111-1307 USA
*/ */
#include "capture/interface.h" #include "interface/capture.h"
#include "app.h" #include "interface/platform.h"
#include "debug.h" #include "debug.h"
#include "windows/windebug.h" #include "windows/windebug.h"

View File

@ -20,9 +20,9 @@ Place, Suite 330, Boston, MA 02111-1307 USA
#include <windows.h> #include <windows.h>
#include <setupapi.h> #include <setupapi.h>
#include "app.h" #include "interface/platform.h"
#include "debug.h" #include "debug.h"
#include "windebug.h" #include "windows/windebug.h"
#include "ivshmem/Public.h" #include "ivshmem/Public.h"
static HANDLE shmemHandle = INVALID_HANDLE_VALUE; 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 Place, Suite 330, Boston, MA 02111-1307 USA
*/ */
#include "windebug.h" #include "windows/windebug.h"
#include <stdio.h> #include <stdio.h>
void DebugWinError(const char * file, const unsigned int line, const char * function, const char * desc, HRESULT status) 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 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 <stdio.h>
#include <inttypes.h> #include <inttypes.h>
@ -26,7 +28,6 @@ Place, Suite 330, Boston, MA 02111-1307 USA
#include <string.h> #include <string.h>
#include "debug.h" #include "debug.h"
#include "locking.h" #include "locking.h"
#include "capture/interfaces.h"
#include "KVMFR.h" #include "KVMFR.h"
#define ALIGN_DN(x) ((uintptr_t)(x) & ~0x7F) #define ALIGN_DN(x) ((uintptr_t)(x) & ~0x7F)