File: CMakeLists.txt

package info (click to toggle)
basis-universal 2.0.2-3
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 216,436 kB
  • sloc: cpp: 163,224; ansic: 51,368; python: 2,824; javascript: 2,637; lisp: 1,026; sh: 161; makefile: 17
file content (136 lines) | stat: -rw-r--r-- 4,918 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
cmake_minimum_required(VERSION 3.5)
project(basisu_encoder_js)

# Toggle Zstd support for KTX2 (ON by default).
option(KTX2_ZSTANDARD "Enable KTX2 Zstandard support" TRUE)
message("KTX2_ZSTANDARD=${KTX2_ZSTANDARD}")

# Only for Emscripten builds.
if(EMSCRIPTEN)
  set(CMAKE_CXX_STANDARD 17)

  # ---------- Pick config once (single-config generators) ----------
  # Supports: Release (default), Debug, SAN
  if(NOT CMAKE_BUILD_TYPE)
    set(CMAKE_BUILD_TYPE "Release")
  endif()
  string(TOUPPER "${CMAKE_BUILD_TYPE}" BUILD_MODE)

  # Per-config compile/link flags
  set(CONFIG_CFLAGS "")
  set(CONFIG_DEFS  "")
  set(CONFIG_LINK  "")

  if(BUILD_MODE STREQUAL "RELEASE")
    set(CONFIG_CFLAGS "-O3")
    set(CONFIG_DEFS   "NDEBUG")
    set(CONFIG_LINK   "-O3 -s ASSERTIONS=0")
  elseif(BUILD_MODE STREQUAL "DEBUG")
    set(CONFIG_CFLAGS "-g -O0")
    set(CONFIG_DEFS   "DEBUG")
    set(CONFIG_LINK   "-g -s ASSERTIONS=2")
  elseif(BUILD_MODE STREQUAL "SAN")
    set(CONFIG_CFLAGS "-g -O1 -fsanitize=undefined -fsanitize=address")
    set(CONFIG_DEFS   "DEBUG")
    set(CONFIG_LINK   "-g -s ASSERTIONS=2 -fsanitize=undefined -fsanitize=address")
  else()
    message(WARNING "Unknown CMAKE_BUILD_TYPE='${CMAKE_BUILD_TYPE}', defaulting to Release-like flags.")
    set(CONFIG_CFLAGS "-O3")
    set(CONFIG_DEFS   "NDEBUG")
    set(CONFIG_LINK   "-O3 -s ASSERTIONS=0")
  endif()

  # ---------- Sources (shared) ----------
  set(SRC_LIST
    ../transcoder/basis_wrappers.cpp
    ../../transcoder/basisu_transcoder.cpp
    ../../encoder/basisu_backend.cpp
    ../../encoder/basisu_basis_file.cpp
    ../../encoder/basisu_comp.cpp
    ../../encoder/basisu_enc.cpp
    ../../encoder/basisu_etc.cpp
    ../../encoder/basisu_frontend.cpp
    ../../encoder/basisu_gpu_texture.cpp
    ../../encoder/basisu_pvrtc1_4.cpp
    ../../encoder/basisu_resampler.cpp
    ../../encoder/basisu_resample_filters.cpp
    ../../encoder/basisu_ssim.cpp
    ../../encoder/basisu_uastc_enc.cpp
    ../../encoder/basisu_bc7enc.cpp
    ../../encoder/basisu_kernels_sse.cpp
    ../../encoder/basisu_opencl.cpp
    ../../encoder/pvpngreader.cpp
    ../../encoder/jpgd.cpp
    ../../encoder/3rdparty/android_astc_decomp.cpp
    ../../encoder/basisu_uastc_hdr_4x4_enc.cpp
    ../../encoder/basisu_astc_hdr_6x6_enc.cpp
    ../../encoder/basisu_astc_hdr_common.cpp
    ../../encoder/basisu_astc_ldr_common.cpp
    ../../encoder/basisu_astc_ldr_encode.cpp
    ../../encoder/3rdparty/tinyexr.cpp
  )
  if(KTX2_ZSTANDARD)
    list(APPEND SRC_LIST ../../zstd/zstd.c)
    set(ZSTD_DEFINITION BASISD_SUPPORT_KTX2_ZSTD=1)
  else()
    set(ZSTD_DEFINITION BASISD_SUPPORT_KTX2_ZSTD=0)
  endif()

  # Common preprocessor defines (same as your original)
  set(COMMON_DEFS
    BASISD_SUPPORT_UASTC=1
    BASISD_SUPPORT_BC7=1
    BASISD_SUPPORT_ATC=0
    BASISD_SUPPORT_ASTC_HIGHER_OPAQUE_QUALITY=0
    BASISD_SUPPORT_PVRTC2=0
    BASISD_SUPPORT_FXT1=0
    BASISD_SUPPORT_ETC2_EAC_RG11=0
    BASISU_SUPPORT_ENCODING=1
    BASISU_SUPPORT_SSE=0
    BASISD_SUPPORT_XUASTC=1
    ${ZSTD_DEFINITION}
  )

  # Base link flags 
  set(LINK_BASE "--bind -s ALLOW_MEMORY_GROWTH=1 -s INITIAL_MEMORY=536870912 -s STACK_SIZE=2097152 -s MODULARIZE=1 -s EXPORT_NAME=BASIS -s EXPORTED_RUNTIME_METHODS=['HEAP8']")
  set(LINK_THREADS "-s USE_PTHREADS=1 -s PTHREAD_POOL_SIZE=18 -s ENVIRONMENT=web,worker")
  set(LINK_WASM64  "-s MEMORY64=1 -sWASM_BIGINT=1 --profiling-funcs")

  # Helper to avoid repetition
  function(add_encoder target out_name use_threads use_wasm64)
    add_executable(${target} ${SRC_LIST})
    set_target_properties(${target} PROPERTIES OUTPUT_NAME "${out_name}" SUFFIX ".js")
    target_include_directories(${target} PRIVATE ../../transcoder)

    # Compile defs and options
    target_compile_definitions(${target} PRIVATE ${COMMON_DEFS} ${CONFIG_DEFS})
    target_compile_options(${target} PRIVATE -fno-strict-aliasing ${CONFIG_CFLAGS})

    if(${use_threads})
      target_compile_options(${target} PRIVATE -matomics -mbulk-memory)
      target_compile_definitions(${target} PRIVATE WASM_THREADS_ENABLED=1)
    endif()
	
    if(${use_wasm64})
      target_compile_options(${target} PRIVATE -s MEMORY64=1)
    endif()

    # Link flags (no generator expressions)
    set(_lf "${LINK_BASE} ${CONFIG_LINK}")
	
    if(${use_threads})
      set(_lf "${_lf} ${LINK_THREADS}")
    endif()
	
    if(${use_wasm64})
      set(_lf "${_lf} ${LINK_WASM64} -s INITIAL_MEMORY=1073741824 -s MAXIMUM_MEMORY=12884901888")
    endif()
	
    set_target_properties(${target} PROPERTIES LINK_FLAGS "${_lf}")
  endfunction()

  # The three outputs (names unchanged)
  add_encoder(basis_encoder.js                 "basis_encoder"                OFF OFF) # wasm32
  add_encoder(basis_encoder_threads.js         "basis_encoder_threads"        ON  OFF) # wasm32 + threads
  add_encoder(basis_encoder_threads_wasm64.js  "basis_encoder_threads_wasm64" ON  ON ) # wasm64 + threads
endif()