CMake で b1.exe・libaribb1.dll をビルドできるように

This commit is contained in:
tsukumijima 2021-10-25 04:52:11 +09:00
parent 01a352f189
commit c0dec22683
7 changed files with 172 additions and 7 deletions

9
.gitignore vendored
View File

@ -204,7 +204,7 @@ GeneratedArtifacts/
_Pvt_Extensions/
ModelManifest.xml
# Xcode
# Xcode
## Build generated
build/
DerivedData/
@ -248,9 +248,12 @@ CMakeScripts
cmake_install.cmake
Makefile
Makefile.dep
b25
config.h
b1
b25
libaribb1.so*
libaribb25.so*
version.rc
version_b1.rc
version_b25.rc
*.o
*.pc

View File

@ -28,6 +28,25 @@ if(NOT WIN32)
option(USE_NEON "enable NEON" OFF)
endif()
# ---------- set variable (libaribb1) ----------
set(ARIBB1_LIB_NAME "aribb1")
set(ARIBB1_CMD_NAME "b1")
set(ARIBB1_URL "https://github.com/tsukumijima/libaribb25")
set(ARIBB1_DESCRIPTION "Reference implementation of ARIB STD-B1")
set(ARIBB1_COMPANY "㋲製作所")
set(ARIBB1_COPYRIGHT "©2012 茂木 和洋")
set(ARIBB1_PRODUCT "ARIB STD-B1")
set(ARIBB1_MAJOR_VERSION "0")
set(ARIBB1_MINOR_VERSION "2")
set(ARIBB1_PATCH_VERSION "7")
set(ARIBB1_VERSION_NUMBER ${ARIBB1_MAJOR_VERSION}.${ARIBB1_MINOR_VERSION}.${ARIBB1_PATCH_VERSION})
set(ARIBB1_VERSION_STRING stz-${ARIBB1_VERSION_NUMBER})
# ---------- set variable (libaribb25) ----------
set(ARIBB25_LIB_NAME "aribb25")
set(ARIBB25_CMD_NAME "b25")
@ -43,6 +62,8 @@ set(ARIBB25_PATCH_VERSION "7")
set(ARIBB25_VERSION_NUMBER ${ARIBB25_MAJOR_VERSION}.${ARIBB25_MINOR_VERSION}.${ARIBB25_PATCH_VERSION})
set(ARIBB25_VERSION_STRING stz-${ARIBB25_VERSION_NUMBER})
# ---------- define flags ----------
if(CMAKE_C_COMPILER_ID MATCHES "(GNU|Clang)")
set(CMAKE_C_FLAGS "-Wall")
set(CMAKE_C_FLAGS_DEBUG "-O2 -g")
@ -103,14 +124,48 @@ if(PCSC_INCLUDE_DIRS)
endif()
link_directories(${PCSC_LIBRARY_DIRS})
add_library(aribb25-objlib OBJECT aribb25/arib_std_b25.c aribb25/b_cas_card.c aribb25/multi2.cc aribb25/ts_section_parser.c aribb25/version.c)
# ---------- libaribb1 ----------
add_library(aribb1-objlib OBJECT aribb25/arib_std_b25.c aribb25/b_cas_card.c aribb25/multi2.cc aribb25/ts_section_parser.c aribb25/version_b1.c)
set_target_properties(aribb1-objlib PROPERTIES COMPILE_DEFINITIONS ARIBB1_DLL)
target_compile_definitions(aribb1-objlib PRIVATE ENABLE_ARIB_STD_B1)
add_library(aribb1-static STATIC $<TARGET_OBJECTS:aribb1-objlib>)
set_target_properties(aribb1-static PROPERTIES OUTPUT_NAME ${ARIBB1_LIB_NAME})
target_link_libraries(aribb1-static PRIVATE ${PCSC_LIBRARIES})
target_compile_definitions(aribb1-static PRIVATE ENABLE_ARIB_STD_B1)
add_library(aribb1-shared SHARED $<TARGET_OBJECTS:aribb1-objlib> ${CMAKE_CURRENT_BINARY_DIR}/version_b1.rc)
set_target_properties(aribb1-shared PROPERTIES MACOSX_RPATH ON)
set_target_properties(aribb1-shared PROPERTIES DEFINE_SYMBOL ARIBB1_DLL)
set_target_properties(aribb1-shared PROPERTIES COMPILE_DEFINITIONS ARIBB1_DLL)
set_target_properties(aribb1-shared PROPERTIES OUTPUT_NAME ${ARIBB1_LIB_NAME})
set_target_properties(aribb1-shared PROPERTIES SOVERSION ${ARIBB1_MAJOR_VERSION})
set_target_properties(aribb1-shared PROPERTIES VERSION ${ARIBB1_VERSION_NUMBER})
target_link_libraries(aribb1-shared PRIVATE ${PCSC_LIBRARIES})
target_compile_definitions(aribb1-shared PRIVATE ENABLE_ARIB_STD_B1)
# ---------- b1 (executable) ----------
add_executable(b1 aribb25/td.c ${CMAKE_CURRENT_BINARY_DIR}/version_b1.rc)
set_target_properties(b1 PROPERTIES OUTPUT_NAME ${ARIBB1_CMD_NAME})
target_link_libraries(b1 PRIVATE ${PCSC_LIBRARIES})
target_link_libraries(b1 PRIVATE aribb1-shared)
target_compile_definitions(b1 PRIVATE ENABLE_ARIB_STD_B1)
configure_file(aribb25/config.h.in config.h @ONLY)
configure_file(aribb25/version_b1.rc.in version_b1.rc @ONLY)
# ---------- libaribb25 ----------
add_library(aribb25-objlib OBJECT aribb25/arib_std_b25.c aribb25/b_cas_card.c aribb25/multi2.cc aribb25/ts_section_parser.c aribb25/version_b25.c)
set_target_properties(aribb25-objlib PROPERTIES COMPILE_DEFINITIONS ARIBB25_DLL)
add_library(aribb25-static STATIC $<TARGET_OBJECTS:aribb25-objlib>)
set_target_properties(aribb25-static PROPERTIES OUTPUT_NAME ${ARIBB25_LIB_NAME})
target_link_libraries(aribb25-static PRIVATE ${PCSC_LIBRARIES})
add_library(aribb25-shared SHARED $<TARGET_OBJECTS:aribb25-objlib> ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
add_library(aribb25-shared SHARED $<TARGET_OBJECTS:aribb25-objlib> ${CMAKE_CURRENT_BINARY_DIR}/version_b25.rc)
set_target_properties(aribb25-shared PROPERTIES MACOSX_RPATH ON)
set_target_properties(aribb25-shared PROPERTIES DEFINE_SYMBOL ARIBB25_DLL)
set_target_properties(aribb25-shared PROPERTIES COMPILE_DEFINITIONS ARIBB25_DLL)
@ -119,15 +174,32 @@ set_target_properties(aribb25-shared PROPERTIES SOVERSION ${ARIBB25_MAJOR_VERSIO
set_target_properties(aribb25-shared PROPERTIES VERSION ${ARIBB25_VERSION_NUMBER})
target_link_libraries(aribb25-shared PRIVATE ${PCSC_LIBRARIES})
add_executable(b25 aribb25/td.c ${CMAKE_CURRENT_BINARY_DIR}/version.rc)
# ---------- b25 (executable) ----------
add_executable(b25 aribb25/td.c ${CMAKE_CURRENT_BINARY_DIR}/version_b25.rc)
set_target_properties(b25 PROPERTIES OUTPUT_NAME ${ARIBB25_CMD_NAME})
target_link_libraries(b25 PRIVATE ${PCSC_LIBRARIES})
target_link_libraries(b25 PRIVATE aribb25-shared)
configure_file(aribb25/config.h.in config.h @ONLY)
configure_file(aribb25/version.rc.in version.rc @ONLY)
configure_file(aribb25/version_b25.rc.in version_b25.rc @ONLY)
# ---------- install (Unix) ----------
if(UNIX AND NOT CYGWIN)
# ---------- libaribb1 ----------
configure_file(aribb25/libaribb1.pc.in ${CMAKE_SHARED_LIBRARY_PREFIX}${ARIBB1_LIB_NAME}.pc @ONLY)
install(TARGETS b1 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
install(TARGETS aribb1-static aribb1-shared ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
install(FILES aribb25/arib_std_b25.h aribb25/b_cas_card.h aribb25/multi2.h aribb25/ts_section_parser.h aribb25/portable.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/aribb1)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}${ARIBB1_LIB_NAME}.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -DLDCONFIG_EXECUTABLE=${LDCONFIG_EXECUTABLE} -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/PostInstall.cmake)")
# ---------- libaribb25 ----------
configure_file(aribb25/libaribb25.pc.in ${CMAKE_SHARED_LIBRARY_PREFIX}${ARIBB25_LIB_NAME}.pc @ONLY)
install(TARGETS b25 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
@ -137,9 +209,23 @@ if(UNIX AND NOT CYGWIN)
install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -DLDCONFIG_EXECUTABLE=${LDCONFIG_EXECUTABLE} -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/PostInstall.cmake)")
add_custom_target(uninstall ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Uninstall.cmake)
# ---------- install (Windows) ----------
elseif(WIN32)
# ---------- libaribb1 ----------
install(TARGETS b1 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
install(TARGETS aribb1-static aribb1-shared ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR})
install(FILES aribb25/arib_std_b25.h aribb25/b_cas_card.h aribb25/multi2.h aribb25/ts_section_parser.h aribb25/portable.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/aribb1)
# ---------- libaribb25 ----------
install(TARGETS b25 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
install(TARGETS aribb25-static aribb25-shared ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR})
install(FILES aribb25/arib_std_b25.h aribb25/b_cas_card.h aribb25/multi2.h aribb25/ts_section_parser.h aribb25/portable.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/aribb25)
add_custom_target(uninstall ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Uninstall.cmake)
endif()

11
aribb25/libaribb1.pc.in Normal file
View File

@ -0,0 +1,11 @@
prefix=@CMAKE_INSTALL_PREFIX@
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
Name: @CMAKE_LIBRARY_PREFIX@@ARIBB1_LIB_NAME@
Description: @ARIBB1_DESCRIPTION@
URL: @ARIBB1_URL@
Version: @ARIBB1_VERSION_STRING@
Libs: -L${libdir} -l@ARIBB1_LIB_NAME@
Cflags: -I${includedir}

17
aribb25/version_b1.c Normal file
View File

@ -0,0 +1,17 @@
#include <stdio.h>
#include <config.h>
#if defined(__GNUC__) || defined(__clang__)
# if !defined(__APPLE__)
const char elf_interp[] __attribute__((section(".interp"))) = ELF_INTERP;
# endif
#include <unistd.h>
void show_version(void)
{
fprintf(stderr, "libaribb1.so - ARIB STD-B1 shared library version %s (%s)\n", ARIBB25_VERSION_STRING, BUILD_GIT_REVISION);
fprintf(stderr, " built with %s %s on %s\n", BUILD_CC_NAME, BUILD_CC_VERSION, BUILD_OS_NAME);
_exit(0);
}
#endif

48
aribb25/version_b1.rc.in Normal file
View File

@ -0,0 +1,48 @@
#include <windows.h>
#include <config.h>
#pragma code_page(65001)
VS_VERSION_INFO VERSIONINFO
FILEVERSION @ARIBB1_MAJOR_VERSION@,@ARIBB1_MINOR_VERSION@,@ARIBB1_PATCH_VERSION@,0
PRODUCTVERSION @ARIBB1_MAJOR_VERSION@,@ARIBB1_MINOR_VERSION@,@ARIBB1_PATCH_VERSION@,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef DEBUG
FILEFLAGS VS_FF_DEBUG | VS_FF_PRERELEASE
#else
FILEFLAGS 0
#endif
FILEOS VOS_NT_WINDOWS32
#ifdef ARIBB1_DLL
FILETYPE VFT_DLL
#else
FILETYPE VFT_APP
#endif
FILESUBTYPE VFT2_UNKNOWN
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "080904b0"
BEGIN
VALUE "CompanyName", "@ARIBB1_COMPANY@"
VALUE "FileDescription", "@ARIBB1_PRODUCT@ built with @CMAKE_C_COMPILER_ID@ @CMAKE_C_COMPILER_VERSION@ on @CMAKE_SYSTEM@"
VALUE "FileVersion", "@ARIBB1_VERSION_STRING@"
VALUE "InternalName", "@PROJECT_NAME@"
VALUE "LegalCopyright", "@ARIBB1_COPYRIGHT@"
#if defined(ARIBB1_DLL)
VALUE "OriginalFilename", "@CMAKE_SHARED_LIBRARY_PREFIX@@ARIBB1_LIB_NAME@@CMAKE_SHARED_LIBRARY_SUFFIX@"
#else
VALUE "OriginalFilename", "@ARIBB1_CMD_NAME@@CMAKE_EXECUTABLE_SUFFIX@"
#endif
#if defined(UNICODE)
VALUE "ProductName", "@ARIBB1_PRODUCT@ UNICODE"
#else
VALUE "ProductName", "@ARIBB1_PRODUCT@"
#endif
VALUE "ProductVersion", "@ARIBB1_VERSION_STRING@ (" BUILD_GIT_REVISION ")"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x809, 1200
END
END