#------------------------------------------------------------------- # This file is part of the CMake build system for Scol # # The contents of this file are placed in the public domain. Feel # free to make use of it in any way you like. #------------------------------------------------------------------- ############################################################ # include/Scol core library ############################################################ PROJECT(kernel) # Create kernel_config.h (used only for SCOL_PTR_TYPE as of now) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/include/kernel_config.h.in ${CMAKE_CURRENT_BINARY_DIR}/include/kernel_config.h) # define os and compiler detection headers. set (OS_DETECTION_HEADER_FILES include/scolPrerequisites.h include/scolPlatform.h include/scolAndroid.h include/scolGNUC.h include/scolClang.h include/scolLinux.h include/scolOSX.h include/scolIOS.h include/scolMSC.h include/scolMsWindows.h include/scolStandardHeaders.h ) # include directories set (KERNEL_INCLUDE "${CMAKE_SOURCE_DIR}/vm/kernel5/include") set (KERNEL_3D_INCLUDE "${CMAKE_SOURCE_DIR}/vm/kernel5/include/3d") set (KERNEL_COMMON_INCLUDE "${CMAKE_SOURCE_DIR}/vm/kernel5/include/common") set (KERNEL_COMPILER_INCLUDE "${CMAKE_SOURCE_DIR}/vm/kernel5/include/compiler") set (KERNEL_NET_INCLUDE "${CMAKE_SOURCE_DIR}/vm/kernel5/include/net") set (KERNEL_VM_INCLUDE "${CMAKE_SOURCE_DIR}/vm/kernel5/include/vm") # define header and source files for the library set (CORE_HEADER_FILES include/align.h include/base.h include/base64.h include/baselib.h include/bignum.h include/cipher.h include/codec.h include/debug.h include/fifo.h include/listlab.h include/loadpak.h include/logger.h include/mainscol.h include/mbignum.h include/md5.h include/mzip.h include/opcode.h include/scol.h include/scolCbMachine.h include/scolConstants.h include/scolErrorCodes.h include/scolFindData.h include/scolMachine.h include/scolNativeFunction.h include/scolMacros.h include/scolMMemory.h include/scolobj.h include/scolpack.h include/scolPackDir.h include/scolPlugin.h include/scolReturnError.h include/scolRsa.h include/scolsign.h include/scolSpecialsFunctions.h include/scolSystem.h include/scolTypeConversion.h include/script.h include/stack.h include/textspan.h include/timer.h include/scolReturnError.h include/scolMemoryHelper.hpp include/czip.h ) set (CORE_SOURCE_FILES src/base64.cpp src/baselib.cpp src/bignum.cpp src/cipher.cpp src/codec.cpp src/cpu_detect.cpp src/debug.cpp src/except.cpp src/fifo.cpp src/listlab.cpp src/loadpak.cpp src/logger.cpp src/mainscol.cpp src/mbignum.cpp src/md5.cpp src/mmemory.cpp src/mzip.cpp src/scol.cpp src/scolobj.cpp src/scolpack.cpp src/scolReturnError.cpp src/scolRsa.cpp src/scolsign.cpp src/scolSpecialsFunctions.cpp src/scolSystem.cpp src/script.cpp src/timer.cpp src/scolReturnError.cpp src/czip.cpp ) set (3D_HEADER_FILES include/3d/display.h include/3d/register.h ) set (3D_SOURCE_FILES src/3d/display.cpp src/3d/register.cpp ) set (COMMON_HEADER_FILES include/common/common.h include/common/cpu_detect.h include/common/except.h include/common/inetconnect.h include/common/kernel.h include/common/vscol.h ) set (COMPILER_HEADER_FILES include/compiler/coder.h include/compiler/lexer.h include/compiler/token.h include/compiler/typmisc.h ) set (COMPILER_SOURCE_FILES src/compiler/coder.cpp src/compiler/lexer.cpp src/compiler/mcompile.cpp src/compiler/readmag2.cpp src/compiler/readmagm.cpp src/compiler/readmagv.cpp src/compiler/token.cpp src/compiler/typcheck.cpp src/compiler/typmag2.cpp src/compiler/typmagm.cpp src/compiler/typmagv.cpp src/compiler/typmisc.cpp ) set (NET_HEADER_FILES include/net/inet.h include/net/telnet.h include/net/proxyhttp.h include/net/socket.h include/net/socks.h include/net/UPnP.h include/net/UPnP_Consts.h include/net/UPnP_Types.h ) set (NET_SOURCE_FILES src/net/httpserver.cpp src/net/inet.cpp src/net/telnet.cpp src/net/proxyhttp.cpp src/net/socks.cpp src/net/Socket.cpp src/net/UPnP.cpp ) set (VM_HEADER_FILES include/vm/interp.h include/vm/mbytec.h ) set (VM_SOURCE_FILES src/vm/interp.cpp src/vm/mbytec.cpp ) # only for project files browser set (VM_LEXER_FILES src/vm/interp.cpp src/vm/mbytec.cpp src/vm/access src/vm/array src/vm/basic src/vm/comm src/vm/debug src/vm/float src/vm/integer src/vm/tuple ) # Implementation for template classes/functions that need to be included directly in header files set (TEMPLATE_IMPL_FILES include/templates/mmemory.hpp ) # Add directories includes if (APPLE) include_directories(include ${LIBZIP_INCLUDE_DIRS}) elseif (LINUX64 OR LINUX32 OR RPI) if(NOT DEFINED Qt5Gui_PRIVATE_INCLUDE_DIRS) set (Qt5Gui_PRIVATE_INCLUDE_DIRS "${Qt5Gui_BASE_DIR}/include/QtGui/5.11.3/QtGui") endif() MESSAGE (WARNING "Set Qt5Gui_PRIVATE_INCLUDE_DIRS to ${Qt5Gui_PRIVATE_INCLUDE_DIRS}") include_directories(include ${LIBZIP_INCLUDE_DIRS} ${ZLIB_INCLUDE_DIRS} ${Qt5Gui_PRIVATE_INCLUDE_DIRS}) else (NOT APPLE) include_directories(include ${LIBZIP_INCLUDE_DIRS} ${ZLIB_INCLUDE_DIRS}) endif() # This is how visual studio directories (or filters) are generated. source_group(Header\ Files\\3d FILES ${3D_HEADER_FILES}) source_group(Header\ Files\\common FILES ${COMMON_HEADER_FILES}) source_group(Header\ Files\\compiler FILES ${COMPILER_HEADER_FILES}) source_group(Header\ Files\\net FILES ${NET_HEADER_FILES}) source_group(Header\ Files\\vm FILES ${VM_HEADER_FILES}) source_group(Header\ Files\\OS\ detection FILES ${OS_DETECTION_HEADER_FILES}) source_group(Header\ Files\\templates FILES ${TEMPLATE_IMPL_FILES}) # Same thing for sources files source_group(Source\ Files\\3d FILES ${3D_SOURCE_FILES}) source_group(Source\ Files\\compiler FILES ${COMPILER_SOURCE_FILES}) source_group(Source\ Files\\net FILES ${NET_SOURCE_FILES}) source_group(Source\ Files\\vm FILES ${VM_LEXER_FILES}) # Add platform specific files if (WIN32) set(OS_WINDOWS_HEADER_FILES include/OS_specific/windows/Http.h include/OS_specific/windows/MYLOOP.H include/OS_specific/windows/scolfilesystem.h include/OS_specific/windows/objbitmap.h include/OS_specific/windows/Objstr.h include/OS_specific/windows/Objwin.h include/OS_specific/windows/performanceinfo.h include/OS_specific/windows/Terminal.h include/OS_specific/windows/winscol.h ) set(OS_WINDOWS_SOURCE_FILES src/OS_specific/windows/objbitmap.cpp src/OS_specific/windows/Terminal.cpp src/OS_specific/windows/performanceinfo.cpp src/OS_specific/windows/hardload.cpp src/OS_specific/windows/Http.cpp src/OS_specific/windows/myloop.cpp src/OS_specific/windows/scolfilesystem.cpp src/OS_specific/windows/quota.cpp src/OS_specific/windows/net/inetconnect.cpp ) if (Scol_BUILD_WITH_QT) set(OS_WINDOWS_HEADER_FILES ${OS_WINDOWS_HEADER_FILES} include/OS_specific/windows/ScolQtApplication.h) set(OS_WINDOWS_SOURCE_FILES ${OS_WINDOWS_SOURCE_FILES} src/OS_specific/windows/ScolQtApplication.cpp) # Needed by Qt. message (">> ${Qt5Widgets_PLUGINS_DEPS}") set(PLATFORM_LIBS ${Boost_LIBRARIES} Qt5::Widgets ${Qt5Widgets_PLUGINS_DEPS} Qt5::Gui ${Qt5Gui_PLUGINS_DEPS}) set(CMAKE_AUTOMOC ON) set(CMAKE_INCLUDE_CURRENT_DIR ON) if (NOT Scol_STATIC) find_library(DL_LIBRARY NAMES dl dlsym) mark_as_advanced(DL_LIBRARY) if (DL_LIBRARY) set(PLATFORM_LIBS ${PLATFORM_LIBS} dl) endif () else() set(PLATFORM_LIBS ${PLATFORM_LIBS} ${Qt5Widgets_STATIC_DEPS}) endif() endif (Scol_BUILD_WITH_QT) set(OS_SPECIFIC_HEADER_FILES ${OS_WINDOWS_HEADER_FILES}) set(OS_SPECIFIC_SOURCE_FILES ${OS_WINDOWS_SOURCE_FILES}) source_group(Header\ Files\\OS\ specific FILES ${OS_WINDOWS_HEADER_FILES}) source_group(Source\ Files\\OS\ specific FILES ${OS_WINDOWS_SOURCE_FILES}) # Adding windows libs list(APPEND PLATFORM_LIBS winmm.lib wsock32.lib wininet.lib comctl32.lib Shlwapi.lib) # Add definition for P4 optimizations, warnings removal. if (MSVC) if (NOT SCOLDEPS_PLATFORM_X64) add_definitions(-DOPTI_P4) endif () add_definitions(-D_CRT_SECURE_NO_WARNINGS) endif() # Add windows version add_definitions(-D_WIN32_IE=0x0501 -D_WIN32_WINNT=0x0601) elseif(ANDROID) set(OS_SPECIFIC_HEADER_FILES include/OS_specific/android/scolfilesystem.h include/OS_specific/android/objbitmap.h include/OS_specific/android/Objstr.h ) set(OS_SPECIFIC_SOURCE_FILES src/OS_specific/android/myloop.cpp src/OS_specific/android/scolfilesystem.cpp src/OS_specific/android/hardload.cpp src/OS_specific/android/objbitmap.cpp src/OS_specific/android/http.cpp ) source_group(Header\ Files\\OS\ specific FILES ${OS_SPECIFIC_HEADER_FILES}) source_group(Source\ Files\\OS\ specific FILES ${OS_SPECIFIC_SOURCE_FILES}) set(PLATFORM_LIBS ${Boost_LIBRARIES} ndk_helper log android cpufeatures native_app_glue) set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -u ANativeActivity_onCreate") if (NOT Scol_STATIC) find_library(DL_LIBRARY NAMES dl dlsym) mark_as_advanced(DL_LIBRARY) if (DL_LIBRARY) list(APPEND PLATFORM_LIBS dl) endif () endif() elseif (APPLE) if (APPLE_IOS) set(APPLE_OS "IOS") set(OS_SPECIFIC_SOURCE_FILES src/OS_specific/${APPLE_OS}/myloop.cpp src/OS_specific/${APPLE_OS}/scolfilesystem.cpp src/OS_specific/${APPLE_OS}/hardload.cpp src/OS_specific/${APPLE_OS}/objbitmap.cpp src/OS_specific/${APPLE_OS}/http.cpp src/OS_specific/${APPLE_OS}/standardPaths.mm src/OS_specific/${APPLE_OS}/ScolQtApplication.cpp ) else() set(APPLE_OS "OSX") set(OS_SPECIFIC_SOURCE_FILES src/OS_specific/${APPLE_OS}/myloop.cpp src/OS_specific/${APPLE_OS}/scolfilesystem.cpp src/OS_specific/${APPLE_OS}/hardload.cpp src/OS_specific/${APPLE_OS}/objbitmap.cpp src/OS_specific/${APPLE_OS}/http.cpp src/OS_specific/${APPLE_OS}/standardPaths.cpp src/OS_specific/${APPLE_OS}/ScolQtApplication.cpp ) endif() set(OS_SPECIFIC_HEADER_FILES include/OS_specific/${APPLE_OS}/scolfilesystem.h include/OS_specific/${APPLE_OS}/objbitmap.h include/OS_specific/${APPLE_OS}/Objstr.h include/OS_specific/${APPLE_OS}/standardPaths.h include/OS_specific/${APPLE_OS}/ScolQtApplication.h ) source_group(Header\ Files\\OS\ specific FILES ${OS_SPECIFIC_HEADER_FILES}) source_group(Source\ Files\\OS\ specific FILES ${OS_SPECIFIC_SOURCE_FILES}) include(AppleMacros) find_apple_system_fwk(COREFOUNDATION_FWK CoreFoundation) find_apple_system_fwk(FOUNDATION_FWK Foundation) if (NOT COREFOUNDATION_FWK AND FOUNDATION_FWK) message(FATAL_ERROR "Required system frameworks not found: CoreFoundation and/or Foundation") endif() set(PLATFORM_LIBS ${Boost_LIBRARIES} ${COREFOUNDATION_FWK} ${FOUNDATION_FWK} Qt5::Widgets) if (NOT Scol_STATIC) find_library(DL_LIBRARY NAMES dl dlsym) mark_as_advanced(DL_LIBRARY) if (DL_LIBRARY) set(PLATFORM_LIBS ${PLATFORM_LIBS} dl) endif () else() set(PLATFORM_LIBS ${PLATFORM_LIBS} ${Qt5Widgets_STATIC_DEPS}) endif() # Needed by Qt. set(CMAKE_AUTOMOC ON) set(CMAKE_INCLUDE_CURRENT_DIR ON) if (NOT APPLE_IOS) # Add definition to enable msse2 add_definitions(-msse2) endif() # Suppress warnings about assignments without double parentheses in if statements set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-parentheses") elseif (UNIX) set(OS_SPECIFIC_HEADER_FILES include/OS_specific/linux/scolfilesystem.h include/OS_specific/linux/objbitmap.h include/OS_specific/linux/Objstr.h include/OS_specific/linux/standardPaths.h include/OS_specific/linux/pstream.h include/OS_specific/linux/ScolQtApplication.h ) set(OS_SPECIFIC_SOURCE_FILES src/OS_specific/linux/myloop.cpp src/OS_specific/linux/scolfilesystem.cpp src/OS_specific/linux/hardload.cpp src/OS_specific/linux/objbitmap.cpp src/OS_specific/linux/http.cpp src/OS_specific/linux/standardPaths.cpp src/OS_specific/linux/ScolQtApplication.cpp ) source_group(Header\ Files\\OS\ specific FILES ${OS_SPECIFIC_HEADER_FILES}) source_group(Source\ Files\\OS\ specific FILES ${OS_SPECIFIC_SOURCE_FILES}) message (">> ${Qt5Widgets_PLUGINS_DEPS}") set(PLATFORM_LIBS ${Boost_LIBRARIES} Qt5::Widgets ${Qt5Widgets_PLUGINS_DEPS} -luuid -lexpat) # Needed by Qt. set(CMAKE_AUTOMOC ON) set(CMAKE_INCLUDE_CURRENT_DIR ON) if (NOT Scol_STATIC) find_library(DL_LIBRARY NAMES dl dlsym) mark_as_advanced(DL_LIBRARY) if (DL_LIBRARY) set(PLATFORM_LIBS ${PLATFORM_LIBS} dl) endif () else() set(PLATFORM_LIBS ${PLATFORM_LIBS} ${Qt5Widgets_STATIC_DEPS}) endif() # needed on RPI if (CMAKE_SYSTEM_PROCESSOR MATCHES "^arm*") add_definitions(-DSCOL_CODE_ALIGNED) endif() endif () # Exporting symbols add_definitions(-DSCOL_NON_CLIENT_BUILD -DZIP_STATIC) # Linking to zlib set(LIBRARIES ${PLATFORM_LIBS} ${ZLIB_LIBRARY} ${LIBZIP_LIBRARIES}) if (RPI) set(LIBRARIES ${LIBRARIES} -lgmodule-2.0 -lpcre -lpixman-1 -lXrender -lffi -lmount -lselinux -lresolv -llzma) endif(RPI) # setup Scol kernel targetXrender add_library(kernel ${Scol_LIB_TYPE} ${OS_DETECTION_HEADER_FILES} ${CORE_HEADER_FILES} ${CORE_SOURCE_FILES} ${3D_HEADER_FILES} ${3D_SOURCE_FILES} ${COMMON_HEADER_FILES} ${COMPILER_HEADER_FILES} ${COMPILER_SOURCE_FILES} ${NET_HEADER_FILES} ${NET_SOURCE_FILES} ${VM_HEADER_FILES} ${VM_LEXER_FILES} ${OS_SPECIFIC_HEADER_FILES} ${OS_SPECIFIC_SOURCE_FILES} ${TEMPLATE_IMPL_FILES} ) if (WIN32) # set the dll output name (if not defined, it'll be the target name, in our case "kernel.dll") and version. #if (Scol_STATIC) # set_target_properties(kernel PROPERTIES VERSION ${Scol_VERSION} SOVERSION ${Scol_VERSION_MAJOR}) #else(Scol_STATIC) # set_target_properties(kernel PROPERTIES OUTPUT_NAME scol VERSION ${Scol_VERSION} SOVERSION ${Scol_VERSION_MAJOR} TARGET_PDB kernel) #endif(Scol_STATIC) if (NOT Scol_STATIC) set_target_properties(kernel PROPERTIES OUTPUT_NAME scol TARGET_PDB kernel) endif(NOT Scol_STATIC) if (Scol_BUILD_WITH_QT) add_definitions(-DSCOL_QT) endif (Scol_BUILD_WITH_QT) elseif(ANDROID) set_target_properties(kernel PROPERTIES VERSION ${Scol_VERSION} SOVERSION ${Scol_VERSION_MAJOR} TARGET_PDB kernel) elseif(APPLE) set_target_properties(kernel PROPERTIES VERSION ${Scol_VERSION} SOVERSION ${Scol_VERSION_MAJOR}) #set_target_properties(kernel PROPERTIES LINK_FLAGS "-framework Cocoa") elseif(UNIX) set_target_properties(kernel PROPERTIES OUTPUT_NAME scol) endif() if (Scol_STATIC) target_include_directories(kernel PUBLIC include ${SCOL_INCLUDES}) list(REMOVE_DUPLICATES SCOL_LIBRARIES) target_link_libraries(kernel INTERFACE ${SCOL_LIBRARIES} PUBLIC ${LIBRARIES}) add_definitions(${SCOL_PREPROCESSOR}) #message(STATUS "SCOL_PREPROCESSOR Scol ${SCOL_PREPROCESSOR}") else (Scol_STATIC) target_link_libraries(kernel ${LIBRARIES}) endif (Scol_STATIC) scol_config_lib(kernel) # install Scol kernel install(FILES ${OS_DETECTION_HEADER_FILES} ${CORE_HEADER_FILES} DESTINATION include/SCOL) # OS_specific/windows -> check os if(WIN32) install(FILES ${OS_SPECIFIC_HEADER_FILES} DESTINATION include/SCOL/OS_specific/windows) elseif(ANDROID) install(FILES ${OS_SPECIFIC_HEADER_FILES} DESTINATION include/SCOL/OS_specific/android) elseif(OSX) install(FILES ${OS_SPECIFIC_HEADER_FILES} DESTINATION include/SCOL/OS_specific/OSX) elseif(APPLE_IOS) install(FILES ${OS_SPECIFIC_HEADER_FILES} DESTINATION include/SCOL/OS_specific/IOS) elseif(UNIX) install(FILES ${OS_SPECIFIC_HEADER_FILES} DESTINATION include/SCOL/OS_specific/linux) endif() install(FILES ${3D_HEADER_FILES} DESTINATION include/SCOL/3d) install(FILES ${COMMON_HEADER_FILES} DESTINATION include/SCOL/common) install(FILES ${COMPILER_HEADER_FILES} DESTINATION include/SCOL/compiler) install(FILES ${NET_HEADER_FILES} DESTINATION include/SCOL/net) install(FILES ${VM_HEADER_FILES} DESTINATION include/SCOL/vm)