Skip to content

Commit

Permalink
feat: start migration to cmake build
Browse files Browse the repository at this point in the history
  • Loading branch information
aegoroff committed Jan 29, 2024
1 parent fd7ce48 commit c9641cf
Show file tree
Hide file tree
Showing 5 changed files with 376 additions and 0 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,5 @@ hql/
pcre-vsbuild/
pcre-*/
/src/_tst/example.hq
build/
build-*/
362 changes: 362 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,362 @@
cmake_minimum_required(VERSION 3.21)
project(grok)

set(SRC src)
set(GEN generated)
set(HC hc)
set(L2H l2h)
set(TOMCRYPT libtomcrypt)
set(TST _tst)
set(LIB srclib)
set(PCRE pcre)
set(APR apr)
set(APR_UTIL apr-util)
set(LIBD Debug)
set(LIBR Release)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
enable_testing()

if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
set(APR_X64 "$ENV{APR_HOME16}/${APR}/x64")
set(APR_UTIL_X64 "$ENV{APR_HOME16}/${APR_UTIL}/x64")
else ()
set(APR_X64 "$ENV{APR_HOME}/APR")
set(APR_UTIL_X64 "$ENV{APR_HOME}APR-UTIL")
endif ()

set(compiler_flags)
set(debug_compiler_flags)
set(release_compiler_flags)

if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
list(APPEND compiler_flags
/MP
/Zc:wchar_t
/Zc:inline
/Zc:preprocessor
/utf-8
/validate-charset
/sdl
/std:c11
/W3
)
list(APPEND debug_compiler_flags
/MTd
/Od
/Zi
/RTC1
)
list(APPEND release_compiler_flags
/MT
/Ox
/Ob2
/Oy
/Oi
/Ot
/GL
/Qpar
/D
NDEBUG
)
foreach(compiler_flag ${compiler_flags})
set(FLAGS "${FLAGS} ${compiler_flag}")
endforeach()
foreach(compiler_flag ${release_compiler_flags})
set(RELEASE_FLAGS "${RELEASE_FLAGS} ${compiler_flag}")
endforeach()
foreach(compiler_flag ${debug_compiler_flags})
set(DEBUG_FLAGS "${DEBUG_FLAGS} ${compiler_flag}")
endforeach()
set(CMAKE_CXX_FLAGS_RELEASE "${FLAGS} ${RELEASE_FLAGS}")
set(CMAKE_CXX_FLAGS_DEBUG "${FLAGS} ${DEBUG_FLAGS}")
set(CMAKE_C_FLAGS_RELEASE "${FLAGS} ${RELEASE_FLAGS} /TC")
set(CMAKE_C_FLAGS_DEBUG "${FLAGS} ${DEBUG_FLAGS} /TC")
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
else ()
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LTCG")
set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} /LTCG")
endif ()
else ()
list(APPEND compiler_flags
-Wall
-pthread
)
if ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64")
list(APPEND compiler_flags
-march=haswell
-mtune=haswell
)
endif ()
list(APPEND debug_compiler_flags
-Og
)
list(APPEND release_compiler_flags
-Ofast
-s
)
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang")
list(APPEND debug_compiler_flags
-gfull
-glldb
)
else ()
list(APPEND debug_compiler_flags
-ggdb
)
endif ()
foreach(compiler_flag ${compiler_flags})
set(FLAGS "${FLAGS} ${compiler_flag}")
endforeach()
foreach(compiler_flag ${debug_compiler_flags})
set(DEBUG_FLAGS "${DEBUG_FLAGS} ${compiler_flag}")
endforeach()
foreach(compiler_flag ${release_compiler_flags})
set(RELEASE_FLAGS "${RELEASE_FLAGS} ${compiler_flag}")
endforeach()
set(CMAKE_CXX_FLAGS_RELEASE "${FLAGS} ${RELEASE_FLAGS} -std=c++17")
set(CMAKE_CXX_FLAGS_DEBUG "${FLAGS} ${DEBUG_FLAGS} -std=c++17")
set(CMAKE_C_FLAGS_RELEASE "${FLAGS} ${RELEASE_FLAGS}")
set(CMAKE_C_FLAGS_DEBUG "${FLAGS} ${DEBUG_FLAGS}")
endif ()

include_directories(${SRC}/${LIB})
include_directories(${SRC}/${LIB}/openssl)
include_directories(${SRC}/${PCRE})
include_directories(${SRC}/${HC})
include_directories(${SRC}/${L2H})
include_directories(${SRC}/${TOMCRYPT}/src/headers)

if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
include_directories($ENV{APR_HOME16}/${APR}/include)
include_directories($ENV{APR_HOME16}/${APR_UTIL}/include)
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang")
if (DEFINED ENV{APR_INCLUDE})
include_directories($ENV{APR_INCLUDE})
else ()
include_directories($ENV{APR_HOME}/apr/include/apr-1)
include_directories($ENV{APR_HOME}/apr-util/include/apr-1)
endif ()
elseif (DEFINED ENV{APR_INCLUDE})
include_directories($ENV{APR_INCLUDE})
else ()
include_directories($ENV{APR_HOME}/include/apr-1.0)
endif ()

add_definitions(-DPCRE2_STATIC)
add_definitions(-DPCRE2_CODE_UNIT_WIDTH=8)
add_definitions(-DLINK_SIZE=2)
add_definitions(-DHAVE_CONFIG_H)
add_definitions(-DAPR_DECLARE_STATIC)
add_definitions(-DAPU_DECLARE_STATIC)
add_definitions(-DARCH="${CMAKE_SYSTEM_PROCESSOR}")

if ("$ENV{HC_VERSION}" STREQUAL "")
add_definitions(-DPRODUCT_VERSION="5.3.0")
set(CPACK_PACKAGE_VERSION "5.3.0")
else ()
if ("$ENV{HC_VERSION}" STREQUAL "master")
add_definitions(-DPRODUCT_VERSION="5.3.0-$ENV{CI_BUILD_NUMBER}")
set(CPACK_PACKAGE_VERSION "5.3.0-$ENV{CI_BUILD_NUMBER}")
else ()
add_definitions(-DPRODUCT_VERSION="$ENV{HC_VERSION}")
set(CPACK_PACKAGE_VERSION "$ENV{HC_VERSION}")
endif ()
endif ()

SET(HC_SOURCE_FILES
"${SRC}/${HC}/builtin.c"
"${SRC}/${HC}/configuration.c"
"${SRC}/${HC}/dir.c"
"${SRC}/${HC}/file.c"
"${SRC}/${HC}/hash.c"
"${SRC}/${HC}/str.c"
"${SRC}/${HC}/hc.c"
"${SRC}/${HC}/crc32.cu"
"${SRC}/${HC}/gpu.cu"
"${SRC}/${HC}/md2.cu"
"${SRC}/${HC}/md4.cu"
"${SRC}/${HC}/md5.cu"
"${SRC}/${HC}/rmd160.cu"
"${SRC}/${HC}/sha1.cu"
"${SRC}/${HC}/sha224.cu"
"${SRC}/${HC}/sha256.cu"
"${SRC}/${HC}/sha384.cu"
"${SRC}/${HC}/sha512.cu"
"${SRC}/${HC}/whirlpool.cu"
)

SET(L2H_SOURCE_FILES
"${SRC}/${L2H}/backend.c"
"${SRC}/${L2H}/configuration.c"
"${SRC}/${L2H}/frontend.c"
"${SRC}/${L2H}/hashes.c"
"${SRC}/${L2H}/l2h.c"
"${SRC}/${L2H}/processor.c"
"${SRC}/${L2H}/treeutil.c")

SET(TST_SOURCE_FILES
"${SRC}/${TST}/_tst.cpp"
"${SRC}/${TST}/ArgtableDateTest.cpp"
"${SRC}/${TST}/ArgtableDoubleTest.cpp"
"${SRC}/${TST}/ArgtableFileTest.cpp"
"${SRC}/${TST}/ArgtableLitTest.cpp"
"${SRC}/${TST}/BruteForceTest.cpp"
"${SRC}/${TST}/BufferedTest.cpp"
"${SRC}/${TST}/displayError.cpp"
"${SRC}/${TST}/EncodingTest.cpp"
"${SRC}/${TST}/FrontendTest.cpp"
"${SRC}/${TST}/HashTest.cpp"
"${SRC}/${TST}/ProcessorTest.cpp"
"${SRC}/${TST}/SizeToString.cpp"
"${SRC}/${TST}/ToStringTime.cpp"
"${SRC}/${TST}/TreeTest.cpp"
"${SRC}/${TST}/gtest-all.cc"
"${SRC}/${TST}/ArgtableTestBase.cpp")

SET(LICENSE_FILE "LICENSE.txt")

file(GLOB LIB_SOURCE_FILES "${SRC}/${LIB}/*.c")

SET(PCRE_SOURCE_FILES
${SRC}/${PCRE}/pcre2_auto_possess.c
${SRC}/${PCRE}/pcre2_chartables.c
${SRC}/${PCRE}/pcre2_compile.c
${SRC}/${PCRE}/pcre2_config.c
${SRC}/${PCRE}/pcre2_context.c
${SRC}/${PCRE}/pcre2_convert.c
${SRC}/${PCRE}/pcre2_dfa_match.c
${SRC}/${PCRE}/pcre2_error.c
${SRC}/${PCRE}/pcre2_extuni.c
${SRC}/${PCRE}/pcre2_find_bracket.c
${SRC}/${PCRE}/pcre2_jit_compile.c
${SRC}/${PCRE}/pcre2_maketables.c
${SRC}/${PCRE}/pcre2_match.c
${SRC}/${PCRE}/pcre2_match_data.c
${SRC}/${PCRE}/pcre2_newline.c
${SRC}/${PCRE}/pcre2_ord2utf.c
${SRC}/${PCRE}/pcre2_pattern_info.c
${SRC}/${PCRE}/pcre2_script_run.c
${SRC}/${PCRE}/pcre2_serialize.c
${SRC}/${PCRE}/pcre2_string_utils.c
${SRC}/${PCRE}/pcre2_study.c
${SRC}/${PCRE}/pcre2_substitute.c
${SRC}/${PCRE}/pcre2_substring.c
${SRC}/${PCRE}/pcre2_tables.c
${SRC}/${PCRE}/pcre2_ucd.c
${SRC}/${PCRE}/pcre2_ucptables.c
${SRC}/${PCRE}/pcre2_valid_utf.c
${SRC}/${PCRE}/pcre2_xclass.c
)

SET(TOMCTYPT_SOURCE_FILES
"${SRC}/${TOMCRYPT}/src/hashes/rmd128.c"
"${SRC}/${TOMCRYPT}/src/hashes/rmd160.c"
"${SRC}/${TOMCRYPT}/src/hashes/rmd256.c"
"${SRC}/${TOMCRYPT}/src/hashes/rmd320.c"
"${SRC}/${TOMCRYPT}/src/misc/crypt/crypt_argchk.c")

add_library(pcre STATIC ${PCRE_SOURCE_FILES})
add_library(tomcypt STATIC ${TOMCTYPT_SOURCE_FILES})

if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
link_directories(
"${APR_X64}/${LIBD}"
"${APR_UTIL_X64}/${LIBD}"
)
else ()
link_directories(
"${APR_X64}/${LIBR}"
"${APR_UTIL_X64}/${LIBR}"
)
endif ()
elseif (DEFINED ENV{APR_LINK})
link_directories(
"$ENV{APR_LINK}"
)
else ()
link_directories(
"$ENV{APR_HOME}/lib/x86_64-linux-gnu/"
)
endif ()


if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
set(FLEX_EXE win_flex.exe)
set(BISON_EXE win_bison.exe)
else ()
set(FLEX_EXE flex)
set(BISON_EXE bison)
endif ()

if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
set(FLEX_OPT --wincompat)
endif ()

set(FLEX ${FLEX_EXE} --fast ${FLEX_OPT} --outfile="${GEN}/l2h.flex.c" l2h.lex)
set(BISON ${BISON_EXE} --output="${GEN}/l2h.tab.c" -dy l2h.y)

add_custom_target(generated_directory ALL
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_SOURCE_DIR}/${SRC}/${L2H}/${GEN}")

add_custom_target(generate_parser
COMMAND ${FLEX}
COMMAND ${BISON}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${SRC}/${L2H})

SET(L2H_GENERATED_FILES
"${CMAKE_CURRENT_SOURCE_DIR}/${SRC}/${L2H}/${GEN}/l2h.flex.c"
"${CMAKE_CURRENT_SOURCE_DIR}/${SRC}/${L2H}/${GEN}/l2h.tab.c")

set_source_files_properties(${L2H_GENERATED_FILES}
PROPERTIES GENERATED TRUE)

add_library(libhc STATIC ${LIB_SOURCE_FILES})
add_executable(hc ${HC_SOURCE_FILES})
add_executable(l2h ${L2H_GENERATED_FILES} ${L2H_SOURCE_FILES})
add_executable(_tst ${L2H_GENERATED_FILES} ${TST_SOURCE_FILES})

add_dependencies(generate_parser generated_directory)

if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
target_link_libraries(libgrok
PRIVATE ws2_32
PRIVATE rpcrt4
PRIVATE apr-1
PRIVATE aprutil-1
PRIVATE pcre
PRIVATE strsafe)
else ()
target_link_libraries(libhc PRIVATE m PRIVATE libapr-1.a PRIVATE libaprutil-1.a)
endif ()
target_link_libraries(hc PRIVATE libhc PRIVATE pcre PRIVATE tomcypt)
target_link_libraries(l2h PRIVATE pcre PRIVATE tomcypt)
target_link_libraries(_tst PRIVATE libhc PRIVATE pcre PRIVATE tomcypt)

add_test(NAME RunUnitTests COMMAND _tst)

install(TARGETS hc DESTINATION . COMPONENT application)
install(FILES ${PATTERN_FILES} DESTINATION . COMPONENT patterns)
install(FILES ${LICENSE_FILE} DESTINATION . COMPONENT license)

set(CPACK_INCLUDE_TOPLEVEL_DIRECTORY OFF)
set(CPACK_PACKAGE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/bin")
if ("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows")
set(CPACK_SYSTEM_NAME x86_64-pc-windows-msvc)
set(CPACK_GENERATOR TGZ)
elseif ("${CMAKE_TOOLCHAIN_FILE}" MATCHES "zig-toolchain-x86_64-linux-musl")
set(CPACK_SYSTEM_NAME x86_64-unknown-linux-musl)
set(CPACK_GENERATOR TGZ)
elseif ("${CMAKE_TOOLCHAIN_FILE}" MATCHES "zig-toolchain-x86_64-linux-gnu")
set(CPACK_SYSTEM_NAME x86_64-unknown-linux-gnu)
set(CPACK_GENERATOR TGZ)
else()
set(CPACK_SYSTEM_NAME x86_64-unknown-linux-gnu)
set(CPACK_GENERATOR TGZ)
endif()

include(CPack)

cpack_add_component(application)
cpack_add_component(patterns)
cpack_add_component(license)
2 changes: 2 additions & 0 deletions src/hc/targetver.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,9 @@
// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and
// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h.

#ifdef _MSC_VER
#include <SDKDDKVer.h>
#endif

#define PRODUCT_VERSION "1.0.0.1"
#define PROGRAM_NAME "hc"
Expand Down
3 changes: 3 additions & 0 deletions src/l2h/targetver.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,10 @@
// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and
// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h.

#ifdef _MSC_VER
#include <SDKDDKVer.h>
#endif


#define PRODUCT_VERSION "1.0.0.1"
#define PROGRAM_NAME "l2h"
Expand Down
Loading

0 comments on commit c9641cf

Please sign in to comment.