# # CMake File for ZFPE, the z/OS SecureData integration tool # (c) in 2009 by Voltage Security Inc. # cmake_minimum_required (VERSION 2.6) project(ZFPE C ASM_DIGNUS) SET(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true) #set(CMAKE_C_COMPILER xlc) #SET(CMAKE_CXX_COMPILER XLC++) set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Release or Debug" FORCE) include(CheckTypeSize) set(VOLT_GMP OFF CACHE BOOL "Use GMP Bignum Library [requires Toolkit with GMP Support]") set(VOLT_SHAREDLIB OFF CACHE BOOL "Additionally build shared libraries") # Handle possible z/OS build if (CMAKE_SYSTEM_NAME STREQUAL "IBM_ZOS") set(IBM_ZOS 1) # Files that are EBCDIC and should NOT use -fasciiout are set here # *** FILENAMES CAN BE BARE OR FULLY QUALIFIED *** # That is, "deffile.c" could be ../some/path/deffile.c, but either will # work and will not cause bogus matches. set(EBCDIC_source *.c *.C ) endif () if (WIN32) set(CMAKE_C_FLAGS_DEBUG /MTd) set(CMAKE_C_FLAGS_RELEASE /MT) endif() if (IBM_ZOS) set(VOLT_COMPILER VOLT_DIGNUS_C) endif () # LIST_CONTAINS takes a variable name, a value, and a list, returns TRUE if value in list # E.g.: LIST_CONTAINS(result token 'A B C D TOKEN') # would set RESULT to TRUE # # This code tries to be "clever" and allow both simple fileids and fully qualified ones # in the list. Thus both /some/path/filename.c and just filename.c will match filename.c. macro(LIST_CONTAINS var value) set(${var}) foreach (token ${ARGN}) # Fully qualified filename?? string(REGEX MATCH ".*/.*" LCfp ${token}) # Fully qualified, just use IF/STREQUAL if(LCfp) if (${value} STREQUAL ${token}) set(${var} TRUE) endif (${value} STREQUAL ${token}) # Not fully qualified, use regex with leading "/" to avoid false matches else() string(REGEX MATCH "/${token}$" LCfp ${value}) if (NOT LCfp STREQUAL "") set(${var} TRUE) endif () endif(LCfp) # DEBUG # if(${var}) # MESSAGE(STATUS "EBCDIC is <${EBCDIC}> VAR is >${var}< LIST_CONTAINS matched >/${token}$< to >${value}") # endif(${var}) endforeach (token) endmacro(LIST_CONTAINS) # Macros specific to z/OS -- define as null macros for non-z/OS cases if (IBM_ZOS) # Macro to clean Dignus droppings on "make clean": # .ASM, .LST, perhaps .CLF macro(DignusClean tname) GET_PROPERTY(sources TARGET ${tname} PROPERTY SOURCES) foreach(file ${sources}) # Lose everything but the filename string(REGEX REPLACE "(.+/)+" "" file "${file}") string(REGEX REPLACE ".c$" ".zASM" afile "${file}") string(REGEX REPLACE ".c$" ".zLST" lfile "${file}") string(REGEX REPLACE ".c$" ".zCLF" cfile "${file}") string(REGEX REPLACE ".c$" ".o" cfile "${file}") string(REGEX REPLACE ".c$" ".obj" cfile "${file}") string(REGEX REPLACE ".c$" ".zOBJ" cfile "${file}") list(APPEND dignus_clean_files "${CMAKE_CURRENT_BINARY_DIR}/${afile};${CMAKE_CURRENT_BINARY_DIR}/${lfile};${CMAKE_CURRENT_BINARY_DIR}/${cfile}") endforeach(file ${sources}) SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${dignus_clean_files}") endmacro() # Macro to set file properties for sources for Dignus. Files not # explicitly listed in global EBCDIC_source variable will have the # -fasciiout flag set for them. macro(DignusParms tname) GET_PROPERTY(sources TARGET ${tname} PROPERTY SOURCES) foreach(file ${sources}) LIST_CONTAINS(EBCDIC ${file} ${EBCDIC_source}) if(EBCDIC) MESSAGE(STATUS "Compiled as EBCDIC: ${file}") else() SET_SOURCE_FILES_PROPERTIES(${file} PROPERTIES COMPILE_FLAGS "-fasciiout") endif() endforeach(file ${sources}) endmacro() # Not z/OS, just dummy out the macros else() macro(DignusClean tname) endmacro() macro(DignusParms slist) endmacro() endif() # -- Path Setup ---------------------- if(NOT VTKROOT) set( VTKROOT ${CMAKE_SOURCE_DIR}/) endif() set( VTKCORE ${VTKROOT}/SimpleAPI/vtk-core ) set( VTKPKG ${VTKROOT}/pkg ) set( LIBRARY_OUTPUT_PATH ${VTKROOT}/lib) include_directories( ${VTKCORE}/include ${VTKCORE}/serverinclude ${VTKCORE}/ibe/include ${VTKCORE}/crypto/include ${VTKROOT}/SimpleAPI/vtk-simple/include ./src/zProtect/asm ./src/zProtect/h ./src/common ./src/ve ./src/ra ) if (CMAKE_BUILD_TYPE STREQUAL "Release") link_directories( ${VTKROOT}/lib ${VTKROOT}/lib/Release ) endif() if (CMAKE_BUILD_TYPE STREQUAL "Debug") link_directories( ${VTKROOT}/lib ${VTKROOT}/lib/Debug ) endif() # -- Source Files ----------------------- SET( ZFPE_FILES src/common/common.c src/common/config.c src/common/csv.c src/common/list.c src/common/logging.c src/common/parser.c src/common/property.c src/ra/ARGPARSE.c src/ra/BASICS.c src/ra/CPREXX.c src/ra/FILEINFO.c src/ra/LECPMAIN.c src/ra/LECPTEST.c src/ra/LEMAIN.c src/ra/LEMAIN2.c src/ra/OPTFILE.c src/ra/process.c src/ra/RAFILE.c src/ra/RACOMMON.c src/ra/SCHEDMSG.c src/ra/SERVICE1.c src/ra/db2serv.c src/ra/db2rowd.c src/ra/LELINK.asm src/ra/LEPANDW.asm src/ra/vtnclave.c src/ra/vtdb2fpe.c src/ra/vtdb2hxd.asm src/ra/vtdb2hxs.asm src/ra/ZOSFINFO.asm src/ra/coffset.asm src/ve/ve.c src/zprotect/c/VSHCMD.c src/zProtect/c/VSHCONF.c src/zProtect/c/VSHDCFG.c src/zProtect/c/VSHDEB2.c # src/zProtect/c/VSHDEBUG.c # Not used, see VSHDEB2 src/zProtect/c/VSHDISP.c src/zProtect/c/VSHDITSK.c src/zProtect/c/VSHERR.c # src/zProtect/c/VSHFILE.c # Not used, save for cross-platform src/zProtect/c/VSHFPE.c src/zProtect/c/VSHFUTIL.c # src/zProtect/c/VSHLOG.c # Not used, save for cross-platform src/zProtect/c/VSHLOGZ.c src/zProtect/c/VSHMEM.c src/zProtect/c/VSHPROC.c src/zProtect/c/VSHSS.c src/zProtect/c/VSHSTRNG.c src/zProtect/c/VSHTHD.c src/zProtect/c/VSHTXFMT.c src/zProtect/c/VSHWTC.c # src/zProtect/c/VSHWTC2.c # Not used, save for cross-platform? src/zprotect/c/VSHTXMSG.c src/zprotect/c/LOGPRINT.c src/zprotect/c/FAILINIT.c src/zprotect/asm/DSECTS.asm src/zprotect/asm/VSHCNTSK.asm src/zprotect/asm/VSHCPABN.asm src/zprotect/asm/VSHCPAPP.asm src/zprotect/asm/VSHCPESM.asm src/zprotect/asm/VSHCPLOG.asm src/zprotect/asm/VSHCPPIC.asm src/zprotect/asm/VSHCPSET.asm src/zprotect/asm/VSHCPXDC.asm src/zprotect/asm/VSHDIAC1.asm src/zprotect/asm/VSHDIACC.asm src/zprotect/asm/VSHDICP1.asm src/zprotect/asm/VSHDICPT.asm src/zprotect/asm/VSHDIMEM.asm src/zprotect/asm/VSHDIMGR.asm src/zprotect/asm/VSHEXIT.asm src/zprotect/asm/VSHGPABC.asm src/zprotect/asm/VSHGPREG.asm src/zprotect/asm/VSHGPSAF.asm src/zprotect/asm/VSHGPTIQ.asm src/zprotect/asm/VSHGWPRL.asm src/zprotect/asm/VSHLECTM.asm src/zprotect/asm/VSHLECDA.asm src/zprotect/asm/VSHLEHDL.asm src/zprotect/asm/VSHLGTSK.asm src/zprotect/asm/VSHLGTSK.asm src/zprotect/asm/VSHMNAPO.asm src/zprotect/asm/VSHMNCDA.asm src/zprotect/asm/VSHMNINI.asm src/zprotect/asm/VSHMNTJL.asm src/zprotect/asm/VSHMNTRM.asm src/zprotect/asm/VSHMNTSK.asm src/zprotect/asm/VSHPCRT1.asm src/zprotect/asm/VSHPCSRQ.asm src/zprotect/asm/VSHTEST.asm src/zprotect/asm/VSHTEST2.asm src/zprotect/asm/VSHTXMS1.asm src/zprotect/asm/VSHTXMS1.asm src/zprotect/asm/VSHTXMS2.asm src/zprotect/asm/VSHTXMS2.asm src/zprotect/asm/VSHTXTKN.asm src/zprotect/asm/VSHTXVAL.asm src/zprotect/asm/VSHTXVLN.asm src/zprotect/asm/VSHVOLT.asm src/zprotect/asm/VSHXITA1.asm src/zprotect/asm/ZPBANGER.asm ) # -- Libraries ---------------------------------------- # Path for dynamic libraries if (CMAKE_BUILD_TYPE STREQUAL "Release") SET(LIB_PATH ${VTKROOT}/lib:${VTKROOT}/lib/Release) endif() if (CMAKE_BUILD_TYPE STREQUAL "Debug") SET(LIB_PATH ${VTKROOT}/lib:${VTKROOT}/lib/Debug) endif() # If we build as static, link with static libs # If we build as shared, link with shared libs if(VOLT_SHAREDLIB) set(LIB_OS_ANY vibedyn vibedyncrypto unzip) else() set(LIB_OS_ANY vibe vibecrypto vibeictk unzip) endif() # Libraries for various OS set(LIB_OS_UNIX pthread curl ssl crypto z ) set(LIB_OS_WINDOWS wininet winhttp crypt32 ) if (WIN32) set( VOLT_OS VOLT_WINDOWS_32 ) set(LIB_OS_SPECIFIC ${LIB_OS_WINDOWS} ) elseif (APPLE) set( VOLT_OS VOLT_LINUX ) set(LIB_OS_SPECIFIC ${LIB_OS_UNIX} ) elseif (UNIX) set( VOLT_OS VOLT_LINUX ) set(LIB_OS_SPECIFIC ${LIB_OS_UNIX} ) else () message(FATAL_ERROR "Unknown operating system, please edit CmakeLists.txt!") endif() if(VOLT_GMP) add_definitions(-DVOLT_GMP) endif() # --- Determine Architecture, Platform, OS -------------- if (IBM_ZOS) set( VOLT_OS VOLT_IBM_ZOS ) elseif (WIN32) set( VOLT_OS VOLT_WINDOWS_32 ) elseif (UNIX OR APPLE) # On MacOS we behave mostly like LINUX set( VOLT_OS VOLT_LINUX ) else () message(FATAL_ERROR "Unknown operating system, please edit CMakeLists.txt!") endif() # We don't strictly need this, but for zos (z/OS) it's a good way to see if # things are basically working, and it's harmless elsewhere, so why not? # Check Variable lengths check_type_size("unsigned long long" SIZEOF_UNSIGNED_LONG_LONG) check_type_size("unsigned long" SIZEOF_UNSIGNED_LONG) check_type_size("unsigned int" SIZEOF_UNSIGNED_INT) check_type_size("unsigned short" SIZEOF_UNSIGNED_SHORT) check_type_size("long long" SIZEOF_LONG_LONG) # --- Main ---------------------------------------- # Temporary, delete once autoconf is phased out add_definitions(-DVOLT_CMAKE) if (IBM_ZOS) add_definitions( -DSIXTY_FOUR_BIT -DVOLT_BUILD=VOLT_BUILD_STATIC -DVOLT_OS=VOLT_IBM_ZOS -DVOLT_CHIP=VOLT_IBM_Z10 -DVOLT_COMPILER=VOLT_DIGNUS_C -DVOLT_ERROR_LOG=VOLT_ERROR_LOG_FULL -DVOLT_ASSERTIONS_ENABLED=1 ) endif() add_library(zfpe ${ZFPE_FILES}) # Call z/OS-specific macro to set flags for Dignus cross-compiler DignusParms(zfpe) # -- Packaging ------------------------------------ set(CPACK_PACKAGE_VERSION_MAJOR "3") set(CPACK_PACKAGE_VERSION_MINOR "1") set(CPACK_PACKAGE_VERSION_PATCH "0") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "The Voltage Toolkit z/OS Integration Tool") set(CPACK_PACKAGE_VENDOR "Voltage Security Inc.") set(CPACK_RESOURCE_FILE_DESCRIPTION "${CMAKE_CURRENT_SOURCE_DIR}/ReadMe.txt") set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/License.txt") set(CPACK_RESOURCE_FILE_WELCOME "${CMAKE_CURRENT_SOURCE_DIR}/Install.txt") # Need to set this to ensure it goes into the right directory set(SRC_PKG "ZFPE-Source") set(BIN_PKG "ZFPE") # This is the name of the top-level directory (i.e. above vtk-core, lib etc.) set(PKG_DIRECTORY "voltage-toolkit-${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}") set(CPACK_SOURCE_PACKAGE_FILE_NAME "ZFPE-src") set(CPACK_PACKAGE_FILE_NAME ${PKG_DIRECTORY} ) # Ignore stuff we dont want... lots of it set(CPACK_SOURCE_IGNORE_FILES CMakeFiles CMakeCache CMakeScripts CPack cmake_install \\\\.o$ \\\\.sln$ \\\\.vcproj$ \\\\.tar.gz$ \\\\.tgz$ \\\\.tar.Z$ ZFPE/Makefile ~$ /\\\\. checknl.py )