singe/CMakeLists.txt
2024-03-18 20:40:43 -05:00

419 lines
9.6 KiB
CMake

#
# Singe 2
# Copyright (C) 2006-2024 Scott Duensing <scott@kangaroopunch.com>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public Licens
# as published by the Free Software Foundation; either version 3
# 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., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.
#
cmake_minimum_required(VERSION 3.22)
set(CMAKE_CXX_STANDARD 17)
project(singe2)
if(NOT DEFINED KANGAROO_OS)
set(KANGAROO_OS linux)
endif()
if(NOT DEFINED KANGAROO_ARCH)
set(KANGAROO_ARCH x86_64)
endif()
set(BUILD_DIR ${CMAKE_SOURCE_DIR}/.builddir/${KANGAROO_OS}/${KANGAROO_ARCH})
set(SINGE_SOURCE
src/main.h
src/singe.c
src/singe.h
src/util.h
src/embedded.h
src/frameFile.h
src/main.c
src/common.h
src/videoPlayer.c
src/stddclmr.h
src/frameFile.c
src/videoPlayer.h
src/util.c
)
set(ARG_PARSER_SOURCE
thirdparty/arg_parser/carg_parser.c
thirdparty/arg_parser/carg_parser.h
)
set(JBIG_SOURCE
thirdparty/jbigkit/libjbig/jbig.c
thirdparty/jbigkit/libjbig/jbig.h
thirdparty/jbigkit/libjbig/jbig_ar.c
thirdparty/jbigkit/libjbig/jbig_ar.h
)
set(LUA_SOURCE
thirdparty/lua/src/lmem.h
thirdparty/lua/src/ltm.h
thirdparty/lua/src/lutf8lib.c
thirdparty/lua/src/ldo.h
thirdparty/lua/src/ldump.c
thirdparty/lua/src/lstring.h
thirdparty/lua/src/lparser.h
thirdparty/lua/src/lcorolib.c
thirdparty/lua/src/loslib.c
thirdparty/lua/src/lparser.c
thirdparty/lua/src/ltablib.c
thirdparty/lua/src/ltable.c
thirdparty/lua/src/ljumptab.h
thirdparty/lua/src/luaconf.h
thirdparty/lua/src/lstate.c
thirdparty/lua/src/lobject.h
thirdparty/lua/src/lstate.h
thirdparty/lua/src/ldo.c
thirdparty/lua/src/lfunc.c
thirdparty/lua/src/lmathlib.c
thirdparty/lua/src/lua.h
thirdparty/lua/src/lauxlib.h
thirdparty/lua/src/ltm.c
thirdparty/lua/src/lstrlib.c
thirdparty/lua/src/lapi.h
thirdparty/lua/src/lopcodes.c
thirdparty/lua/src/lvm.h
thirdparty/lua/src/linit.c
thirdparty/lua/src/lobject.c
thirdparty/lua/src/ldebug.c
thirdparty/lua/src/lctype.c
thirdparty/lua/src/lgc.c
thirdparty/lua/src/lzio.h
thirdparty/lua/src/lgc.h
thirdparty/lua/src/lctype.h
thirdparty/lua/src/lopcodes.h
thirdparty/lua/src/llimits.h
thirdparty/lua/src/lprefix.h
thirdparty/lua/src/llex.h
thirdparty/lua/src/lundump.c
thirdparty/lua/src/lbaselib.c
thirdparty/lua/src/loadlib.c
thirdparty/lua/src/ldblib.c
thirdparty/lua/src/ldebug.h
thirdparty/lua/src/lundump.h
thirdparty/lua/src/lopnames.h
thirdparty/lua/src/ltable.h
thirdparty/lua/src/lmem.c
thirdparty/lua/src/lcode.h
thirdparty/lua/src/lua.hpp
thirdparty/lua/src/lauxlib.c
thirdparty/lua/src/liolib.c
thirdparty/lua/src/lapi.c
thirdparty/lua/src/lcode.c
thirdparty/lua/src/llex.c
thirdparty/lua/src/lstring.c
thirdparty/lua/src/lvm.c
thirdparty/lua/src/lualib.h
thirdparty/lua/src/lfunc.h
thirdparty/lua/src/lzio.c
)
set(LUA_FILESYSTEM_SOURCE
thirdparty/luafilesystem/src/lfs.c
thirdparty/luafilesystem/src/lfs.h
)
set(LUA_SOCKET_SOURCE
thirdparty/luasocket/src/luasocket.h
thirdparty/luasocket/src/luasocket.c
thirdparty/luasocket/src/timeout.h
thirdparty/luasocket/src/timeout.c
thirdparty/luasocket/src/buffer.h
thirdparty/luasocket/src/buffer.c
thirdparty/luasocket/src/io.h
thirdparty/luasocket/src/io.c
thirdparty/luasocket/src/auxiliar.h
thirdparty/luasocket/src/auxiliar.c
thirdparty/luasocket/src/compat.h
thirdparty/luasocket/src/compat.c
thirdparty/luasocket/src/options.h
thirdparty/luasocket/src/options.c
thirdparty/luasocket/src/inet.h
thirdparty/luasocket/src/inet.c
thirdparty/luasocket/src/except.h
thirdparty/luasocket/src/except.c
thirdparty/luasocket/src/select.h
thirdparty/luasocket/src/select.c
thirdparty/luasocket/src/tcp.h
thirdparty/luasocket/src/tcp.c
thirdparty/luasocket/src/udp.h
thirdparty/luasocket/src/udp.c
thirdparty/luasocket/src/mime.h
thirdparty/luasocket/src/mime.c
thirdparty/luasocket/src/socket.h
thirdparty/luasocket/src/pierror.h
)
if(WIN32)
set(LUA_SOCKET_SOURCE
${LUA_SOCKET_SOURCE}
thirdparty/luasocket/src/wsocket.h
thirdparty/luasocket/src/wsocket.c
)
ELSE()
set(LUA_SOCKET_SOURCE
${LUA_SOCKET_SOURCE}
thirdparty/luasocket/src/usocket.h
thirdparty/luasocket/src/usocket.c
thirdparty/luasocket/src/unix.h
thirdparty/luasocket/src/unix.c
thirdparty/luasocket/src/unixstream.h
thirdparty/luasocket/src/unixstream.c
thirdparty/luasocket/src/unixdgram.c
thirdparty/luasocket/src/unixdgram.h
thirdparty/luasocket/src/serial.c
)
ENDIF()
set(LUASEC_SOURCE
thirdparty/luasec/src/compat.h
thirdparty/luasec/src/config.c
${BUILD_DIR}/generated/luasec_options.c
thirdparty/luasec/src/context.c
thirdparty/luasec/src/context.h
thirdparty/luasec/src/ec.c
thirdparty/luasec/src/ec.h
thirdparty/luasec/src/options.h
thirdparty/luasec/src/ssl.c
thirdparty/luasec/src/ssl.h
thirdparty/luasec/src/x509.c
thirdparty/luasec/src/x509.h
)
set(LUA_RS232_SOURCE
thirdparty/librs232/bindings/lua/luars232.c
thirdparty/librs232/src/rs232.c
)
if(WIN32)
set(LUA_RS232_SOURCE
${LUA_RS232_SOURCE}
thirdparty/librs232/src/rs232_windows.c
)
ELSE()
set(LUA_RS232_SOURCE
${LUA_RS232_SOURCE}
thirdparty/librs232/src/rs232_posix.c
)
ENDIF()
set(UTHASH_SOURCE
thirdparty/uthash/src/uthash.h
thirdparty/uthash/src/utlist.h
)
set(MANYMOUSE_SOURCE
thirdparty/manymouse/linux_evdev.c
thirdparty/manymouse/macosx_hidmanager.c
thirdparty/manymouse/macosx_hidutilities.c
thirdparty/manymouse/manymouse.c
thirdparty/manymouse/manymouse.h
thirdparty/manymouse/windows_wminput.c
thirdparty/manymouse/x11_xinput2.c
)
set(SDL2_GFX_SOURCE
thirdparty/SDL2_gfx/SDL2_rotozoom.h
thirdparty/SDL2_gfx/SDL2_rotozoom.c
)
add_executable(${CMAKE_PROJECT_NAME}
${SINGE_SOURCE}
${ARG_PARSER_SOURCE}
${JBIG_SOURCE}
${LUA_SOURCE}
${LUA_FILESYSTEM_SOURCE}
${LUA_SOCKET_SOURCE}
${LUASEC_SOURCE}
${LUA_RS232_SOURCE}
${UTHASH_SOURCE}
${MANYMOUSE_SOURCE}
${SDL2_GFX_SOURCE}
)
# Perform pre-build operations.
#add_custom_target(BUILD_PREREQS
# COMMAND ${BUILD_DIR}-deps.sh "${CMAKE_SOURCE_DIR}"
# BYPRODUCTS
# ${CMAKE_SOURCE_DIR}/thirdparty-installed/lib/libarchive.a
#)
#add_dependencies(${CMAKE_PROJECT_NAME} BUILD_PREREQS)
if(WIN32)
# Note: _WIN32_WINNT=0x0600 sets the minimum compatible version of
# Windows to Vista. The function inet_pton() does not exist before then.
set(DEFINE_LIST
-Dmain=SDL_main
-D_WIN32_WINNT=0x0600
)
else()
set(DEFINE_LIST)
endif()
target_compile_options(${CMAKE_PROJECT_NAME} PUBLIC
${DEFINE_LIST}
-DRS232_STATIC
-DFFMS_STATIC
-Wno-deprecated-declarations
)
target_include_directories(${CMAKE_PROJECT_NAME} PUBLIC
${BUILD_DIR}
${BUILD_DIR}/include
${BUILD_DIR}/include/SDL2
thirdparty/lua/src
thirdparty/luasec/src
thirdparty/librs232/include
)
target_link_directories(${CMAKE_PROJECT_NAME} PUBLIC
${BUILD_DIR}/lib
)
if(${KANGAROO_OS} STREQUAL "linux")
set(LIB_LIST
-lX11
-lvdpau
${BUILD_DIR}/lib/libjpeg.a
${BUILD_DIR}/lib/libpng.a
-lstdc++
)
endif()
if(${KANGAROO_OS} STREQUAL "pi")
set(LIB_LIST
${BUILD_DIR}/lib/libjpeg.a
${BUILD_DIR}/lib/libpng.a
-lstdc++
)
endif()
if(${KANGAROO_OS} STREQUAL "macos")
set(LIB_LIST
-Wl,-framework,CoreVideo
-Wl,-framework,Cocoa
-Wl,-framework,IOKit
-Wl,-framework,ForceFeedback
-Wl,-framework,Carbon
-Wl,-framework,CoreAudio
-Wl,-framework,AudioToolbox
-Wl,-framework,AVFoundation
-Wl,-framework,Foundation
-Wl,-weak_framework,GameController
-Wl,-weak_framework,Metal
-Wl,-weak_framework,QuartzCore
-Wl,-weak_framework,CoreHaptics
-liconv
-lc++
${OSXCROSS_TARGET_DIR}/darwin/libclang_rt.osx.a
)
endif()
if(${KANGAROO_OS} STREQUAL "windows")
set(LIB_LIST
-mwindows
-static
-lmingw32
-latomic
-lole32
-luser32
-lkernel32
-lgdi32
-lwinmm
-limm32
-loleaut32
-lversion
-luuid
-ladvapi32
-lsetupapi
-lshell32
-ldinput8
-lws2_32
-lbcrypt
-lssp
-lcrypt32
${BUILD_DIR}/lib/libjpeg.a
${BUILD_DIR}/lib/libpng.a
-lstdc++
)
endif()
set(LIB_LIST
${LIB_LIST}
${BUILD_DIR}/lib/libarchive.a
${BUILD_DIR}/lib/libavcodec.a
${BUILD_DIR}/lib/libavdevice.a
${BUILD_DIR}/lib/libavfilter.a
${BUILD_DIR}/lib/libavformat.a
# ${BUILD_DIR}/lib/libavif.a
${BUILD_DIR}/lib/libavutil.a
# ${BUILD_DIR}/lib/libbrotlicommon-static.a
# ${BUILD_DIR}/lib/libbrotlidec-static.a
${BUILD_DIR}/lib/libbz2_static.a
# ${BUILD_DIR}/lib/libdav1d.a
${BUILD_DIR}/lib/libffms2.a
${BUILD_DIR}/lib/libfreetype.a
# ${BUILD_DIR}/lib/libharfbuzz.a
# ${BUILD_DIR}/lib/libhwy.a
# ${BUILD_DIR}/lib/libjxl_dec.a
${BUILD_DIR}/lib/liblzma.a
${BUILD_DIR}/lib/libopus.a
${BUILD_DIR}/lib/libopusfile.a
${BUILD_DIR}/lib/libogg.a
${BUILD_DIR}/lib/libpostproc.a
${BUILD_DIR}/lib/libSDL2.a
${BUILD_DIR}/lib/libSDL2_image.a
${BUILD_DIR}/lib/libSDL2main.a
${BUILD_DIR}/lib/libSDL2_mixer.a
${BUILD_DIR}/lib/libSDL2_test.a
${BUILD_DIR}/lib/libSDL2_ttf.a
${BUILD_DIR}/lib/libswresample.a
${BUILD_DIR}/lib/libswscale.a
# ${BUILD_DIR}/lib/libtiff.a
${BUILD_DIR}/lib/libwavpack.a
${BUILD_DIR}/lib/libwebp.a
${BUILD_DIR}/lib/libwebpdemux.a
${BUILD_DIR}/lib/libxmp.a
${BUILD_DIR}/lib/libz.a
${BUILD_DIR}/lib/libzstd.a
${BUILD_DIR}/lib/libcrypto.a
${BUILD_DIR}/lib/libssl.a
)
target_link_libraries(${CMAKE_PROJECT_NAME}
# -Wl,--start-group
${LIB_LIST}
${LIB_LIST}
${LIB_LIST}
# -Wl,--end-group
-pthread
-lm
)
install(TARGETS ${CMAKE_PROJECT_NAME})