Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,14 @@ find_package(Ruby 3.4.8 EXACT REQUIRED)
include(cmake/Bundler.cmake)
include(cmake/CompilerOptions.cmake)
include(cmake/CPM.cmake)
include(CTest)
include(cmake/dependencies.cmake)
include(cmake/softfloat.cmake)

add_subdirectory(lib)
add_subdirectory(sim_lib)
add_subdirectory(sim_gen)

if(UNIT_TESTS)
add_subdirectory(tests)
endif()
16 changes: 16 additions & 0 deletions cmake/dependencies.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,19 @@ CPMAddPackage(
GIT_TAG 12.0.0
EXCLUDE_FROM_ALL True
SYSTEM True)

# PROPOSAL:
# Add GTest for unit testing.
if(UNIT_TESTS)
# GoogleTest: C++ unit testing framework
CPMAddPackage(
NAME googletest
GITHUB_REPOSITORY google/googletest
GIT_TAG v1.17.0
VERSION 1.17.0
EXCLUDE_FROM_ALL True
SYSTEM True
OPTIONS
"INSTALL_GTEST OFF"
"gtest_force_shared_crt ON")
endif()
63 changes: 63 additions & 0 deletions cmake/softfloat.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# softfloat: floating point arithmetic library
CPMAddPackage(
NAME softfloat
GITHUB_REPOSITORY ucb-bar/berkeley-softfloat-3
GIT_TAG master
DOWNLOAD_ONLY YES
EXCLUDE_FROM_ALL True
SYSTEM True)

# Generate platform.h
set(SOFTFLOAT_PLATFORM_H ${CMAKE_CURRENT_BINARY_DIR}/platform.h)
file(WRITE ${SOFTFLOAT_PLATFORM_H}
"#ifndef SOFTFLOAT_PLATFORM_H
#define SOFTFLOAT_PLATFORM_H

#include <stdint.h>
#include <stdbool.h>

#endif
")

# Collect all required source files
file(GLOB SOFTFLOAT_SRC
${softfloat_SOURCE_DIR}/source/*.c
${softfloat_SOURCE_DIR}/source/s_*.c
${softfloat_SOURCE_DIR}/source/specialize/*.c
)

# Select platform-specific primitives based on system
if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64")
file(GLOB SOFTFLOAT_PLATFORM_SRC
${softfloat_SOURCE_DIR}/source/8086-SSE/*.c
)
set(SOFTFLOAT_PLATFORM_DIR ${softfloat_SOURCE_DIR}/source/8086-SSE)
else()
file(GLOB SOFTFLOAT_PLATFORM_SRC
${softfloat_SOURCE_DIR}/source/generic/*.c
)
set(SOFTFLOAT_PLATFORM_DIR ${softfloat_SOURCE_DIR}/source/generic)
endif()

list(APPEND SOFTFLOAT_SRC ${SOFTFLOAT_PLATFORM_SRC})

# Exclude unsupported formats
list(FILTER SOFTFLOAT_SRC EXCLUDE REGEX ".*F80.*")
list(FILTER SOFTFLOAT_SRC EXCLUDE REGEX ".*F128.*")
list(FILTER SOFTFLOAT_SRC EXCLUDE REGEX ".*bf16.*")
list(FILTER SOFTFLOAT_SRC EXCLUDE REGEX ".*f16_.*")

# Create the static library
add_library(softfloat STATIC ${SOFTFLOAT_SRC})

target_include_directories(softfloat PUBLIC
${softfloat_SOURCE_DIR}/source/include
${softfloat_SOURCE_DIR}/source
${SOFTFLOAT_PLATFORM_DIR}
${CMAKE_CURRENT_BINARY_DIR}
)

target_compile_definitions(softfloat PRIVATE
SOFTFLOAT_FAST_INT64
SOFTFLOAT_FAST_INT64
)
Loading
Loading