Raw File
CMakeLists.txt
cmake_minimum_required(VERSION 3.2)

# Project Name
project (hacl)

# Build settings
set(CMAKE_BUILD_TYPE Release)

# Include directories
include_directories(./snapshots/hacl-c ./snapshots/hacl-c-experimental)

# Verified files
set(SOURCE_FILES_VERIFIED
    snapshots/hacl-c/AEAD_Poly1305_64.c
    snapshots/hacl-c/FStar_UInt128.c
    snapshots/hacl-c/Hacl_Chacha20.c
    snapshots/hacl-c/Hacl_Chacha20Poly1305.c
    snapshots/hacl-c/Hacl_Chacha20_Vec128.c
    snapshots/hacl-c/Hacl_Curve25519.c
    snapshots/hacl-c/Hacl_Ed25519.c
    snapshots/hacl-c/Hacl_HMAC_SHA2_256.c
    snapshots/hacl-c/Hacl_HMAC_SHA2_384.c
    snapshots/hacl-c/Hacl_HMAC_SHA2_512.c
    snapshots/hacl-c/Hacl_Policies.c
    snapshots/hacl-c/Hacl_Poly1305_32.c
    snapshots/hacl-c/Hacl_Poly1305_64.c
    snapshots/hacl-c/Hacl_Salsa20.c
    snapshots/hacl-c/Hacl_SHA2_256.c
    snapshots/hacl-c/Hacl_SHA2_384.c
    snapshots/hacl-c/Hacl_SHA2_512.c
    snapshots/hacl-c/NaCl.c)

# Trusted files
set(SOURCE_FILES_TRUSTED
    snapshots/api/haclnacl.c
    snapshots/hacl-c/kremlib.c
    snapshots/experimental/Hacl_Unverified_Random.c)

# Experimental Files
set(SOURCE_FILES_EXPERIMENTAL
    snapshots/hacl-c-experimental/cpuid.c
    snapshots/hacl-c-experimental/drng.c
    snapshots/hacl-c-experimental/Hacl_Random.c)

# Public header files
set(HEADER_FILES
    snapshots/api/HACL.h
    snapshots/api/haclnacl.h
    snapshots/hacl-c/vec128.h
    snapshots/hacl-c/kremlib_base.h
    snapshots/hacl-c/kremlib.h
    snapshots/hacl-c/AEAD_Poly1305_64.h
    snapshots/hacl-c/FStar_UInt128.h
    snapshots/hacl-c/Hacl_Chacha20.h
    snapshots/hacl-c/Hacl_Chacha20Poly1305.h
    snapshots/hacl-c/Hacl_Chacha20_Vec128.h
    snapshots/hacl-c/Hacl_Curve25519.h
    snapshots/hacl-c/Hacl_Ed25519.h
    snapshots/hacl-c/Hacl_HMAC_SHA2_256.h
    snapshots/hacl-c/Hacl_Policies.h
    snapshots/hacl-c/Hacl_Poly1305_32.h
    snapshots/hacl-c/Hacl_Poly1305_64.h
    snapshots/hacl-c/Hacl_Salsa20.h
    snapshots/hacl-c/Hacl_SHA2_256.h
    snapshots/hacl-c/Hacl_SHA2_384.h
    snapshots/hacl-c/Hacl_SHA2_512.h
    snapshots/hacl-c/NaCl.h)

# Define a user variable to determinate if experimental files are build
option(Experimental "Include experimental code in HACL* build" OFF)

# Final set of files to build the libraries upon
if (Experimental)
   set(SOURCE_FILES ${SOURCE_FILES_VERIFIED} ${SOURCE_FILES_TRUSTED} ${SOURCE_FILES_EXPERIMENTAL})
else ()
   set(SOURCE_FILES ${SOURCE_FILES_VERIFIED} ${SOURCE_FILES_TRUSTED})
endif ()

# Compilation options
# set(CMAKE_C_FLAGS "-Wall -Wextra")

# Compilation options depending on the architecture
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
   # 64 bits
   if (MSVC)
      set(CMAKE_C_FLAGS "-DKRML_NOUINT128")
   endif()
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
   # 32 bits
   set(CMAKE_C_FLAGS "-DKRML_NOUINT128")
endif()

# Generate both a static and a shared library
#
# Note: on Windows, depending on the build system,
#       both static and shared can have the .lib extension
#       (You can change the OUTPUT_NAME in that case...)
add_library(hacl_static STATIC ${SOURCE_FILES})
set_target_properties(hacl_static PROPERTIES OUTPUT_NAME hacl)

add_library(hacl_shared SHARED ${SOURCE_FILES})
set_target_properties(hacl_shared PROPERTIES OUTPUT_NAME hacl)

set_target_properties(hacl_shared hacl_static PROPERTIES
    PUBLIC_HEADER "${HEADER_FILES}")

INSTALL(TARGETS hacl_shared hacl_static LIBRARY
    DESTINATION "lib"
    ARCHIVE DESTINATION "lib"
    PUBLIC_HEADER DESTINATION "include/hacl")
back to top