Skip to content

Commit

Permalink
Add write-f32 test
Browse files Browse the repository at this point in the history
  • Loading branch information
brglng committed Mar 14, 2021
1 parent 22f2619 commit eac5abb
Show file tree
Hide file tree
Showing 4 changed files with 118 additions and 63 deletions.
145 changes: 83 additions & 62 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
cmake_minimum_required(VERSION 3.14)
if(POLICY CMP0025)
cmake_policy(SET CMP0025 NEW)
cmake_policy(SET CMP0025 NEW)
endif()
if(POLICY CMP0048)
cmake_policy(SET CMP0048 NEW)
cmake_policy(SET CMP0048 NEW)
endif()
if(POLICY CMP0054)
cmake_policy(SET CMP0054 NEW)
cmake_policy(SET CMP0054 NEW)
endif()
if(POLICY CMP0077)
cmake_policy(SET CMP0077 NEW)
cmake_policy(SET CMP0077 NEW)
endif()
list(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules")

Expand All @@ -26,24 +26,24 @@ set(${PROJECT_NAME}_VERSION ${PROJECT_VERSION})

# CMake variables that affects building
if(${CMAKE_PROJECT_NAME} STREQUAL ${PROJECT_NAME})
if(NOT DEFINED CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE)
endif()

if(NOT DEFINED BUILD_SHARED_LIBS)
set(BUILD_SHARED_LIBS ON CACHE BOOL "enable building of shared libraries instead of static ones" FORCE)
endif()

if(NOT DEFINED CMAKE_POSITION_INDEPENDENT_CODE)
set(CMAKE_POSITION_INDEPENDENT_CODE ON CACHE BOOL "enable position independent code" FORCE)
endif()

include(CTest)
message(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
message(STATUS "CMAKE_INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX}")
message(STATUS "CMAKE_POSITION_INDEPENDENT_CODE: ${CMAKE_POSITION_INDEPENDENT_CODE}")
message(STATUS "BUILD_SHARED_LIBS: ${BUILD_SHARED_LIBS}")
message(STATUS "BUILD_TESTING: ${BUILD_TESTING}")
if(NOT DEFINED CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE)
endif()

if(NOT DEFINED BUILD_SHARED_LIBS)
set(BUILD_SHARED_LIBS ON CACHE BOOL "enable building of shared libraries instead of static ones" FORCE)
endif()

if(NOT DEFINED CMAKE_POSITION_INDEPENDENT_CODE)
set(CMAKE_POSITION_INDEPENDENT_CODE ON CACHE BOOL "enable position independent code" FORCE)
endif()

include(CTest)
message(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
message(STATUS "CMAKE_INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX}")
message(STATUS "CMAKE_POSITION_INDEPENDENT_CODE: ${CMAKE_POSITION_INDEPENDENT_CODE}")
message(STATUS "BUILD_SHARED_LIBS: ${BUILD_SHARED_LIBS}")
message(STATUS "BUILD_TESTING: ${BUILD_TESTING}")
endif()

include(GNUInstallDirs)
Expand All @@ -52,67 +52,88 @@ include(wavTargetProperties)
add_library(${PROJECT_NAME} src/wav.c)
add_library(wav::wav ALIAS wav)
target_include_directories(${PROJECT_NAME}
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
PRIVATE
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src>
)
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
PRIVATE
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src>
)
target_compile_features(${PROJECT_NAME} PRIVATE ${wav_compile_features})
target_compile_definitions(${PROJECT_NAME} PRIVATE ${wav_compile_definitions})
target_compile_options(${PROJECT_NAME} PRIVATE
${wav_c_flags}
$<$<CONFIG:RELEASE>:${wav_compile_options_release}>
$<$<CONFIG:RELWITHDEBINFO>:${wav_compile_options_release}>
)
${wav_c_flags}
$<$<CONFIG:RELEASE>:${wav_compile_options_release}>
$<$<CONFIG:RELWITHDEBINFO>:${wav_compile_options_release}>
)

if(BUILD_TESTING)
add_subdirectory(tests/write_f32)
endif()

export(TARGETS wav NAMESPACE wav FILE wavTargets.cmake)

install(
TARGETS ${PROJECT_NAME}
EXPORT wavTargets
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
TARGETS ${PROJECT_NAME}
EXPORT wavTargets
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
)

export(PACKAGE wav)

install(DIRECTORY include DESTINATION .)

install(
FILES README.md CHANGELOG.md LICENSE
DESTINATION ${CMAKE_INSTALL_DATADIR}/doc/${PROJECT_NAME}
)
FILES README.md CHANGELOG.md LICENSE
DESTINATION ${CMAKE_INSTALL_DATADIR}/doc/${PROJECT_NAME}
)

install(EXPORT wavTargets
FILE wavTargets.cmake
NAMESPACE wav::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
)
FILE wavTargets.cmake
NAMESPACE wav::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
)

include(CMakePackageConfigHelpers)
write_basic_package_version_file(
wavConfigVersion.cmake
VERSION ${PACKAGE_VERSION}
COMPATIBILITY SameMajorVersion
)
wavConfigVersion.cmake
VERSION ${PACKAGE_VERSION}
COMPATIBILITY SameMajorVersion
)

configure_file(cmake/wavConfig.cmake.in wavConfig.cmake @ONLY)
install(
FILES
"${CMAKE_CURRENT_BINARY_DIR}/wavConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/wavConfigVersion.cmake"
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
)
FILES
"${CMAKE_CURRENT_BINARY_DIR}/wavConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/wavConfigVersion.cmake"
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
)

if(${CMAKE_PROJECT_NAME} STREQUAL ${PROJECT_NAME})
set(CPACK_PACKAGE_NAME "wav")
set(CPACK_GENERATOR "TXZ")
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
set(CPACK_SOURCE_IGNORE_FILES "/\\\\.git/;\\\\.git.*;/build/;/backup/;/cmake-build-.*/;/\\\\.idea/;/\\\\.ycm_extra_conf\\\\..*;/GPATH$;/GRTAGS$;/GSYMS$;/GTAGS$;\\\\.swp$;\\\\.swo$;.DS_Store;.ccls;.ccls-cache")
set(CPACK_SOURCE_GENERATOR "TXZ")
include(CPack)
set(CPACK_PACKAGE_NAME "wav")
set(CPACK_GENERATOR "TXZ")
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
set(CPACK_SOURCE_IGNORE_FILES
"/\\\\.git/"
"\\\\.git.*"
"/build/"
"/backup/"
"/cmake-build-.*/"
"/\\\\.idea/"
"/\\\\.ycm_extra_conf\\\\..*"
"/GPATH$"
"/GRTAGS$"
"/GSYMS$"
"/GTAGS$"
"\\\\.swp$"
"\\\\.swo$"
".DS_Store"
".ccls"
".ccls-cache"
)
set(CPACK_SOURCE_GENERATOR "TXZ")
include(CPack)
endif()
1 change: 0 additions & 1 deletion cmake/Modules/wavTargetProperties.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ elseif(${CMAKE_C_COMPILER_ID} MATCHES "^(GNU|.*Clang)$")
-Wformat=2
-Wmissing-include-dirs
-Wnarrowing
-Wsign-conversion
-Wpointer-arith
-Wshadow
-Wuninitialized
Expand Down
10 changes: 10 additions & 0 deletions tests/write_f32/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
add_executable(write-f32 main.c)
target_link_libraries(write-f32 wav::wav)
target_include_directories(write-f32 PRIVATE ${CMAKE_SOURCE_DIR}/include)
target_compile_features(write-f32 PRIVATE ${wav_compile_features})
target_compile_definitions(write-f32 PRIVATE ${wav_compile_definitions})
target_compile_options(write-f32 PRIVATE
${wav_c_flags}
$<$<CONFIG:RELEASE>:${wav_compile_options_release}>
$<$<CONFIG:RELWITHDEBINFO>:${wav_compile_options_release}>
)
25 changes: 25 additions & 0 deletions tests/write_f32/main.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#include <math.h>
#include <stdlib.h>
#include "wav.h"

void generate_sine_wave(float *x, int sample_rate, int len)
{
for (int i = 0; i < len; ++i) {
x[i] = 0.5f * cosf(2 * 3.14159265358979323f * 440.0f * i / sample_rate);
}
}

int main(void)
{
float *buf = malloc(sizeof(float) * 10 * 44100);
generate_sine_wave(buf, 44100, 10 * 44100);
WavFile *fp = wav_open("out.wav", "wb");
wav_set_format(fp, WAV_FORMAT_IEEE_FLOAT);
wav_set_sample_size(fp, sizeof(float));
wav_set_num_channels(fp, 1);
wav_set_sample_rate(fp, 44100);
wav_write(fp, buf, 10 * 44100);
wav_close(fp);
free(buf);
return 0;
}

0 comments on commit eac5abb

Please # to comment.