Skip to content

Commit

Permalink
CMake: build corec parts as libraries
Browse files Browse the repository at this point in the history
Assembled into the "corec" target. So it's only built once.
  • Loading branch information
robUx4 committed Dec 29, 2024
1 parent 8bb1586 commit 28d0640
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 53 deletions.
47 changes: 26 additions & 21 deletions corec/corec/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,9 @@ set(corec_node_PUBLIC_HEADERS
${CMAKE_CURRENT_SOURCE_DIR}/node/nodetree.h
${CMAKE_CURRENT_SOURCE_DIR}/node/nodetools.h
)
add_library("corec_node" INTERFACE)
target_sources("corec_node" INTERFACE ${corec_node_SOURCES} ${corec_node_PUBLIC_HEADERS})
target_include_directories("corec_node" INTERFACE ".")
target_link_libraries("corec_node" INTERFACE "corec_array" "corec_str" "corec_file")
add_library("corec_node" ${corec_node_SOURCES} ${corec_node_PUBLIC_HEADERS} ${corec_base_PUBLIC_HEADERS})
target_include_directories("corec_node" PUBLIC ".")
target_link_libraries("corec_node" PRIVATE "corec_bare")

# Array API
set(corec_array_SOURCES
Expand All @@ -57,12 +56,10 @@ set(corec_array_SOURCES
set(corec_array_PUBLIC_HEADERS
${CMAKE_CURRENT_SOURCE_DIR}/array/array.h
)
add_library("corec_array" INTERFACE)
target_sources("corec_array" INTERFACE ${corec_array_SOURCES} ${corec_array_PUBLIC_HEADERS})
target_link_libraries("corec_array" INTERFACE "corec_bare")
add_library("corec_array" ${corec_array_SOURCES} ${corec_array_PUBLIC_HEADERS} ${corec_base_PUBLIC_HEADERS})
target_link_libraries("corec_array" PRIVATE "corec_bare")

# String API
add_library("corec_str" INTERFACE)
set(corec_str_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/str/str.c
)
Expand All @@ -78,44 +75,52 @@ set(corec_str_LINUX_SOURCES
set(corec_str_PUBLIC_HEADERS
${CMAKE_CURRENT_SOURCE_DIR}/str/str.h
)
target_sources("corec_str" INTERFACE ${corec_str_SOURCES} ${corec_str_PUBLIC_HEADERS})
add_library("corec_str" ${corec_str_SOURCES} ${corec_str_PUBLIC_HEADERS})
if (WIN32)
target_sources("corec_str" INTERFACE ${corec_str_WIN32_SOURCES})
target_sources("corec_str" PRIVATE ${corec_str_WIN32_SOURCES})
elseif(APPLE)
target_sources("corec_str" INTERFACE ${corec_str_OSX_SOURCES})
target_sources("corec_str" PRIVATE ${corec_str_OSX_SOURCES})
elseif(UNIX)
target_sources("corec_str" INTERFACE ${corec_str_LINUX_SOURCES})
target_sources("corec_str" PRIVATE ${corec_str_LINUX_SOURCES})
endif(WIN32)
target_include_directories("corec_str" PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>)
target_include_directories("corec_str" PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>)

add_subdirectory("helpers")

add_library("corec")
add_library("corec" INTERFACE ${corec_base_PUBLIC_HEADERS})
set_target_properties("corec" PROPERTIES LINKER_LANGUAGE C)
target_include_directories("corec"
PRIVATE
INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/helpers>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
# keep until the sources are split
target_include_directories("corec" PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>)
target_include_directories("corec" INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>)

set(corec_INTERNAL_LIBS
$<BUILD_INTERFACE:corec_node>
$<BUILD_INTERFACE:corec_parser>
$<BUILD_INTERFACE:corec_node>
$<BUILD_INTERFACE:corec_array>
$<BUILD_INTERFACE:corec_str>
$<BUILD_INTERFACE:corec_charconvert>
$<BUILD_INTERFACE:corec_file>
$<BUILD_INTERFACE:corec_date>
)

if (BUILD_SHARED_LIBS)
target_link_libraries("corec" PRIVATE ${corec_INTERNAL_LIBS})
target_compile_definitions("corec" PUBLIC NODE_IMPORTS ARRAY_IMPORTS CHARCONVERT_IMPORTS DATE_IMPORTS FILE_IMPORTS STR_IMPORTS)
target_link_libraries("corec" INTERFACE ${corec_INTERNAL_LIBS})
target_compile_definitions("corec" INTERFACE NODE_IMPORTS ARRAY_IMPORTS CHARCONVERT_IMPORTS DATE_IMPORTS FILE_IMPORTS STR_IMPORTS)
else(BUILD_SHARED_LIBS)
target_link_libraries("corec" PUBLIC ${corec_INTERNAL_LIBS})
target_link_libraries("corec" INTERFACE ${corec_INTERNAL_LIBS})
endif(BUILD_SHARED_LIBS)

set(corec_PUBLIC_HEADERS
${corec_node_PUBLIC_HEADERS} ${corec_parser_PUBLIC_HEADERS}
${corec_node_PUBLIC_HEADERS}
${corec_parser_PUBLIC_HEADERS}
)

set_target_properties("corec" PROPERTIES
Expand Down
57 changes: 29 additions & 28 deletions corec/corec/helpers/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -19,32 +19,32 @@ set(corec_file_PUBLIC_HEADERS
${CMAKE_CURRENT_SOURCE_DIR}/file/streams.h
PARENT_SCOPE
)
add_library("corec_file" INTERFACE)
target_sources("corec_file" INTERFACE ${corec_file_BASE_SOURCES} ${corec_file_PUBLIC_HEADERS})
add_library("corec_file" ${corec_file_BASE_SOURCES} ${corec_file_PUBLIC_HEADERS})
if (CONFIG_STDIO)
target_sources("corec_file" INTERFACE ${corec_file_STDIO_SOURCES})
target_sources("corec_file" PRIVATE ${corec_file_STDIO_SOURCES})
endif(CONFIG_STDIO)
if (WIN32)
target_sources("corec_file" INTERFACE ${corec_file_WIN32_SOURCES})
target_sources("corec_file" PRIVATE ${corec_file_WIN32_SOURCES})

# for SHFileOperation to move files in the recycle bin
target_link_libraries("corec_file" INTERFACE shell32)
target_link_libraries("corec_file" PRIVATE shell32)
elseif(UNIX)
check_include_file(sys/mount.h HAVE_SYS_MOUNT_H)
check_include_file(sys/vfs.h HAVE_SYS_VFS_H)
check_include_file(sys/statvfs.h HAVE_SYS_STATVFS_H)
if (HAVE_SYS_MOUNT_H)
target_compile_definitions("corec_file" INTERFACE HAVE_SYS_MOUNT_H)
target_compile_definitions("corec_file" PRIVATE HAVE_SYS_MOUNT_H)
endif()
if (HAVE_SYS_VFS_H)
target_compile_definitions("corec_file" INTERFACE HAVE_SYS_VFS_H)
target_compile_definitions("corec_file" PRIVATE HAVE_SYS_VFS_H)
endif()
if (HAVE_SYS_STATVFS_H)
target_compile_definitions("corec_file" INTERFACE HAVE_SYS_STATVFS_H)
target_compile_definitions("corec_file" PRIVATE HAVE_SYS_STATVFS_H)
endif()
target_sources("corec_file" INTERFACE ${corec_file_UNIX_SOURCES})
target_sources("corec_file" PRIVATE ${corec_file_UNIX_SOURCES})
endif(WIN32)
target_link_libraries("corec_file" INTERFACE "corec_node" "corec_date")
target_include_directories("corec_file" PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../..>)
target_include_directories("corec_file" PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/..>)

# Parser API
set(corec_parser_SOURCES
Expand All @@ -68,17 +68,16 @@ set(corec_parser_PUBLIC_HEADERS
${CMAKE_CURRENT_SOURCE_DIR}/parser/urlpart.h
PARENT_SCOPE
)
add_library("corec_parser" INTERFACE)
target_sources("corec_parser" INTERFACE ${corec_parser_SOURCES} ${corec_parser_PUBLIC_HEADERS})
target_link_libraries("corec_parser" INTERFACE "corec_str" "corec_charconvert" "corec_file")
add_library("corec_parser" ${corec_parser_SOURCES} ${corec_parser_PUBLIC_HEADERS})
target_include_directories("corec_parser" PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../..>)
target_include_directories("corec_parser" PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/..>)
if (CYGWIN)
# if CMake wasn't this piece of shit this would simply work
target_link_libraries("corec_parser" INTERFACE iconv)
target_link_libraries("corec_parser" PRIVATE iconv)
endif (CYGWIN)
target_include_directories("corec_parser" INTERFACE ".")
target_include_directories("corec_parser" PUBLIC ".")

# Date API
add_library("corec_date" INTERFACE)
set(corec_date_WIN32_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/date/date_win32.c
)
Expand All @@ -89,13 +88,14 @@ set(corec_date_PUBLIC_HEADERS
${CMAKE_CURRENT_SOURCE_DIR}/date/date.h
PARENT_SCOPE
)
add_library("corec_date" ${corec_date_PUBLIC_HEADERS} ${corec_base_PUBLIC_HEADERS})
if (WIN32)
target_sources("corec_date" INTERFACE ${corec_date_WIN32_SOURCES})
target_sources("corec_date" PRIVATE ${corec_date_WIN32_SOURCES})
elseif(UNIX)
target_sources("corec_date" INTERFACE ${corec_date_UNIX_SOURCES})
target_sources("corec_date" PRIVATE ${corec_date_UNIX_SOURCES})
endif(WIN32)
target_sources("corec_date" INTERFACE ${corec_date_PUBLIC_HEADERS})
target_link_libraries("corec_date" INTERFACE "corec_bare")
target_include_directories("corec_date" PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../..>)
target_include_directories("corec_date" PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/..>)

# Character Conversion API
set(corec_charconvert_WIN32_SOURCES
Expand All @@ -114,18 +114,19 @@ set(corec_charconvert_PUBLIC_HEADERS
${CMAKE_CURRENT_SOURCE_DIR}/charconvert/charconvert.h
PARENT_SCOPE
)
add_library("corec_charconvert" INTERFACE)
add_library("corec_charconvert" ${corec_charconvert_PUBLIC_HEADERS} ${corec_base_PUBLIC_HEADERS})
if (WIN32)
target_sources("corec_charconvert" INTERFACE ${corec_charconvert_WIN32_SOURCES})
target_sources("corec_charconvert" PRIVATE ${corec_charconvert_WIN32_SOURCES})
elseif(APPLE)
target_link_libraries("corec_charconvert" INTERFACE "-framework CoreFoundation")
target_sources("corec_charconvert" INTERFACE ${corec_charconvert_OSX_SOURCES})
target_link_libraries("corec_charconvert" PRIVATE "-framework CoreFoundation")
target_sources("corec_charconvert" PRIVATE ${corec_charconvert_OSX_SOURCES})
elseif(UNIX)
target_sources("corec_charconvert" INTERFACE ${corec_charconvert_LINUX_SOURCES})
target_sources("corec_charconvert" PRIVATE ${corec_charconvert_LINUX_SOURCES})
else(UNIX)
target_sources("corec_charconvert" INTERFACE ${corec_charconvert_OTHER_SOURCES})
target_sources("corec_charconvert" PRIVATE ${corec_charconvert_OTHER_SOURCES})
if (CYGWIN)
target_link_libraries("corec_charconvert" INTERFACE iconv)
target_link_libraries("corec_charconvert" PRIVATE iconv)
endif (CYGWIN)
endif(WIN32)
target_link_libraries("corec_charconvert" INTERFACE "corec_bare")
target_include_directories("corec_charconvert" PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../..>)
target_include_directories("corec_charconvert" PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/..>)
6 changes: 3 additions & 3 deletions corec/tests/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
add_executable("string_test" string_test.c)
target_link_libraries("string_test" PUBLIC "corec_str" "corec_charconvert")
target_link_libraries("string_test" PUBLIC "corec")
if (CYGWIN)
# if CMake wasn't this piece of shit this would simply work
target_link_libraries("string_test" PRIVATE iconv)
endif (CYGWIN)

add_executable("file_test" file_test.c)
target_link_libraries("file_test" PUBLIC "corec_file")
target_link_libraries("file_test" PUBLIC "corec")

add_executable("node_test" node_test.c)
target_link_libraries("node_test" PUBLIC "corec_node")
target_link_libraries("node_test" PUBLIC "corec")

# add_executable("parser_test" parser_test.c)
# target_link_libraries("parser_test" PUBLIC "corec_parser")
2 changes: 1 addition & 1 deletion libebml2/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ install(EXPORT Ebml2 DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/ebml2)

# TODO fix build
add_executable("ebmltree" test/ebmltree.c)
target_link_libraries("ebmltree" PUBLIC "ebml2")
target_link_libraries("ebmltree" PUBLIC "ebml2" "corec")

# TODO finish this
# configure_file(legacy/ebml2_legacy_project.h.in legacy/ebml2_legacy_project.h)
Expand Down

0 comments on commit 28d0640

Please sign in to comment.