diff --git a/.github/workflows/Linux_options.yml b/.github/workflows/Linux_options.yml index a007a679..60f68d07 100644 --- a/.github/workflows/Linux_options.yml +++ b/.github/workflows/Linux_options.yml @@ -23,7 +23,7 @@ jobs: # fail-fast: true matrix: bacio-version: [2.6.0] - w3emc-version: [2.10.0] + w3emc-version: [2.10.0, 2.11.0] config: - { options: "-DCMAKE_BUILD_TYPE=Debug" @@ -31,18 +31,9 @@ jobs: - { options: '-DCMAKE_C_Fortran_FLAGS="-g" -DLOGGING=ON' } - - { - options: "-DCMAKE_BUILD_TYPE=Debug" - } - { options: "-DBUILD_WITH_W3EMC=OFF" } - - { - options: "-DBUILD_WITH_W3EMC=OFF -DCMAKE_BUILD_TYPE=Debug" - } - - { - options: "-DENABLE_SHARED=ON" - } steps: diff --git a/.github/workflows/Linux_shared.yml b/.github/workflows/Linux_shared.yml new file mode 100644 index 00000000..89a90074 --- /dev/null +++ b/.github/workflows/Linux_shared.yml @@ -0,0 +1,175 @@ +# This is a GitHub actions workflow for NCEPLIBS-g2. +# +# This builds the develop branch different options for shared library builds. +# +# Ed Hartnett, 10/2/23 +name: Linux_shared +on: + push: + branches: + - develop + pull_request: + branches: + - develop + +jobs: + Linux_shared: + runs-on: ubuntu-latest + env: + FC: gfortran + CC: gcc + LD_LIBRARY_PATH: /home/runner/jasper/lib + strategy: + fail-fast: true + matrix: + bacio-version: [2.6.0] + w3emc-version: [2.11.0] + config: + - { + options: "-DCMAKE_BUILD_TYPE=Debug" + } + - { + options: "-DBUILD_WITH_W3EMC=OFF" + } + - { + options: "-DBUILD_WITH_W3EMC=OFF -DCMAKE_BUILD_TYPE=Debug" + } + + steps: + + - name: install-dependencies + run: | + sudo apt-get update + sudo apt-get install libpng-dev zlib1g-dev libjpeg-dev + + - name: cache-bacio + id: cache-bacio + uses: actions/cache@v3 + with: + path: ~/bacio + key: bacio-${{ runner.os }}-${{ matrix.bacio-version }}-shared + + - name: checkout-bacio + if: steps.cache-bacio.outputs.cache-hit != 'true' + uses: actions/checkout@v3 + with: + repository: NOAA-EMC/NCEPLIBS-bacio + path: bacio + ref: v${{ matrix.bacio-version }} + + - name: build-bacio + if: steps.cache-bacio.outputs.cache-hit != 'true' + run: | + cd bacio + mkdir build + cd build + cmake -DCMAKE_INSTALL_PREFIX=~/bacio -DBUILD_SHARED_LIBS=ON .. + make -j2 + make install + + - name: cache-w3emc + id: cache-w3emc + uses: actions/cache@v3 + with: + path: ~/w3emc + key: w3emc-${{ runner.os }}-${{ matrix.w3emc-version }}-${{ matrix.bacio-version }}-shared + + - name: checkout-w3emc + if: steps.cache-w3emc.outputs.cache-hit != 'true' + uses: actions/checkout@v3 + with: + repository: NOAA-EMC/NCEPLIBS-w3emc + path: w3emc + ref: v${{ matrix.w3emc-version }} + + - name: build-w3emc + if: steps.cache-w3emc.outputs.cache-hit != 'true' + run: | + cd w3emc + mkdir build + cd build + cmake -DCMAKE_PREFIX_PATH=~/bacio -DCMAKE_INSTALL_PREFIX=~/w3emc -DBUILD_WITH_BUFR=OFF -DENABLE_SHARED=ON -DBUILD_WITH_EXTRA_DEPS=OFF .. + make -j2 + make install + + - name: cache-jasper + id: cache-jasper + uses: actions/cache@v3 + with: + path: ~/jasper + key: jasper-${{ runner.os }}-4.0.0-shared + + - name: checkout-jasper + if: steps.cache-jasper.outputs.cache-hit != 'true' + uses: actions/checkout@v3 + with: + repository: jasper-software/jasper + path: jasper + ref: version-4.0.0 + + - name: build-jasper + if: steps.cache-jasper.outputs.cache-hit != 'true' + run: | + cd jasper + mkdir build-jasper && cd build-jasper + cmake -DCMAKE_INSTALL_PREFIX=~/jasper -DENABLE_SHARED=ON .. + make -j2 + make install + + - name: checkout-g2c + uses: actions/checkout@v3 + with: + repository: NOAA-EMC/NCEPLIBS-g2c + path: g2c + ref: develop + + - name: build-g2c + run: | + cd g2c + mkdir build + cd build + cmake -DCMAKE_INSTALL_PREFIX=~/g2c -DJasper_ROOT=~/jasper -DENABLE_SHARED=ON .. + make -j2 + make install + + - name: checkout + uses: actions/checkout@v3 + with: + path: g2 + + - name: cache-data + id: cache-data + uses: actions/cache@v3 + with: + path: ~/data + key: data-4 + + - name: build + run: | + set -x + cd g2 + mkdir build + cd build + cmake ${{ matrix.config.options }} -DCMAKE_PREFIX_PATH="~/jasper;~/g2c;~/bacio;~/w3emc" -DCMAKE_INSTALL_PREFIX="~/g2/install" -DFTP_TEST_FILES=ON -DTEST_FILE_DIR=/home/runner/data -DBUILD_SHARED_LIBS=ON .. + make -j2 VERBOSE=1 + + - name: cache-data + if: steps.cache-data.outputs.cache-hit != 'true' + run: | + mkdir ~/data + cp $GITHUB_WORKSPACE/g2/build/tests/data/* ~/data + + - name: test + run: | + cd $GITHUB_WORKSPACE/g2/build + ctest --verbose --rerun-failed --output-on-failure + + - name: check_install + run: | + cd $GITHUB_WORKSPACE/g2/build + make install + ls -l ~/g2/install/lib/lib*.so || exit 1 + + + + diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index cb61a8ef..3e5538e1 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -23,7 +23,7 @@ if (BUILD_WITH_W3EMC) endif() # These are the C source files. -set(c_src dec_jpeg2000.c dec_png.c enc_jpeg2000.c enc_png.c mova2i.c) +set(c_src dec_png.c enc_png.c mova2i.c) # Create this fortran file, which has the contents of the VERSION file # substituted in. @@ -41,7 +41,10 @@ foreach(kind ${kinds}) "${fortran_${kind}_flags}") set_target_properties(${lib_name}_f PROPERTIES Fortran_MODULE_DIRECTORY ${module_dir}) - + if(BUILD_SHARED_LIBS) + set_property(TARGET ${lib_name}_f PROPERTY POSITION_INDEPENDENT_CODE 1) + endif() + # Set preprocessor define so code can know what kind of library is # being built. target_compile_definitions(${lib_name}_f PUBLIC KIND=${kind}) @@ -50,9 +53,12 @@ foreach(kind ${kinds}) add_library(${lib_name}_c OBJECT ${c_src}) target_include_directories(${lib_name}_c PRIVATE ${JASPER_INCLUDE_DIR}) target_link_libraries(${lib_name}_c PRIVATE PNG::PNG) + if(BUILD_SHARED_LIBS) + set_property(TARGET ${lib_name}_c PROPERTY POSITION_INDEPENDENT_CODE 1) + endif() # Assemble the library. - add_library(${lib_name} STATIC $ $) + add_library(${lib_name} $ $) # Link to bacio, and jasper always. target_link_libraries(${lib_name} PUBLIC bacio::bacio ${PNG_LIBRARIES} ${JASPER_LIBRARIES})