cmake_minimum_required(VERSION 3.5)
-project(lightrec LANGUAGES C VERSION 0.8)
-
-set(BUILD_SHARED_LIBS ON CACHE BOOL "Build shared libraries")
-if (NOT BUILD_SHARED_LIBS)
- add_definitions(-DLIGHTREC_STATIC)
-endif (NOT BUILD_SHARED_LIBS)
-
-if (NOT LOG_LEVEL)
- set(LOG_LEVEL Info CACHE STRING "Log level" FORCE)
- set_property(CACHE LOG_LEVEL PROPERTY STRINGS NoLog Error Warning Info Debug)
-endif()
-
-if (NOT CMAKE_BUILD_TYPE)
- set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
- "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel."
- FORCE)
- set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS None Debug Release RelWithDebInfo MinSizeRel)
-endif()
-
-string(TOUPPER ${LOG_LEVEL} LIGHTREC_LOG_LEVEL)
-add_definitions(-DLOG_LEVEL=${LIGHTREC_LOG_LEVEL}_L)
-
-if (CMAKE_COMPILER_IS_GNUCC)
- add_compile_options(-fvisibility=hidden)
-endif()
-
-set(HAS_DEFAULT_ELM ${CMAKE_COMPILER_IS_GNUCC})
+project(lightrec LANGUAGES C VERSION 0.9)
list(APPEND LIGHTREC_SOURCES
blockcache.c
regcache.h
)
+add_library(lightrec ${LIGHTREC_SOURCES} ${LIGHTREC_HEADERS})
+set_target_properties(lightrec PROPERTIES
+ VERSION ${PROJECT_VERSION}
+ SOVERSION ${PROJECT_VERSION_MAJOR}
+ PUBLIC_HEADER lightrec.h
+ C_STANDARD 11
+ C_STANDARD_REQUIRED ON
+ C_EXTENSIONS OFF
+)
+
+set(BUILD_SHARED_LIBS ON CACHE BOOL "Build shared libraries")
+if (NOT BUILD_SHARED_LIBS)
+ target_compile_definitions(lightrec PRIVATE LIGHTREC_STATIC)
+endif (NOT BUILD_SHARED_LIBS)
+
+if (NOT LOG_LEVEL)
+ set(LOG_LEVEL Info CACHE STRING "Log level" FORCE)
+ set_property(CACHE LOG_LEVEL PROPERTY STRINGS NoLog Error Warning Info Debug)
+endif()
+
+if (NOT CMAKE_BUILD_TYPE)
+ set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
+ "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel."
+ FORCE)
+ set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS None Debug Release RelWithDebInfo MinSizeRel)
+endif()
+
+string(TOUPPER ${LOG_LEVEL} LIGHTREC_LOG_LEVEL)
+target_compile_definitions(lightrec PRIVATE LOG_LEVEL=${LIGHTREC_LOG_LEVEL}_L)
+
+if (CMAKE_COMPILER_IS_GNUCC)
+ target_compile_options(lightrec PRIVATE -fvisibility=hidden)
+endif()
+
+set(HAS_DEFAULT_ELM ${CMAKE_COMPILER_IS_GNUCC})
+
option(ENABLE_FIRST_PASS "Run the interpreter as first-pass optimization" ON)
-option(ENABLE_THREADED_COMPILER "Enable threaded compiler" OFF)
+option(ENABLE_THREADED_COMPILER "Enable threaded compiler" ON)
if (ENABLE_THREADED_COMPILER)
- list(APPEND LIGHTREC_SOURCES recompiler.c reaper.c)
+ target_sources(lightrec PRIVATE recompiler.c reaper.c)
if (NOT ENABLE_FIRST_PASS)
message(SEND_ERROR "Threaded compiler requires first-pass optimization")
option(OPT_EARLY_UNLOAD "(optimization) Unload registers early" ON)
option(OPT_PRELOAD_PC "(optimization) Preload PC value into register" ON)
-include_directories(${CMAKE_CURRENT_BINARY_DIR})
-
-add_library(${PROJECT_NAME} ${LIGHTREC_SOURCES} ${LIGHTREC_HEADERS})
-set_target_properties(${PROJECT_NAME} PROPERTIES
- VERSION ${PROJECT_VERSION}
- SOVERSION ${PROJECT_VERSION_MAJOR}
- PUBLIC_HEADER lightrec.h
- C_STANDARD 11
- C_STANDARD_REQUIRED ON
- C_EXTENSIONS OFF
-)
+target_include_directories(lightrec PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
if (CMAKE_C_COMPILER_ID MATCHES "GNU|Clang")
- target_compile_options(${PROJECT_NAME} PRIVATE -Wall)
+ target_compile_options(lightrec PRIVATE -Wall)
endif()
if (CMAKE_C_COMPILER_ID STREQUAL "Clang")
- target_compile_options(${PROJECT_NAME} PRIVATE -Wno-initializer-overrides)
+ target_compile_options(lightrec PRIVATE -Wno-initializer-overrides)
endif()
if (ENABLE_THREADED_COMPILER)
- find_library(PTHREAD_LIBRARIES pthread REQUIRED)
- find_path(PTHREAD_INCLUDE_DIR pthread.h REQUIRED)
+ include(FindThreads)
+
+ if (NOT CMAKE_USE_PTHREADS_INIT)
+ message(SEND_ERROR "Could not find compatible threads library")
+ endif()
- include_directories(${PTHREAD_INCLUDE_DIR})
- target_link_libraries(${PROJECT_NAME} PRIVATE ${PTHREAD_LIBRARIES})
+ target_link_libraries(lightrec PUBLIC Threads::Threads)
endif (ENABLE_THREADED_COMPILER)
option(ENABLE_CODE_BUFFER "Enable external code buffer" ON)
if (ENABLE_CODE_BUFFER)
- target_sources(${PROJECT_NAME} PRIVATE tlsf/tlsf.c)
- target_include_directories(${PROJECT_NAME} PRIVATE tlsf)
+ target_sources(lightrec PRIVATE tlsf/tlsf.c)
+ target_include_directories(lightrec PRIVATE tlsf)
endif (ENABLE_CODE_BUFFER)
find_library(LIBLIGHTNING lightning REQUIRED)
find_path(LIBLIGHTNING_INCLUDE_DIR lightning.h REQUIRED)
-include_directories(${LIBLIGHTNING_INCLUDE_DIR})
-target_link_libraries(${PROJECT_NAME} PRIVATE ${LIBLIGHTNING})
+target_include_directories(lightrec PUBLIC ${LIBLIGHTNING_INCLUDE_DIR})
+target_link_libraries(lightrec PUBLIC ${LIBLIGHTNING})
if (LOG_LEVEL STREQUAL Debug)
set(ENABLE_DISASSEMBLER ON)
- target_sources(${PROJECT_NAME} PRIVATE disassembler.c)
+ target_sources(lightrec PRIVATE disassembler.c)
endif()
configure_file(lightrec-config.h.cmakein lightrec-config.h @ONLY)
include(GNUInstallDirs)
-install(TARGETS ${PROJECT_NAME}
+install(TARGETS lightrec
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}